@revturbine/sdk 0.7.7 → 0.7.8

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.js CHANGED
@@ -1,3 +1,3 @@
1
- import {z}from'zod';var cI=Object.defineProperty;var mI=(t,e,n)=>e in t?cI(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var w=(t,e,n)=>mI(t,typeof e!="symbol"?e+"":e,n);function uI(){try{return "production"}catch{return}}function pI(){try{return typeof process<"u"}catch{return false}}function Ls(){let t=uI();if(t!==void 0)return t!=="production";if(pI())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var Km="1.0.0",Hf=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],dI=["slot_configs","content_overrides"];function gI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function hI(t,e){if(!Ls())return;let n=dI.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 fI(t,e){for(let n of Hf)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function _I(t){return t.artifact_type==="playbook"&&t.format_version===Km&&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&&Hf.every(e=>Array.isArray(t[e]))}function yI(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 Gf(t,e,n){if(t===void 0)return;if(!gI(t))throw new Error(`Invalid ${e}: expected top-level object`);hI(t,e),fI(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!==Km)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==Km)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let i=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,a=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!i)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!a)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(!yI(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:u,..._}=t,C=r?t.playbook_version_id??null:u??null,I={..._,artifact_type:"playbook",format_version:Km,playbook_handle:t.playbook_handle??"default",playbook_version_id:C,tenant_id:i,environment_id:a};if(!_I(I))throw new Error(`Invalid ${e}: malformed Playbook header`);return I}function za(t,e,n){return Gf(t,e,n)}var Yf=z.enum(["session","day","week","month"]),Wf=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(Wf),cap:z.object({count:z.number().int().min(1),period:Yf})});function vI(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 Zf(t,e){return `${t}:${e}`}function oc(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 i of t.rules){if(!i.group.some(_=>_.kind==="template"?_.id===n.templateId:_.kind==="slot"?_.id===n.slotId:false))continue;let s=Zf(i.id,i.cap.period);if((r.get(s)??0)>=i.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:i.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:i}=t.perPayload;if(i!=null&&Number.isFinite(i)&&i>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let a of n)for(let s of a.rules){let u=vI(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 Zp(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 Qf=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(Qf).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 Xp=864e5,PI=75;function Xf(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function TI(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=PI?"running_out":"active"}function II(t,e,n){let r=Math.max(0,e-t),i=Math.max(0,n-t),a=Math.max(0,e-n),s=Math.max(1,Math.round(r/Xp)),u=Math.min(s,Math.floor(i/Xp)),_=Math.max(0,Math.ceil(a/Xp)),C=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:u,daysRemaining:_,daysTotal:s,progressPercent:C}}function CI(t,e){let n=Math.max(1,e),r=Math.max(0,t),i=Math.max(0,n-r),a=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:i,usageLimit:n,progressPercent:a}}function Hm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:i,usageBalances:a}=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 _=e.trial_limit_type??"time",C=0,I=false,R,O,A,j,M,oe;if(_==="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=a?.[J]??0,An=CI(Pn,ot);C=An.progressPercent,I=An.isExpiredByBounds,A=An.usageConsumed,j=An.usageRemaining,M=An.usageLimit,oe=J;}else {let J=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(J))return;let ot=II(s,J,u);C=ot.progressPercent,I=ot.isExpiredByBounds,R=ot.dayNumber,O=ot.daysRemaining;}let Z=Xf(e.status,I),_e=TI(Z,C),De;e.rule_type==="reverse_trial"?De=i: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:_,progress_percent:C,...R!==void 0?{day_number:R}:{},...O!==void 0?{days_remaining:O}:{},...oe!==void 0?{usage_entitlement_handle:oe}:{},...A!==void 0?{usage_consumed:A}:{},...j!==void 0?{usage_remaining:j}:{},...M!==void 0?{usage_limit:M}:{}}}function e_(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let i,a=-1/0;for(let s of t){let u=Date.parse(s.started_at);if(Number.isNaN(u)||r<u)continue;let _=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(_=(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)||(_=r>=I);}let C=Xf(s.status,_);C!=="active"&&C!=="converted"||u>a&&(i=s,a=u);}return i}function ed(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 td(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,i=-1/0;for(let a of t){if(a.status!=="active"&&a.status!=="expired"&&a.status!=="converted")continue;let s=Date.parse(a.started_at);Number.isNaN(s)||n<s||s>i&&(r=a,i=s);}return r}function Gm(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:i,usageBalances:a,basePlanHandle:s}=t,u=td(r,i);if(!u)return {trial:void 0,reverseGrants:null};if(u.rule_type==="reverse_trial"){let I=(n??[]).find(A=>A.id===u.rule_id),R=Hm({instance:u,...I!==void 0?{rule:I}:{},nowIso:i,...s!==void 0?{basePlanHandle:s}:{},...a!==void 0?{usageBalances:a}:{}}),O=I!==void 0?ed(u,I):null;return {trial:R,reverseGrants:O}}let _=(e??[]).find(I=>I.id===u.rule_id);return {trial:Hm({instance:u,..._!==void 0?{rule:_}:{},nowIso:i,...s!==void 0?{basePlanHandle:s}:{},...a!==void 0?{usageBalances:a}:{}}),reverseGrants:null}}var EI="__no_dim__";function cc(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let a of t){let s=n(a)??EI,u=i.get(s)??[];u.push(a),i.set(s,u);}for(let a of i.values())if(!a.some(s=>r.has(s)))return false;return true}function kI(t,e){return t<e?-1:t>e?1:0}function xe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function uc(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function nr(...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 bo(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function nd(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function pc(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 rd(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 id(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function t_(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 n_(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 i=xe(t.content)?t.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(s=>typeof s=="string"):[]}function ad(t,e){let n=n_(t);if(n.length===0||!e)return true;let r=t_(e);return r.length===0?true:n.some(i=>{let a=i.toLowerCase();return r.some(s=>a===s||a.endsWith(`_${s}`)||a.includes(s))})}function sd(t,e){if(e.length===0)return null;let n=[...e].sort((i,a)=>i.tier_position!==a.tier_position?i.tier_position-a.tier_position:i.sort_order!==a.sort_order?i.sort_order-a.sort_order:kI(i.source_id,a.source_id)),r=n.findIndex(i=>i.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function xo(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function od(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 ba(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 Ym(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 Ns(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 i of t.plans){if(!xe(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let s=typeof i.name=="string"?i.name.trim():"";if(s.length>0)return s}}}function Wm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function ps(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 dc(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(i=>i!==null)??0}function Jm(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(i=>i!==null)??0}function cd(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)??dc(t)}var RI=new Set(["trial_started","trial_ended","trial_converted"]),AI=new Set(["trial_progress","trial_ending"]);function md(t){let e=xe(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&RI.has(n))return 1;if(n&&AI.has(n))return 3;let r=[In(e.usage_percent),In(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function gc(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(i=>i!==null)??null}function ud(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 i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let a=In(i);return a!==null?String(a):null}function pd(t){let n=(xe(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(i=>typeof i=="string"?i.trim():In(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=In(n);return r!==null?[String(r)]:[]}function mc(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>mc(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${mc(r)}`).join(",")}}`}function dd(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 jI=/^[a-z0-9._]{1,100}$/,ds={Persisted:"persisted",Transient:"transient"},xa={Internal:"internal",External:"external"},oa={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},OI="readOnly";function Si(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[OI]===true||(e[n]=r);}return z.object(e)}function Hr(t){let e=Si(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(jI)}):e}var {Unrestricted:oi}=oa,{Transient:li,Persisted:DI}=ds,{Internal:Vs,External:$a}=xa;z.object({page:z.coerce.number().int().min(1).default(1).meta(oi),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(oi)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var Bn=z.object({created_at:z.string().datetime().meta({...oi,readOnly:true}),updated_at:z.string().datetime().meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),Un=z.object({id:z.string().min(1).meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),zn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var MI=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],i_=z.enum(MI).meta({id:"ComponentType","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),Zm=i_,UI=["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"];z.enum(UI).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var a_={button:"button",plans_page_ctas:"in_page",plans_page_full:"full_page",inline_gate_message:"inline",tooltip:"tooltip",in_page_card:"in_page",usage_counter:"in_page",credit_counter:"in_page",trial_counter:"in_page",banner:"banner",modal_optional:"modal",modal_blocking:"modal",toast:"toast",email:"email",sms:"sms",push:"push",cli:"cli",agent_connector:"agent",custom_in_app:"custom"},s_=Object.freeze({...a_,modal_overlay:"modal",banner_placement:"banner",full_page:"full_page"});function o_(t){let e=i_.safeParse(t);return e.success?e.data:a_[t]}var l_=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var Qm=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),So=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var Ka=z.string().min(1).max(200),_r=z.string().min(1).max(100),Xm=z.string().max(500).optional(),Ai=z.record(z.string(),z.unknown()).default({}),Bs=z.number().int().min(10).max(100).multipleOf(10),eu=z.string().datetime().nullable().default(null),mr=z.object({environment_id:z.string().min(1).default("production").meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs}),yr=z.object({playbook_version_id:z.string().nullable().default(null).meta(oi),is_current:z.boolean().default(true).meta({...oi,readOnly:true}),is_deleted:z.boolean().default(false).meta({...oi,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...oi,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...oi,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs}),FI=Un.merge(Bn).merge(zn).merge(mr).extend({handle:_r.meta({...oi,readOnly:true}),active:z.boolean().default(true).meta({...oi,readOnly:true})});function Gr(t){return FI.meta({id:t,"x-revturbine-schema-persistence":DI,"x-revturbine-schema-exposure":Vs})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var c_=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":li,"x-revturbine-schema-exposure":$a});var LI=new Set(Zm.options);function tu(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:{},i=LI.has(r.type)?r.type:"custom",a=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:i,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:xe(t.content)?t.content:{},...xe(t.promotion)?{promotion:t.promotion}:{},cta_path:a,ui_path:a,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 NI=999999;function VI(t){return t==null||t==="unlimited"||t===NI}function hc(t){return VI(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function BI(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 p_(t,e,n){return t.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(s=>BI(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),a=cc(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:i,matchesSegment:a,matched:i&&a}})}function d_(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return hc(e.limit_value)??0;case "credits":return hc(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return hc(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function g_(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let i of t){let a=e(i);(n===void 0||a>r)&&(n=i,r=a);}return n}function zI(t){return g_(t,e=>d_(e.rule))?.rule}function gd(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let i=p_(r,n,t.segmentDimensions);return zI(i.filter(a=>a.matched))}function $I(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 KI(t,e,n){let r=new Map;for(let i of n)typeof i.handle=="string"&&r.set(i.handle,typeof i.dimension_id=="string"?i.dimension_id:void 0);return cc($I(t),e,i=>r.get(i))}function m_(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 fc(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:i,segmentIds:a,usageBalances:s,userUsage:u,trialGrantedEntitlementHandles:_,effectivePlanHandle:C}=t,R=(r.entitlements??[]).find(mt=>typeof mt?.unique_handle=="string"&&mt.unique_handle===e),O=typeof R?.unique_handle=="string"?R.unique_handle:e,A=typeof R?.unique_handle=="string"?R.unique_handle:void 0,j=!!(_&&_.size>0&&(_.has(e)||_.has(O)||A!==void 0&&_.has(A)));if(j&&(C===void 0||C===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let oe=String((j&&C?C:i)||"").trim().toLowerCase(),_e=(r.plans??[]).find(mt=>typeof mt.unique_handle=="string"&&mt.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(mt=>!((typeof mt.entitlement_id=="string"?mt.entitlement_id:typeof mt.entitlementId=="string"?mt.entitlementId:"")!==O||!(Array.isArray(mt.targets)?mt.targets.filter(Jn=>xe(Jn)&&Jn.kind==="plan"&&typeof Jn.id=="string").map(Jn=>Jn.id):Array.isArray(mt.plan_ids)?mt.plan_ids.filter(Jn=>typeof Jn=="string"):Array.isArray(mt.planIds)?mt.planIds.filter(Jn=>typeof Jn=="string"):[]).includes(De)||!KI(mt,a,r.segments??[])));if(J.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let ot=(()=>{let mt=(r.entitlements??[]).find(Nn=>Nn.unique_handle===O);return mt&&typeof mt.type=="string"?mt.type:void 0})(),Pn=mt=>{let Nn=xe(mt)?mt:{},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=g_(J,mt=>{let Nn=Pn(mt);return d_({kind:typeof Nn.kind=="string"?Nn.kind:"",fields:Nn})})??J[0],be=Pn(An);typeof be.kind=="string"?be.kind:void 0;let gn=mt=>{let Nn=u?.[mt];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 nu(be,wn)}function u_(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function h_(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function nu(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=hc(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?u_(m_(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,i=r===void 0?void 0:hc(r),a=Number(t.initial_grant),s=i!==void 0&&i>=0?i:Number.isFinite(a)&&a>=0?a:void 0;return s!==void 0&&Number.isFinite(s)?u_(m_(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 hd(t,e,n,r,i=80){let a=e.get(t);if(a)return a;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let u=Number(r[t]);if(u>0)return {limit:u,warningPercent:i}}return null}var HI=0;function GI(){return `core_${Date.now()}_${++HI}`}function f_(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var fd=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=GI(),n=this.placements.get(t.placementId);if(this.interactionTracker){let a=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(a.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:a.reason?[a.reason]:[],suppressionReason:a.reason,content:f_(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let i={__providers:await this.registry.resolveAll()};if(t.traits&&(i.traits=t.traits),this.placementResolver){let a=await this.placementResolver(t,n,i);if(a.visible&&a.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(a.output);if(!s.allowed)return {...a,visible:false,reasonCodes:[...a.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return a}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:f_("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",i=e.entitlements;if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let a=i.entries[t];if(!a)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=i.usage?.[t];if(e.rules){let u=gd(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(u){let _={kind:u.kind,...u.fields};if(h_(_.kind))return nu(_,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:a.status,allowed:a.status==="allowed",reason:a.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};function __(t,e){let n=e.segmentDimensions??{},r=t.filter(a=>a.visibility==="public"&&cc(a.segment_handle===null?[]:[a.segment_handle],e.segmentIds,s=>n[s])),i=r.filter(a=>a.segment_handle!==null);return i.length>0?i:r.filter(a=>a.segment_handle===null)}function y_(t){return {price:t.price_amount,currency:t.currency,pricingModel:t.pricing_model,billingPeriod:t.billing_period}}function ru(t,e,n){return t.filter(r=>r.visibility==="public").flatMap(r=>__(e.filter(i=>i.plan_handle===r.unique_handle),n).map(i=>({handle:r.unique_handle,name:r.name,tierPosition:r.tier_position,sortOrder:r.sort_order,variationHandle:i.handle,segmentHandle:i.segment_handle,price:y_(i)}))).sort((r,i)=>r.tierPosition-i.tierPosition||r.sortOrder-i.sortOrder||r.handle.localeCompare(i.handle)||r.variationHandle.localeCompare(i.variationHandle))}function iu(t,e,n){return t.filter(r=>r.visibility==="public").flatMap(r=>__(e.filter(i=>i.addon_handle===r.unique_handle),n).map(i=>({handle:r.unique_handle,name:r.name,sortOrder:r.sort_order,variationHandle:i.handle,segmentHandle:i.segment_handle,price:y_(i)}))).sort((r,i)=>r.sortOrder-i.sortOrder||r.handle.localeCompare(i.handle)||r.variationHandle.localeCompare(i.variationHandle))}var v_=["high","medium","low"];function _c(t,e){return t==="active"?v_.includes(e):t===e}var WI="activity_level";function b_(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),i=t.value,a=t.field===WI;switch(t.operator){case "eq":return a?_c(i,r):r===i;case "neq":return a?!_c(i,r):r!==i;case "gt":return Number(r)>Number(i);case "lt":return Number(r)<Number(i);case "gte":return Number(r)>=Number(i);case "lte":return Number(r)<=Number(i);case "contains":return r.includes(i);case "in":{let s=i.split(",").map(u=>u.trim());return a?s.some(u=>_c(u,r)):s.includes(r)}default:return false}}function yc(t,e,n={}){return t.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0),a=r.experiment_handle;if(a){if(!Object.prototype.hasOwnProperty.call(n,a))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>b_(s,e))}).map(r=>r.handle)}function x_(t){let e={};for(let n of t){let r=n.experiment_handle;r&&(e[n.handle]=r);}return e}function S_(t,e,n={}){for(let r of e){let i=t[r];if(!i)continue;let a=n[i];if(typeof a=="string")return {experiment_id:i,variant_key:a}}}function _d(t,e){let n=String(t.field||""),r=String(t.operator||""),i=String(t.value||""),a=e[n],s=typeof a=="string"||typeof a=="number"||typeof a=="boolean"?a:null,u=b_(t,e);return {field:n,operator:r,expected:i,actual:s,matched:u}}function au(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function vc(t){let e=2166136261;for(let i=0;i<t.length;i+=1)e^=t.charCodeAt(i),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),au(n)}var yd={async sha256Base64Url(t){return vc(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 P_={Named:"named",Minted:"minted"},T_="x-revturbine-schema-identity";function la(t="handle"){return {[T_]:{kind:P_.Named,handleField:t}}}function ca(t="handle"){return {[T_]:{kind:P_.Minted,handleField:t}}}var yn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ui={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},JI="x-revturbine-context",ZI="x-revturbine-in-config",QI="x-revturbine-sdk-input",XI="x-revturbine-source",eC="x-revturbine-deprecation",tC={[yn.Playbook]:Ui.Customer,[yn.Branding]:Ui.Customer,[yn.Billing]:Ui.Stripe,[yn.Metering]:Ui.Customer,[yn.CustomerOperations]:Ui.Runtime,[yn.EventIngestion]:Ui.Runtime};function Zn(t,e){return {[JI]:t,[ZI]:e.inConfig??t===yn.Playbook,[QI]:e.sdkInput,[XI]:e.source??tC[t]}}function su(t){return {deprecated:true,[eC]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var sn=t=>z.object({items:z.array(t)}),rr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),U=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()});function ou(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=>ou(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(),i=[];for(let a of r){let s=n[a];s!==void 0&&i.push(JSON.stringify(a)+":"+ou(s));}return "{"+i.join(",")+"}"}throw new Error(`canonicalizeJson: unsupported value type ${typeof t}`)}function bc(t){return ou(t)}async function bd(t,e){let n=bo(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 vc(r).slice(0,22)}function Ha(t){return t.componentType??t.surfaceType}function xd(t){return [t.slotId||"",Ha(t)||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function Sd(t){let e=bc({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:bo(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${vc(e)}`}function w_(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let i=r.surface.template;if(!i)continue;let a=pd(r);if(a.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==i)continue;let u=ud(s);u&&a.includes(u)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let i=n.get(r.surface.template)??[];i.push(r),n.set(r.surface.template,i);}for(let r of n.values()){if(r.length<=1)continue;let i=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(i.length<=1)continue;let a=i.reduce((s,u)=>u.order>s.order?u:s);for(let s of i)s.output.output_id!==a.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function I_(t){let n=(xe(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function nC(t,e,n){if(n===1){let r=t.surface.slot_id,i=e.surface.slot_id;if(typeof r=="string"&&r&&typeof i=="string"&&i)return {leftKey:r,rightKey:i}}else if(n===0){let r=I_(t),i=I_(e);if(r&&i)return {leftKey:r,rightKey:i}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function lu(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 i=t[n],a=t[r];if(i.surface.type!==a.surface.type)continue;let s=ps(i.category),u=ps(a.category);if(s!==u){s<u?e.add(a.output_id):e.add(i.output_id);continue}if(s===0||s===1){let{leftKey:_,rightKey:C}=nC(i,a,s);_===C&&e.add(a.output_id);}}return t.filter(n=>!e.has(n.output_id))}function Pd(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(_=>ps(_.category)===1)),r.length===0)return null;let i=w_(r);if(i.length===0)return null;let a=i.some(_=>gc(_)!==null),s=a?i:lu(i);return s.length===0?null:[...s].sort((_,C)=>{if(a){let M=gc(_),oe=gc(C);if(M!==null&&oe!==null&&M!==oe)return M-oe;if(M!==null&&oe===null)return -1;if(M===null&&oe!==null)return 1}let I=ps(_.category),R=ps(C.category),O=I-R;if(O!==0)return O;if(I===2){let M=md(_)-md(C);if(M!==0)return M;let oe=cd(C)-cd(_);if(oe!==0)return oe}let A=dc(C)-dc(_);if(A!==0)return A;let j=Jm(C)-Jm(_);return j!==0?j:_.output_id.localeCompare(C.output_id)})[0]??null}function rC(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function Td(t,e,n,r){let i=xe(r)?r:{},a=xe(i.decision)?i.decision:{},s=xe(i.content)?i.content:xe(a.content)?a.content:{},u=typeof a.visible=="boolean"?a.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:t,requestId:typeof i.request_id=="string"?i.request_id:e,visible:u,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(_=>typeof _=="string"):[],content:rC(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 cu(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 i=xe(r.caps)?r.caps:void 0;if(!i)continue;let a=[],s=rd(i.max_per_period);s&&a.push(s);let u=Number(i.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:a,..._!==void 0?{cooldownMs:_}:{}});}return e}function Id(t,e,n,r,i="impression"){if(ps(t.category)<=1)return {allowed:true};let a=cu(t);if(a.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(R=>Number.isFinite(R)&&R>0)},u=oc({perPayload:{policies:a,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!u.allowed)return {allowed:false,reason:u.reason,updatedState:s};let _=[...s.seenAt,r],C=i==="dismiss"?a.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:_,...I!==void 0?{cooldownUntil:I}:{}}}}function Cd(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 vd(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Cd(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 j_(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 i=r[0];for(let s of r.slice(1)){let u=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,_=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(u>_||u===_&&s.entryOrder<i.entryOrder)&&(i=s);}let a=r.filter(s=>s!==i).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:i,supersededIds:a}}function O_(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 iC(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 aC(t,e){let n=iC(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 sC(t,e){if(!e)return null;let n=aC(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 C_(t,e){if(!t)return true;let n=sC(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Ze}=oa,{Persisted:mu,Transient:gs}=ds,{External:Li}=xa,q_=Zn(yn.Playbook,{sdkInput:true});Zn(yn.Playbook,{inConfig:false,sdkInput:false});var oC=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),lC=Zn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ui.Runtime}),cC=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),mC={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function uC(t){return mC[t]??[]}function pC(t,e){return uC(e).includes(t)}var D_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),M_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),dC=z.object({count:z.number().int().positive().meta(Ze),period:M_.meta(Ze)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li});z.object({surface_type:z.string().min(1).meta(Ze),rules:z.array(dC).meta(Ze),cooldown_ms:z.number().int().nonnegative().optional().meta(Ze)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Li,...oa.Operational,...oC});var gC=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":gs,"x-revturbine-schema-exposure":Li}),Po=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true}),name:Ka.meta(Ze),handle:_r.meta(Ze),description:Xm.meta(Ze),category:D_.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:Bs.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:cC.optional().meta(Ze),activation_window_start:z.string().datetime().optional().meta(Ze),activation_window_end:z.string().datetime().optional().meta(Ze),metadata:Ai.meta(Ze)}).meta({id:"Placement","x-revturbine-schema-persistence":mu,"x-revturbine-schema-exposure":Li,...q_,...la()}),hC=Gr("PlacementAnchor"),fC=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),_C=z.object({code:fC.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":gs,"x-revturbine-schema-exposure":Li}),E_=Po.extend({warnings:z.array(_C).optional().meta(Ze)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),yC=z.object({label:z.string().min(1).max(200).meta(Ze),cta_path_type:gC.meta(Ze),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ze)}).meta({id:"CtaObject","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),Sc=Un.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(yC).default([]).meta(Ze),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ze),max_period_unit:M_.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":mu,"x-revturbine-schema-exposure":Li,...q_,...ca()}),vC=Gr("PlacementPayloadAnchor"),bC=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ze),surface_type:Zm.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":mu,"x-revturbine-schema-exposure":Li,...lC,...la("surface_slot_handle")}),xC=Si(Po),SC=Si(Sc);({"/api/placement-anchors":{get:U({operationId:"listPlacementAnchors",requestParams:{query:on},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:sn(hC)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:U({operationId:"listPlacements",requestParams:{query:on},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:sn(Po)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:U({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Po)}}},responses:{201:{description:"Created",content:{"application/json":{schema:E_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:U({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:U({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:xC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:E_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:U({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:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:U({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:U({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:D_,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:U({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(vC)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:U({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(Sc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:U({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Sc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:U({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:SC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Sc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:U({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:U({operationId:"listSurfaceSlots",requestParams:{query:on},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:sn(bC)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function k_(t,e,n){if(!t)return true;if(!pC(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 R_(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let i=r.indexOf(t.tierThreshold);if(i<0)return false;let a=n?.tiers?.[t.entitlementHandle];return (a?r.indexOf(a):-1)<i}function uu(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:[],i=Array.isArray(t.promotions)?t.promotions:[],a=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=>i.find(u=>u.id===s||u.name===s),listPersonalizationTokens:()=>a}}function Pc(t,e){let n={...t};for(let r of e){let i=t[r.token];if(i==null||!r.value_map)continue;let a=String(i),s=r.value_map[a];s!==void 0&&(n[r.token]=s);}return n}function Ed(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,i)=>{let a=e[i];if(a===void 0){let s=n[i];s&&(a=e[s]);}return a===void 0?r:String(a)})}function kd(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=Ed(i,e):n[r]=i;return n}function U_(t,e){return kd(t,e)}function Rd(t,e,n,r,i,a,s){let u=n.filter(O=>O.surface_template_id===t&&O.status==="active");if(u.length===0)return null;let _=new Map(r.map(O=>[O.block_id,O])),C=new Set(e.segmentIds),I=Pc(a,i),R=s?.segmentDimensions;for(let O of u){let A=O.default_message_block_id,j,M=O.ui_path_id,oe=O.promotion_id;if(O.segment_content_map){if(R&&Object.keys(R).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=>C.has(be.segment_id));if(!An){J=false;break}ot||(ot=An);}if(J&&ot)A=ot.message_block_id,j=ot.segment_id,ot.ui_path_id&&(M=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(C.has(J.segment_id)){A=J.message_block_id,j=J.segment_id,J.ui_path_id&&(M=J.ui_path_id),J.promotion_id&&(oe=J.promotion_id);break}}else for(let ne of O.segment_content_map)if(C.has(ne.segment_id)){A=ne.message_block_id,j=ne.segment_id,ne.ui_path_id&&(M=ne.ui_path_id),ne.promotion_id&&(oe=ne.promotion_id);break}}let Z=_.get(A);if(!Z||Z.status!=="active")continue;let _e={...Z.default_content};if(Z.segment_overrides){let ne=j?Z.segment_overrides.find(J=>J.segment_value_id===j):Z.segment_overrides.find(J=>C.has(J.segment_value_id));ne&&(_e={..._e,...ne.content},j=ne.segment_value_id);}let De=U_(_e,I);return {payload:O,messageBlock:Z,resolvedContent:De,matchedSegmentId:j,uiPathId:M,promotionId:oe}}return null}async function pu(t,e,n,r,i){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),_=i??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),C=Pc(r,_);for(let I of s){let R=I.default_message_block_id,O,A=I.ui_path_id,j=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,O=ne.segment_id,ne.ui_path_id&&(A=ne.ui_path_id),ne.promotion_id&&(j=ne.promotion_id);break}}let M=await Promise.resolve(n.getMessageBlockById(R));if(!M||M.status!=="active")continue;let oe={...M.default_content};if(M.segment_overrides){let ne=O?M.segment_overrides.find(J=>J.segment_value_id===O):M.segment_overrides.find(J=>u.has(J.segment_value_id));ne&&(oe={...oe,...ne.content},O=ne.segment_value_id);}let Z=U_(oe,C),_e;A&&n.getUiPathById&&(_e=await Promise.resolve(n.getUiPathById(A)));let De;return j&&n.getPromotionById&&(De=await Promise.resolve(n.getPromotionById(j))),{payload:I,messageBlock:M,resolvedContent:Z,matchedSegmentId:O,uiPathId:A,promotionId:j,uiPath:_e??void 0,promotion:De??void 0}}return null}function PC(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let i=e[r];return i==null?`{{${r}}}`:String(i)})}function TC(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=PC(r,t);continue}e[n]=r;}return e}function IC(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 CC(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function EC(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 CC(e,n)}function kC(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 RC(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 kC(n,e,r)}function AC(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 wC(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 AC(n,e,r)}function jC(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function OC(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function qC(t,e){let n={...s_};for(let u of t.surface_templates??[]){let _=o_(u.surface_type);if(!_)throw new Error(`Surface template ${u.id} has no canonical ComponentType for ${u.surface_type}`);n[u.id]=_;}let r=new Map;for(let u of t.plans??[])r.set(u.unique_handle,u.unique_handle);let i=new Map;for(let u of t.entitlements??[])u.tier_definitions?.length&&i.set(u.unique_handle,u.tier_definitions.map(_=>_.handle));let a=new Map,s=new Map;for(let u of e.placements){let _=u.payloads[0];if(!_)continue;let C=_.surfaces[0];if(!C)continue;let I=C.template_id,R=n[I];if(!R)throw new Error(`Surface template ${I} has no canonical ComponentType`);let O={...C.fields};C.ctas?.[0]&&(O.cta_label=C.ctas[0].label),C.ctas?.[1]&&(O.secondary_cta_label=C.ctas[1].label);let A=IC(C.ctas?.[0]),j=Array.isArray(_.target?.plan_ids)?_.target.plan_ids:[],M=jC(u.trigger),oe=OC(u.trigger),Z=O_(u.trigger),_e=RC(u.trigger,M),De=EC(u.trigger),ne=wC(u.trigger,M),J={output_id:_.id,category:u.category,surface:{template:I,type:R,slot_id:u.id},content:{...O,__target_plan_ids:j,...M?{__trigger_entitlement_handle:M}:{},...Z?{__trigger_kind:Z.kind}:{}},cta_path:A,rule_id:u.id,decision_id:_.id,config_version:Wm(t),present_upsell:true},ot=a.get(I)??[];ot.push({output:J,entryOrder:u.order??0,entryCategory:u.category,triggerEntitlementHandle:M,triggerSlotId:oe,trialTrigger:Z,thresholdTrigger:_e,qualifierTrigger:De,entitlementGateTrigger:ne}),a.set(I,ot);let Pn=u.id.replace(/^pl_/,"");s.set(Pn,J),s.set(u.id,J);}for(let u of a.values())u.sort((_,C)=>_.entryOrder-C.entryOrder);return {outputsByTemplate:a,outputsByName:s,planHandleToId:r,tierLaddersByHandle:i}}function DC(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let i=new Map;for(let s of e.placements){let u=s.payloads[0]?.surfaces?.[0]?.template_id;u&&i.set(s.id,u);}let a=[];for(let s of r){let u=s.content_link?.message_block_id;if(!u)continue;let _=i.get(s.placement_id);_&&a.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:_,default_message_block_id:u,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(a.length!==0)return uu({payloads:a,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function F_(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:i,planHandleToId:a,tierLaddersByHandle:s}=qC(e.exportedConfig,e.placements),u=DC(e.exportedConfig,e.placements),_=x_(e.exportedConfig.segments??[]);function C(I,R,O,A){let j=Array.isArray(I.content.__target_plan_ids)?I.content.__target_plan_ids.filter(oe=>typeof oe=="string"):[],M=Array.isArray(I.content.__target_billing_periods)?I.content.__target_billing_periods.filter(oe=>typeof oe=="string"):[];return Zp({target_plan_ids:j,target_billing_periods:M,category:I.category},{currentPlanId:R,planHandle:O,billingPeriod:A}).eligible}return async(I,R,O)=>{let A=O?.__providers,j=A?.plan?.currentPlanHandle,M=A?.plan?.billingPeriod,oe=j?a.get(j):void 0,Z=_n=>typeof _n=="string"?_n:"",_e=Array.isArray(R?.metadata?.surface_template_ids)?R.metadata.surface_template_ids:void 0,De,ne=[];if(_e&&_e.length>0){let _n=[];for(let hn of _e){let si=r.get(hn);si&&_n.push(...si);}if(_n.length===0)return A_(I,"no_candidates_for_template","No placements configured for this surface template");_n.sort((hn,si)=>hn.entryOrder-si.entryOrder);let un=R?.metadata?.entitlement_handle,Vn=R?.metadata?.surface_slot_category,bi=Vn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Vn]:void 0,Dt=_n;if(un){let hn=_n.filter(si=>si.triggerEntitlementHandle===un);hn.length>0&&(Dt=hn);}let jn=R?.metadata?.surface_slot_id;if(jn){let hn=Dt.filter(si=>si.triggerSlotId===jn);hn.length>0&&(Dt=hn);}if(R?.metadata?.fixedOnly===true&&(Dt=Dt.filter(hn=>hn.entryCategory==="fixed")),bi&&Vn!=="fixed"&&Dt.length>1){let hn=Dt.filter(si=>bi.includes(si.entryCategory));hn.length>0&&(Dt=hn);}n&&(Dt=Dt.filter(hn=>!n.isHiddenSync(hn.output.rule_id??""))),Dt=Dt.filter(hn=>vd(hn.trialTrigger,A?.plan)),Dt=Dt.filter(hn=>C_(hn.thresholdTrigger,A?.entitlements)),Dt=Dt.filter(hn=>k_(hn.qualifierTrigger,hn.entryCategory,A?.plan)),Dt=Dt.filter(hn=>R_(hn.entitlementGateTrigger,s,A?.entitlements));let ut,cr=[],Mi=Cd(A?.plan);if(Mi!==null&&Dt.length>1){let hn=Dt.map(yo=>({ruleId:yo.output.rule_id??void 0,entryOrder:yo.entryOrder,trialTrigger:yo.trialTrigger,output:yo.output})),si=j_(hn,Mi);if(si){ut=si.winner,cr=si.supersededIds;let yo=si.winner.ruleId;Dt=Dt.filter(Kf=>Kf.trialTrigger?.kind!=="trial_progress"||(Kf.output.rule_id??void 0)===yo);}}let xi;for(let hn of Dt)if(C(hn.output,oe,j,M)){De=hn.output,xi=hn;break}xi&&ut&&ut.ruleId===(xi.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=R?.name,un=(_n?i.get(_n):void 0)??i.get(I.placementId),Vn;if(un)for(let Tn of r.values()){let bi=Tn.find(Dt=>Dt.output===un);if(bi){Vn=bi;break}}un&&n?.isHiddenSync(un.rule_id??"")?ne=["placement_retired"]:un&&!vd(Vn?.trialTrigger,A?.plan)?ne=["trial_trigger_unmet"]:un&&!C_(Vn?.thresholdTrigger,A?.entitlements)?ne=["threshold_trigger_unmet"]:un&&!k_(Vn?.qualifierTrigger,Vn?.entryCategory??un.category,A?.plan)?ne=["qualifier_trigger_unmet"]:un&&!R_(Vn?.entitlementGateTrigger,s,A?.entitlements)?ne=["entitlement_gate_unmet"]:un&&C(un,oe,j,M)?De=un:un?ne=["plan_target_mismatch"]:ne=["placement_not_found"];}if(!De){let _n=ne[0]??"placement_not_found";return A_(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:A?.segments?.segmentIds??[]},un=await pu(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,It=be?A?.entitlements?.usage?.[be]:void 0;if(It){An.usage_remaining=Number.isFinite(It.remaining)?It.remaining:0,An.usage_limit=Number.isFinite(It.limit)?It.limit:0,An.usage_current=Number.isFinite(It.used)?It.used:0,An.usage_percent=It.limit>0?Math.min(100,Math.round(It.used/It.limit*100)):0;let _n=It.reset_date;typeof _n=="string"&&_n.length>0&&(An.reset_date=_n);}let gn=TC(An),wn=S_(_,A?.segments?.segmentIds??[],A?.experiments?.assignments),mt={...De,content:gn,...ot?{message_block_handle:ot}:{},...wn},Jn=!((De.category==="upsell"||De.category==="trial_conversion")&&j==="enterprise");return {placementId:I.placementId,requestId:`local_${Date.now()}`,visible:Jn,decisionSource:"fallback",reasonCodes:Jn?[]:["plan_tier_suppressed"],content:{header:Z(mt.content.header),body:Z(mt.content.body),cta_label:Z(mt.content.cta_label),title:Z(mt.content.header),cta:Z(mt.content.cta_label)},output:mt}}}function A_(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 Io(t){return F_({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function To(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 xc(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function MC(t,e){let n=To(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 i=(e??"").toLowerCase();for(let[a,s]of Object.entries(r))if(a.toLowerCase()===i)return To(s)}}function UC(t){let e=To(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 L_(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[A,j]of Object.entries(t.base))(typeof j=="string"||typeof j=="number")&&(e[A]=j);let r=n?.plan?.currentPlanHandle,i=n?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let a=n?.plan?.trialDaysRemaining;a!==void 0&&Number.isFinite(a)&&(e.trial_days_remaining=a);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let u=n?.traits?.traits??{};for(let[A,j]of Object.entries(u))(typeof j=="string"||typeof j=="number")&&(e[A]=j);let _=n?.entitlements?.usage??{};for(let[A,j]of Object.entries(_)){let M=xc(A);if(!M)continue;let oe=To(j.used),Z=To(j.remaining),_e=To(j.limit);if(oe!==void 0&&(e[`${M}_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[`${M}_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[`${M}_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[`${M}_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[`${M}_usage_percent`]=ne,e.usage_percent===void 0&&(e.usage_percent=ne);}let De=j.reset_date;typeof De=="string"&&De.length>0&&(e[`${M}_reset_date`]=De,e.reset_date===void 0&&(e.reset_date=De));}let C=n?.rules?.entitlementRules??{};for(let[A,j]of Object.entries(C)){if(!Array.isArray(j)||j.length===0)continue;let M=j.find(ne=>ne.kind==="usage_limit"||ne.kind==="usage_rate"||ne.kind==="credits"||ne.kind==="seat");if(!M)continue;let oe=xc(A);if(!oe)continue;let Z=M.fields??{},_e=MC(Z,r);_e!==void 0&&e[`${oe}_usage_limit`]===void 0&&(e[`${oe}_usage_limit`]=_e);let De=UC(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 R=t.effectiveGrants;if(R)for(let[A,j]of Object.entries(R)){if(j.allocation==="per_user"||j.allocation==="per_user_pooled"||!j.allocation){let M=xc(A);if(!M)continue;j.used!==void 0&&e[`${M}_usage_current`]===void 0&&(e[`${M}_usage_current`]=j.used),j.limit!==void 0&&e[`${M}_usage_limit`]===void 0&&(e[`${M}_usage_limit`]=j.limit);}if(j.enforcement&&(j.status==="limited"||j.status==="denied")){let M=xc(A);M&&e[`${M}_enforcement`]===void 0&&(e[`${M}_enforcement`]=j.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=j.enforcement);}}let O=n?.rules?.entitlementRules??{};for(let[A,j]of Object.entries(O)){if(!Array.isArray(j))continue;let M=xc(A);if(M)for(let oe of j){if(oe.kind==="credits"){let Z=e[`${M}_usage_remaining`];Z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=Z);}if(oe.kind==="seat"){let Z=e[`${M}_usage_current`],_e=e[`${M}_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&&R){let{invokedFeatureHandles:A,interactionCounts:j,topFeaturesByEngagement:M}=t.featureInteractions,oe=new Set(A),Z=new Set;for(let[ne,J]of Object.entries(R))(J.status==="denied"||J.status==="limited")&&Z.add(ne);let _e=0,De=0;for(let ne of A)Z.has(ne)&&(_e++,j&&(De+=j[ne]??0));if(e.gated_features_used_count=_e,j&&(e.gated_action_count=De),M){let ne=M.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 A)J in R&&ne++;e.trial_features_used=ne;}}return e}function Ad(t,e){let n={};for(let[r,i]of Object.entries(e))i!==void 0&&(n[r]=i);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function du(t,e,n){let r={};for(let[i,a]of Object.entries(t))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(r[i]=a);e&&r.plan===void 0&&(r.plan=e);for(let[i,a]of Object.entries(n))r[i]===void 0&&(r[i]=a);return r}function gu(t,e,n){let r=Ym(t),i=Ns(e,r),a=i??r,s={...t.custom??{}};for(let[_,C]of Object.entries(t.entitlements??{}))s[_]===void 0&&(s[_]=C);r?s.plan_handle=r:delete s.plan_handle,i&&s.plan_name===void 0&&(s.plan_name=i),a&&s.plan===void 0&&(s.plan=a);let u={...ba(t.usage),...n??{}};for(let[_,C]of Object.entries(u))s[_]===void 0&&(s[_]=C);return {effectivePlan:a,traits:s,usage:u,segmentTraits:du(s,a,u)}}function FC(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 wd(t,e=yd){return e.sha256Base64Url(bc(FC(t)))}function jd(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:a}=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},_=Ns(n,Ym(e));_?u.plan_name=_:typeof e.plan=="object"&&e.plan?.name&&(u.plan_name=e.plan.name);let C={...ba(e.usage),...r},I=Object.entries(C).filter(([,Z])=>Number.isFinite(Z)).sort(([Z],[_e])=>Z<_e?-1:Z>_e?1:0),R,O,A,j,M=[];for(let[Z,_e]of I){let De=i.get(Z)??xo(Z);if(!De)continue;let J=a(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),M.push({prefix:De,current:_e,...J!==void 0?{limit:J}:{},...ot!==void 0?{remaining:ot}:{},...Pn!==void 0?{percent:Pn}:{}}),R===void 0&&(R=_e,O=J,A=ot,j=Pn);}let oe=M.find(Z=>Z.prefix==="core")??M.find(Z=>Z.limit!==void 0)??M[0];return oe&&(R=oe.current,O=oe.limit,A=oe.remaining,j=oe.percent),R!==void 0&&(u.usage_current=R),O!==void 0&&(u.usage_limit=O),A!==void 0&&(u.usage_remaining=A),j!==void 0&&(u.usage_percent=j),u}function Od(t,e,n){let r=[];for(let[i,a]of Object.entries(e)){let s=t[i]||0;if(!Number.isFinite(a)||a<=s)continue;let u=n(i);if(!u)continue;let _=s/u.limit*100,C=a/u.limit*100;C>=u.warningPercent&&_<u.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:a,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:u.warningPercent}),a>=u.limit&&s<u.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:a,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:100});}return r}function qd(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 i=Number(t.day_number);if(Number.isFinite(i)&&i>0&&Number.isFinite(r)){let a=i+Math.max(0,r);if(a>0&&i>=Math.ceil(a/2))return "midpoint"}return "none"}var N_="__self__",LC={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Dd={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:{}}},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:N_,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:LC},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 {Unrestricted:Pe}=oa,{Persisted:zd,Transient:Pi}=ds,{Internal:$_,External:ci}=xa,K_=Zn(yn.Playbook,{sdkInput:true}),NC=Zn(yn.Playbook,{inConfig:false,sdkInput:false}),H_=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":Pi,"x-revturbine-schema-exposure":ci}),fu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),VC=z.enum(l_).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),BC=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),G_=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Md=z.object({entitlement_id:z.string().min(1).meta(Pe),entitlement_handle:z.string().min(1).meta(Pe),status:VC.meta(Pe),limit:z.number().optional().meta(Pe),used:z.number().optional().meta(Pe),allocation:fu.optional().meta(Pe),enforcement:G_.optional().meta(Pe),source:BC.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":Pi,"x-revturbine-schema-exposure":ci,...oa.Operational});z.object({account:z.record(z.string(),Md).optional().meta(Pe),instance:z.record(z.string(),Md).optional().meta(Pe),user:z.record(z.string(),Md).optional().meta(Pe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci,...oa.Operational});var zC=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),$C=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Y_=z.object({kind:$C.meta(Pe),id:z.string().min(1).meta(Pe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),KC=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),wo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Pe,readOnly:true}),name:Ka.meta(Pe),handle:_r.meta(Pe),customer_facing_description:z.string().max(500).optional().meta(Pe),type:Qm.meta(Pe),unit:z.string().max(100).optional().meta(Pe),period_scope:H_.optional().meta(Pe),allocation:fu.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:Ai.meta(Pe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":zd,"x-revturbine-schema-exposure":ci,...K_,...la()}),HC=Gr("EntitlementAnchor"),Uo=Un.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(Y_).min(1).meta(Pe),segment_ids:z.array(z.string()).default([]).meta(Pe),visibility:zC.default("public").meta(Pe),period_scope:H_.optional().meta(Pe),instance:z.string().max(100).optional().meta(Pe),reset_period:KC.optional().meta(Pe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Pe),enforcement:G_.optional().meta(Pe),warning_threshold_percent:Bs.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:fu.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":zd,"x-revturbine-schema-exposure":$_,...K_,...ca()}),GC=Gr("EntitlementRuleAnchor");Uo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 YC=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),WC=z.object({code:YC.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":Pi,"x-revturbine-schema-exposure":ci}),Ud=Uo.extend({warnings:z.array(WC).optional().meta(Pe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Fd=Un.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":zd,"x-revturbine-schema-exposure":$_,...NC,...ca()}),JC=Si(wo),ZC=Si(Uo);({"/api/entitlement-anchors":{get:U({operationId:"listEntitlementAnchors",requestParams:{query:on},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:sn(HC)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:U({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(GC)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:U({operationId:"listEntitlements",requestParams:{query:on},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:sn(wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:U({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(wo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:U({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:U({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:JC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:U({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:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:U({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(Uo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:U({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Uo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ud}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:U({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ZC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ud}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:U({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:U({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ud}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:U({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(Fd)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:U({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(Fd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:dt}=oa,{Persisted:kc,Transient:Rc}=ds,{Internal:Sa}=xa,W_=Zn(yn.Playbook,{sdkInput:true}),J_=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),QC=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":Sa}),$d=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":Sa}),Z_=z.object({name:Ka.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:$d.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:Ai.meta(dt)}),Co=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(Z_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":Sa,...W_,...la()}),XC=Gr("FreeTrialRuleAnchor"),e0=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":Sa}),Q_=z.object({name:Ka.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:$d.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:e0.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:Ai.meta(dt)}),Eo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(Q_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":Sa,...W_,...la()}),t0=Gr("ReverseTrialRuleAnchor"),X_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":Sa}),ey=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":Sa}),ko=Un.merge(Bn).merge(zn).extend({trial_limit_policy:X_.default("1_per_lifetime").meta(dt),eligibility_scope:ey.default("per_customer").meta(dt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":Sa,...J_}),Ro=Un.merge(Bn).merge(zn).extend({trial_limit_policy:X_.default("1_per_lifetime").meta(dt),eligibility_scope:ey.default("per_customer").meta(dt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":Sa,...J_}),hu=Un.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:QC.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:$d.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:eu.meta(dt),cancelled_at:eu.meta(dt),metadata:Ai.meta(dt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":Sa});({"/api/free-trial-rule-anchors":{get:U({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(XC)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:U({operationId:"listFreeTrialRules",requestParams:{query:on},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:sn(Co)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:U({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:Co}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:U({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:U({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:U({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(t0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:U({operationId:"listReverseTrialRules",requestParams:{query:on},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:sn(Eo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:U({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:Eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:U({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse 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:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:U({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:U({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(ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:U({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:ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:U({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",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:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:U({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(Ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:U({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:Ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:U({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse 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:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:U({operationId:"listTrialInstances",requestParams:{query:on},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:sn(hu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:U({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:U({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:U({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:Jt,Financial:Fo}=oa,{Persisted:Ac,Transient:_u}=ds,{External:Ga}=xa,n0=Zn(yn.Playbook,{sdkInput:true}),r0=Zn(yn.Playbook,{sdkInput:false}),Kd=Zn(yn.Billing,{sdkInput:false}),hs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":_u,"x-revturbine-schema-exposure":Ga}),wc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":_u,"x-revturbine-schema-exposure":Ga}),yu=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":_u,"x-revturbine-schema-exposure":Ga}),jo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:Ka.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:Ai.meta(Jt)}).meta({id:"Plan","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":Ga,...n0,...la()}),i0=Gr("PlanAnchor"),Oo=Un.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(Fo),currency:So.meta(Fo),pricing_model:wc.meta(Jt),visibility:hs.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:yu.default("static").meta(Jt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":Ga,...Kd,...ca()}),a0=Gr("PlanVariationAnchor"),qo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Jt,readOnly:true}),name:Ka.meta(Jt),handle:_r.meta(Jt),sort_order:z.number().int().default(0).meta(Jt),visibility:hs.default("public").meta(Jt),metadata:Ai.meta(Jt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":Ga,...r0,...la()}),s0=Gr("AddOnAnchor"),Do=Un.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(Fo),currency:So.meta(Fo),pricing_model:wc.meta(Jt),visibility:hs.default("public").meta(Jt),stripe_price_id:z.string().optional().meta(Jt),price_source:yu.default("static").meta(Jt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":Ga,...Kd,...ca()}),o0=Gr("AddOnVariationAnchor"),l0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":_u,"x-revturbine-schema-exposure":Ga}),Mo=Un.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:l0.meta(Jt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Fo),currency:So.meta(Fo),pricing_model:wc.meta(Jt),nickname:z.string().nullable().default(null).meta(Jt),is_mock:z.boolean().default(false).meta(Jt),last_updated_from_stripe:eu.meta(Jt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":Ga,...Kd}),c0=Si(jo),m0=Si(Oo),u0=Si(qo),p0=Si(Do),d0=Si(Mo);({"/api/plan-anchors":{get:U({operationId:"listPlanAnchors",requestParams:{query:on},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:sn(i0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:U({operationId:"listPlans",requestParams:{query:on},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:sn(jo)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:U({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(jo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:jo}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:U({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:jo}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:U({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:c0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:jo}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:U({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:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:U({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:U({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(a0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:U({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(Oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:U({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Oo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:U({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:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:U({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:m0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:U({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:U({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(s0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:U({operationId:"listAddOns",requestParams:{query:on},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:sn(qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:U({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(qo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:U({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:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:U({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:u0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:U({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:U({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(o0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:U({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(Do)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:U({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Do)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:U({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:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:U({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:p0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:U({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:U({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:U({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:U({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:U({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:d0}}},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:U({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:p}=oa,{Persisted:No,Transient:xt}=ds,{Internal:Ni,External:Mt}=xa,pt=Zn(yn.Playbook,{sdkInput:true}),V_=Zn(yn.Playbook,{sdkInput:false}),Lo=Zn(yn.Playbook,{inConfig:false,sdkInput:false}),ty=Zn(yn.Playbook,{inConfig:false,sdkInput:true}),Ao=Zn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ui.CodeConstant}),Ld=Zn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ui.Runtime}),Nd=Zn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ui.Runtime}),g0=Zn(yn.Billing,{sdkInput:false}),h0=Zn(yn.Metering,{sdkInput:false}),f0=Zn(yn.Branding,{inConfig:true,sdkInput:true}),_0=Zn(yn.Branding,{sdkInput:false}),y0="1.0.0",Tc=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Ka.meta(p),handle:_r.meta(p),description:Xm.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:Ai.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...Lo,...la()}),v0=Gr("SeatTypeAnchor"),Ic=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.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:Ai.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...Lo,...la()}),b0=Gr("PersonalizationTokenAnchor"),x0=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Vd=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:x0.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:Ai.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...g0,...ca()});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":xt,"x-revturbine-schema-exposure":Mt,..._0});var Cc=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.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:Ai.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...h0,...ca()}),B_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Ec=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.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:B_.default("warn").meta(p),hard_limit_action:B_.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":No,"x-revturbine-schema-exposure":Ni,...ty,...ca()}),S0=Gr("UsageEnforcementSettingsAnchor"),P0=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":xt,"x-revturbine-schema-exposure":Ni}),T0=z.object({id:z.string().min(1).meta(p),group:z.array(P0).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":xt,"x-revturbine-schema-exposure":Ni}),I0=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),ny=z.object({capRules:z.array(T0).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:I0.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Bd=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.meta({...p,readOnly:true}),global_frequency_cap:ny.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":No,"x-revturbine-schema-exposure":Ni,...ty,...ca()}),C0=Gr("PlacementSettingsAnchor"),E0=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":xt,"x-revturbine-schema-exposure":Mt}),k0=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(E0).optional().meta(p),dimension_id:z.string().optional().meta(p),experiment_handle:z.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),R0=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:hs.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),A0=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:hs.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),w0=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),currency:So.meta(p),pricing_model:wc.meta(p),visibility:hs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:yu.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),j0=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),currency:So.meta(p),pricing_model:wc.meta(p),visibility:hs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:yu.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),O0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),q0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),D0=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:ny.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),M0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),U0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),F0=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:Qm.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),L0=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(Y_).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:Qm.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}),...Uo.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:fu.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),N0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),V0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),B0=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":xt,"x-revturbine-schema-exposure":Mt}),z0=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(B0).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),$0=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":xt,"x-revturbine-schema-exposure":Mt}),K0=z.object({name:z.string().min(1).meta(p),action_type:$0.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),H0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),G0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),z_=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":xt,"x-revturbine-schema-exposure":Mt}),Y0=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:z_.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:z_})).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":xt,"x-revturbine-schema-exposure":Mt,...pt}),W0=z.object({label:z.string().meta(p),path:c_.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),ry=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(W0).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),iy=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":xt,"x-revturbine-schema-exposure":Mt}),J0=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":xt,"x-revturbine-schema-exposure":Mt}),ay=z.object({max_per_period:J0.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),Z0=z.object({id:z.string().min(1).meta(p),target:iy.meta(p),surfaces:z.array(ry).meta(p),caps:ay.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":xt,"x-revturbine-schema-exposure":Mt}),Q0=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:Bs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bs}),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":xt,"x-revturbine-schema-exposure":Mt}),X0=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),eE=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:X0.meta(p),trigger:Q0.meta(p),payloads:z.array(Z0).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),tE=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:iy.meta(p),caps:ay.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(ry).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":xt,"x-revturbine-schema-exposure":Mt,...pt}),nE=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),rE=Un.merge(Z_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Lo}),iE=Un.merge(Q_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Lo}),aE=z.object({plans:z.array(R0).meta({...p,...pt}),addons:z.array(A0).optional().meta({...p,...pt}),entitlements:z.array(F0).meta({...p,...pt}),entitlement_rules:z.array(L0).meta({...p,...pt}),segments:z.array(k0).meta({...p,...pt}),content_ui_paths:z.array(K0).meta({...p,...pt}),slot_configs:z.array(N0).optional().meta({...p,...pt,...su({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,...pt,...su({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,...f0,...su({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(V0).optional().meta({...p,...pt}),message_blocks:z.array(Y0).optional().meta({...p,...pt}),placement_payloads:z.array(tE).optional().meta({...p,...pt}),placements:z.array(eE).optional().meta({...p,...pt}),content_promotions:z.array(H0).optional().meta({...p,...pt}),personalization_tokens:z.array(G0).optional().meta({...p,...pt}),surface_templates:z.array(z0).optional().meta({...p,...pt}),free_trial_rules:z.array(rE).optional().meta({...p,...V_}),reverse_trial_rules:z.array(iE).optional().meta({...p,...V_}),plan_variations:z.array(w0).optional().meta({...p,...pt}),addon_variations:z.array(j0).optional().meta({...p,...pt}),extension_rules:z.array(nE).optional().meta({...p,...pt}),seat_types:z.array(O0).optional().meta({...p,...pt}),enforcement_defaults:z.array(q0).optional().meta({...p,...pt}),placement_settings:z.array(D0).optional().meta({...p,...pt}),segment_dimensions:z.array(M0).optional().meta({...p,...pt}),meter_bindings:z.array(U0).optional().meta({...p,...pt}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...Lo}),signal_catalog:z.object({}).strict().optional().meta({...p,...Lo})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),sE=z.object({artifact_type:z.literal("playbook").meta({...p,...Ao,readOnly:true}),format_version:z.literal(y0).meta({...p,...Ao,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...Ao}),playbook_version_id:z.string().nullable().default(null).meta({...p,...Ld,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...Nd,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...Nd,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...Nd,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...Ld,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...Ao,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ao,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ao,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Ld}),sy=sE.extend(aE.shape).meta({"x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});function oE(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function oy(t){if(!oE(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(oy,sy).meta({id:"Playbook","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});z.preprocess(oy,sy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});({"/api/seat-type-anchors":{get:U({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(v0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:U({operationId:"listSeatTypes",requestParams:{query:on},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:sn(Tc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:U({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:U({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",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:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:U({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:U({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(b0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:U({operationId:"listPersonalizationTokens",requestParams:{query:on},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:sn(Ic)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:U({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Ic)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:U({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ic.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:U({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:U({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Si(Vd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Vd}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:U({operationId:"listMeteringConfigs",requestParams:{query:on},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:sn(Cc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:U({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Cc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:U({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:U({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:U({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(S0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:U({operationId:"listUsageEnforcementSettings",requestParams:{query:on},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:sn(Ec)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:U({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Ec)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:U({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ec.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:U({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:U({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(C0)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:U({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Si(Bd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Bd}}}},"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 jc=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([a,s])=>{let u=this.cache.get(a),_=Date.now();if(u&&u.ttlMs>0&&_-u.resolvedAt<u.ttlMs)return [a,u.value];let C=await s.resolve();return this.cache.set(a,{value:C,resolvedAt:_,ttlMs:s.cacheTtlMs??0}),[a,C]})),n={},r={},i=false;for(let[a,s]of e)if(a==="traits"||a.startsWith("traits:")){let u=s;u?.traits&&(Object.assign(r,u.traits),i=true);}else n[a]=s;return i&&(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 i=await e.resolve();return this.cache.set(t,{value:i,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),i}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},cE=new Set(["cta_completed"]),mE=1440*60*1e3,ly=10080*60*1e3,uE="revturbine:interaction-state",cy=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??ly,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??{},a={...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);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(a.suppressedUntil=n+300*1e3),this.state.set(e,a),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),i=this.state.get(r);return i?.suppressedUntil?i.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:i.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 `${uE}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},pE="revturbine:presentation-caps";function Vo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function dE(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 my=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(),i=this.capsByKey.get(n)??{seenAt:[]},a={...i,seenAt:i.seenAt.filter(_=>Number.isFinite(_)&&_>0)},s=oc({perPayload:{policies:e,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,a),{allowed:false,reason:s.reason};a.seenAt.push(r);let u=e.map(_=>_.cooldownMs).filter(_=>typeof _=="number"&&Number.isFinite(_)&&_>0);return u.length>0?a.cooldownUntil=r+Math.max(...u):delete a.cooldownUntil,this.capsByKey.set(n,a),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 i=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],a=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:i,cooldownUntil:a});}}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 `${pE}:${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 i=Vo(r.caps)?r.caps:void 0;if(!i)continue;let a=[],s=dE(i.max_per_period);s&&a.push(s);let u=Number(i.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:a,..._!==void 0?{cooldownMs:_}:{}});}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 uy(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function py(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 Hd=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??mE,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??ly;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,i){let a=i??this.defaultDismissCooldownMs,s=new Date(Date.now()+a).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,i){let a=i??this.defaultDismissCooldownMs,s=new Date(Date.now()+a).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,i){let a=i??this.defaultSuppressionMs,s=new Date(Date.now()+a).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,i){let a={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,a);}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);}},gE=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=dy(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return gy(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return hy(e)}clear(t){this.records.delete(t);}},hE="revturbine:impression-history",bu=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=dy(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return gy(e)}getSuppressedPlacements(t){let e=this.load(t);return hy(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${hE}:${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 dy(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(i=>r.has(i.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(i=>r.has(i.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(i=>new Date(i.occurredAt).getTime()>=r);}return n}function gy(t){let e=new Set;for(let n of t)cE.has(n.outcome)&&e.add(n.placementId);return e}function hy(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let i=t[r];if(e.has(i.placementId))continue;let a=i.metadata?.suppressUntil;typeof a=="string"&&new Date(a).getTime()>n&&e.set(i.placementId,a);}return e}function fE(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let i={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(i);}if(e.entitlements?.length){let i=t.defaultEntitlementPolicy??"allow",a={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},u={};for(let _ of e.entitlements??[]){s[_.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let C=t.usage?.[_.unique_handle];C&&(u[_.unique_handle]={used:C.used,limit:C.limit,remaining:Math.max(0,C.limit-C.used),unit:_.unit});}return {entries:s,usage:u,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(a);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(a=>a.handle),segmentSlugs:(e.segments??[]).map(a=>a.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:n,resolve:()=>{let a={},s=new Map;for(let _ of e.entitlements??[]){let C=_;typeof C.unique_handle=="string"&&typeof C.type=="string"&&s.set(C.unique_handle,C.type);}for(let _ of e.entitlement_rules??[]){let C=_.entitlement_id;a[C]||(a[C]=[]);let I=_,R=Array.isArray(I.segment_ids)?I.segment_ids.filter(j=>typeof j=="string"):typeof I.segment_id=="string"&&I.segment_id!=="all"?[I.segment_id]:[],O=Array.isArray(I.plan_ids)?I.plan_ids.filter(j=>typeof j=="string"):[],A={ruleId:_.id,entitlementId:C,planIds:(_.targets??[]).length>0?(_.targets??[]).filter(j=>j.kind==="plan").map(j=>j.id):O,segmentIds:R,kind:(()=>{let j=typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{};return (typeof I.kind=="string"?I.kind:void 0)??(typeof j.kind=="string"?j.kind:void 0)??s.get(C)??"feature"})(),fields:{...typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{},...I}};a[C].push(A);}let u={};for(let _ of e.segments??[])typeof _.dimension_id=="string"&&typeof _.handle=="string"&&(u[_.handle]=_.dimension_id);return {entitlementRules:a,segmentDimensions:u,configVersion:Wm(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:n,resolve:()=>{let a={};for(let s of e.message_blocks??[])a[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:a,personalization:{}}}};r.push(i);}if(e.theme&&Object.keys(e.theme).length>0){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}function _E(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let i=e.user_context,a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:i.plan_handle??"unknown",currentPlanName:i.plan_name,billingPeriod:i.billing_period,trialActive:i.trial_active,trialLimitType:i.trial_limit_type,trialProgressPercent:i.trial_progress_percent,trialDaysRemaining:i.trial_days_remaining,trialDaysTotal:i.trial_days_total,trialState:i.trial_state,trialUsageEntitlementHandle:i.trial_usage_entitlement_handle,trialUsageConsumed:i.trial_usage_consumed,trialUsageLimit:i.trial_usage_limit})};r.push(a);}if(e.entitlements){let i=e.entitlements,a={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[u,_]of Object.entries(i))s[u]=_;return {entries:s}}};r.push(a);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:i.segment_ids})};r.push(a);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let a={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:i.traits})};r.push(a);}}if(e.theme){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var fy=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 jc;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new cy({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new my({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new Hd({store:t.impressionStore??new gE,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new fd({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 yc(e,t)}buildTargetingState(t,e){return gu(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return L_({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 i=this.registeredPlacements.get(t.slotId);if(i)return i}let e=this.exportedConfig.placement_slots??[],n=Ha(t),r=e.find(i=>t.slotId?i.id===t.slotId:n?i.surface_type===n:false);return r?{id:r.id,name:t.placementHandle??r.placement_handle,route:"",metadata:{surface_slot_id:r.id,surface_type:r.surface_type,surface_template_ids:r.template?[r.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return Io({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return fc({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},yE=["web-client"],vE=z.enum(yE),bE=["method","meta","component"],xE=z.enum(bE),SE=["ts","python","java","csharp","rust"];z.enum(SE);var PE=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(),TE=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:xE,appliesTo:z.array(vE).min(1),composes:z.string().min(1).optional(),perLanguage:PE.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"]}),IE=z.object({version:z.number().int().positive(),functions:z.array(TE).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let i of [r.canonical,...r.aliases]){let a=n.get(i);a!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${a}")`,path:["functions"]}),n.set(i,r.canonical);}});IE.parse({version:4,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:"getEligiblePlans",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public plan variations eligible for the current user, including structured display prices."},{canonical:"getEligibleAddons",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public add-on variations eligible for the current user, including structured display prices."},{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 CE=[{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 EE(){let t=[];for(let[e,n]of Object.entries(Dd))for(let[r,i]of Object.entries(n.fields)){let a=i.reference;if(a){if(!a.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${a.table} has no onDelete policy`);t.push({from:e,field:r,to:a.table,by:a.by,kind:a.kind,onDelete:a.onDelete,resolution:"playbook"});}}return t}function kE(t){return [...t].sort((e,n)=>vu(e.from,n.from)||vu(e.field,n.field)||vu(e.to,n.to)||vu(e.targetKind??"",n.targetKind??""))}function vu(t,e){return t<e?-1:t>e?1:0}Object.freeze(kE([...EE(),...CE]));var _y="traits:server",Oc=class{constructor(){w(this,"domain",_y);w(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 Gd={workspace_name:"Your workspace",theme:{}};function yy(t){return !!t&&Object.keys(t).length>0}var vy=false;function Yd(t={}){let e=(n,r)=>({branding:{...Gd,...n,theme:{...Gd.theme,...n?.theme}},source:r});return yy(t.explicit)?e(t.explicit,"explicit"):yy(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!vy&&Ls()&&(vy=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 by="[REDACTED]",RE=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,AE=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,wE=/\d(?:[ -]?\d){12,18}/g;function jE(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let i=t.charCodeAt(r)-48;if(i<0||i>9)return false;if(n){let a=i*2;a>9&&(a-=9),e+=a;}else e+=i;n=!n;}return e%10===0}function OE(t){let e=0,n=t.replace(RE,()=>(e+=1,by));return n=n.replace(wE,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&jE(i)?(e+=1,by):r}),{value:n,count:e}}function Wd(t){let e=0,n=r=>{if(typeof r=="string"){let i=OE(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let i={};for(let[a,s]of Object.entries(r))i[a]=n(s);return i}return r};return {value:n(t),redactions:e}}function qE(t){return AE.test(t.trim())}function DE(t){let e=t.trim().toLowerCase();return `eml_${FE(e).slice(0,16)}`}function Jd(t){return qE(t)?{value:DE(t),redacted:true}:{value:t,redacted:false}}function xy(t){let e=Jd(t.user_id??""),n=Wd({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 ME=[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 UE(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 i=r,a=t.charCodeAt(n+1);n+=1,r=65536+((i&1023)<<10)+(a&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 Pa(t,e){return t>>>e|t<<32-e}function FE(t){let e=UE(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,i=3144134277,a=1013904242,s=2773480762,u=1359893119,_=2600822924,C=528734635,I=1541459225,R=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;R[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=Pa(R[J-15],7)^Pa(R[J-15],18)^R[J-15]>>>3,Pn=Pa(R[J-2],17)^Pa(R[J-2],19)^R[J-2]>>>10;R[J]=R[J-16]+ot+R[J-7]+Pn>>>0;}let A=r,j=i,M=a,oe=s,Z=u,_e=_,De=C,ne=I;for(let J=0;J<64;J+=1){let ot=Pa(Z,6)^Pa(Z,11)^Pa(Z,25),Pn=Z&_e^~Z&De,An=ne+ot+Pn+ME[J]+R[J]>>>0,be=Pa(A,2)^Pa(A,13)^Pa(A,22),It=A&j^A&M^j&M,gn=be+It>>>0;ne=De,De=_e,_e=Z,Z=oe+An>>>0,oe=M,M=j,j=A,A=An+gn>>>0;}r=r+A>>>0,i=i+j>>>0,a=a+M>>>0,s=s+oe>>>0,u=u+Z>>>0,_=_+_e>>>0,C=C+De>>>0,I=I+ne>>>0;}return [r,i,a,s,u,_,C,I].map(O=>O.toString(16).padStart(8,"0")).join("")}var Sy={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"},Py="control_plane_source";function Zd(t,e={}){return {eventName:t,properties:{[Py]:Sy[t],...e}}}var qc=class{constructor(e){w(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 qc(window.localStorage)}catch{}return new zo}function Qd(t){if(t)return t;if(Yr())try{return new qc(window.sessionStorage)}catch{}return new zo}var LE=/^[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 Ly="x-revturbine-schema-exposure",VE="readOnly",BE="x-revturbine-decision-only",Ty={[BE]:true},Ti={[Ly]:vn.External},zE={[Ly]:vn.Internal};function Mr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[VE]===true||(e[n]=r);}return z.object(e)}function Ur(t){let e=Mr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(LE)}):e}var {Unrestricted:br}=fn,{Transient:Qr,Persisted:$E}=En,{Internal:Hs,External:Ea}=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":Ea});var KE=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":Ea}),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":Ea}),he=z.object({id:z.string().min(1).meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ea}),it=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":Hs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ea});var HE=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],ku=z.enum(HE).meta({id:"ComponentType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ea}),Ny=ku,GE=["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"],YE=z.enum(GE).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs});var vg={button:"button",plans_page_ctas:"in_page",plans_page_full:"full_page",inline_gate_message:"inline",tooltip:"tooltip",in_page_card:"in_page",usage_counter:"in_page",credit_counter:"in_page",trial_counter:"in_page",banner:"banner",modal_optional:"modal",modal_blocking:"modal",toast:"toast",email:"email",sms:"sms",push:"push",cli:"cli",agent_connector:"agent",custom_in_app:"custom"};var Vy=["allowed","limited","denied"],xu={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":Ea});var bg=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":Ea}),Hc=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ea});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs});var Qn=z.string().min(1).max(200),Yt=z.string().min(1).max(100),Gs=z.string().max(500).optional(),Xn=z.record(z.string(),z.unknown()).default({}),Bc=z.number().int().min(10).max(100).multipleOf(10),$n=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":Hs}),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":Hs}),WE=he.merge(ze).merge(it).merge(Sn).extend({handle:Yt.meta({...br,readOnly:true}),active:z.boolean().default(true).meta({...br,readOnly:true})});function dr(t){return WE.meta({id:t,"x-revturbine-schema-persistence":$E,"x-revturbine-schema-exposure":Hs})}var xg=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs}),By=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":Ea}),Ut={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},wi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},JE="x-revturbine-context",ZE="x-revturbine-in-config",QE="x-revturbine-sdk-input",XE="x-revturbine-source",ek="x-revturbine-deprecation",tk={[Ut.Playbook]:wi.Customer,[Ut.Branding]:wi.Customer,[Ut.Billing]:wi.Stripe,[Ut.Metering]:wi.Customer,[Ut.CustomerOperations]:wi.Runtime,[Ut.EventIngestion]:wi.Runtime};function mn(t,e){return {[JE]:t,[ZE]:e.inConfig??t===Ut.Playbook,[QE]:e.sdkInput,[XE]:e.source??tk[t]}}function Xd(t){return {deprecated:true,[ek]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var zy={Named:"named",Minted:"minted"},$y="x-revturbine-schema-identity";function zr(t="handle"){return {[$y]:{kind:zy.Named,handleField:t}}}function $i(t="handle"){return {[$y]:{kind:zy.Minted,handleField:t}}}var ce=t=>z.object({items:z.array(t)}),jt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),y=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:al}=fn,{Persisted:Gc,Transient:Ru}=En,{External:Qa}=vn,nk=mn(Ut.Playbook,{sdkInput:true}),rk=mn(Ut.Playbook,{sdkInput:false}),Sg=mn(Ut.Billing,{sdkInput:false}),bs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":Qa}),Yc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":Qa}),Au=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":Qa}),Zo=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Qn.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:bs.default("public").meta(Zt),metadata:Xn.meta(Zt)}).meta({id:"Plan","x-revturbine-schema-persistence":Gc,"x-revturbine-schema-exposure":Qa,...nk,...zr()}),ik=dr("PlanAnchor"),Qo=he.merge(ze).merge(it).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(al),currency:Hc.meta(al),pricing_model:Yc.meta(Zt),visibility:bs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Au.default("static").meta(Zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Gc,"x-revturbine-schema-exposure":Qa,...Sg,...$i()}),ak=dr("PlanVariationAnchor"),Xo=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:Qn.meta(Zt),handle:Yt.meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:bs.default("public").meta(Zt),metadata:Xn.meta(Zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Gc,"x-revturbine-schema-exposure":Qa,...rk,...zr()}),sk=dr("AddOnAnchor"),el=he.merge(ze).merge(it).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(al),currency:Hc.meta(al),pricing_model:Yc.meta(Zt),visibility:bs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Au.default("static").meta(Zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Gc,"x-revturbine-schema-exposure":Qa,...Sg,...$i()}),ok=dr("AddOnVariationAnchor"),lk=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":Qa}),tl=he.merge(ze).merge(it).extend({stripe_price_id:z.string().min(1).meta(Zt),stripe_product_id:z.string().min(1).meta(Zt),billing_period:lk.meta(Zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(al),currency:Hc.meta(al),pricing_model:Yc.meta(Zt),nickname:z.string().nullable().default(null).meta(Zt),is_mock:z.boolean().default(false).meta(Zt),last_updated_from_stripe:$n.meta(Zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Gc,"x-revturbine-schema-exposure":Qa,...Sg});var ck=Mr(Zo),mk=Mr(Qo),uk=Mr(Xo),pk=Mr(el),dk=Mr(tl);({"/api/plan-anchors":{get:y({operationId:"listPlanAnchors",requestParams:{query:me},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ce(ik)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:y({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(Zo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:y({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:ck}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:y({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:y({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(ak)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:y({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:y({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(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:y({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:y({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:mk}}},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:y({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:y({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(sk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:y({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:y({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(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:y({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:y({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:uk}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:y({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:y({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(ok)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:y({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:y({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(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:y({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:y({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:pk}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:el}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:y({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:y({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:y({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(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:y({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:y({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:dk}}},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:y({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:Pg,Transient:Ii}=En,{Internal:Ky,External:ui}=vn,Hy=mn(Ut.Playbook,{sdkInput:true}),gk=mn(Ut.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":Ii,"x-revturbine-schema-exposure":ui}),wu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),hk=z.enum(Vy).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),fk=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Yy=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),zc=z.object({entitlement_id:z.string().min(1).meta(Ce),entitlement_handle:z.string().min(1).meta(Ce),status:hk.meta(Ce),limit:z.number().optional().meta(Ce),used:z.number().optional().meta(Ce),allocation:wu.optional().meta(Ce),enforcement:Yy.optional().meta(Ce),source:fk.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":Ii,"x-revturbine-schema-exposure":ui,...fn.Operational});z.object({account:z.record(z.string(),zc).optional().meta(Ce),instance:z.record(z.string(),zc).optional().meta(Ce),user:z.record(z.string(),zc).optional().meta(Ce)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui,...fn.Operational});var _k=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),yk=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Wy=z.object({kind:yk.meta(Ce),id:z.string().min(1).meta(Ce)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),vk=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),nl=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),name:Qn.meta(Ce),handle:Yt.meta(Ce),customer_facing_description:z.string().max(500).optional().meta(Ce),type:bg.meta(Ce),unit:z.string().max(100).optional().meta(Ce),period_scope:Gy.optional().meta(Ce),allocation:wu.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:Xn.meta(Ce)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Pg,"x-revturbine-schema-exposure":ui,...Hy,...zr()}),bk=dr("EntitlementAnchor"),sl=he.merge(ze).merge(it).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(Wy).min(1).meta(Ce),segment_ids:z.array(z.string()).default([]).meta(Ce),visibility:_k.default("public").meta(Ce),period_scope:Gy.optional().meta(Ce),instance:z.string().max(100).optional().meta(Ce),reset_period:vk.optional().meta(Ce),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ce),enforcement:Yy.optional().meta(Ce),warning_threshold_percent:Bc.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:wu.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":Pg,"x-revturbine-schema-exposure":Ky,...Hy,...$i()}),xk=dr("EntitlementRuleAnchor");sl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 Sk=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Pk=z.object({code:Sk.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":Ii,"x-revturbine-schema-exposure":ui}),eg=sl.extend({warnings:z.array(Pk).optional().meta(Ce)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui});var tg=he.merge(ze).merge(it).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":Pg,"x-revturbine-schema-exposure":Ky,...gk,...$i()}),Tk=Mr(nl),Ik=Mr(sl);({"/api/entitlement-anchors":{get:y({operationId:"listEntitlementAnchors",requestParams:{query:me},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ce(bk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:y({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(xk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:y({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:y({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(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:y({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:y({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Tk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:y({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:y({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(sl)}}},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:y({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:eg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:y({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:y({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:y({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(tg)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:y({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(tg)}}},responses:{201:{description:"Created",content:{"application/json":{schema:tg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Qe}=fn,{Persisted:ju,Transient:xs}=En,{External:Ki}=vn,Jy=mn(Ut.Playbook,{sdkInput:true});mn(Ut.Playbook,{inConfig:false,sdkInput:false});var Ck=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),Ek=mn(Ut.Playbook,{inConfig:false,sdkInput:false,source:wi.Runtime}),kk=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Zy=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Qy=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Rk=z.object({count:z.number().int().positive().meta(Qe),period:Qy.meta(Qe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki});z.object({surface_type:z.string().min(1).meta(Qe),rules:z.array(Rk).meta(Qe),cooldown_ms:z.number().int().nonnegative().optional().meta(Qe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Ki,...fn.Operational,...Ck});var Ak=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":xs,"x-revturbine-schema-exposure":Ki}),rl=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Qe,readOnly:true}),name:Qn.meta(Qe),handle:Yt.meta(Qe),description:Gs.meta(Qe),category:Zy.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:Bc.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:kk.optional().meta(Qe),activation_window_start:z.string().datetime().optional().meta(Qe),activation_window_end:z.string().datetime().optional().meta(Qe),metadata:Xn.meta(Qe)}).meta({id:"Placement","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Ki,...Jy,...zr()}),wk=dr("PlacementAnchor"),jk=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Ok=z.object({code:jk.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":xs,"x-revturbine-schema-exposure":Ki}),Iy=rl.extend({warnings:z.array(Ok).optional().meta(Qe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki});var qk=z.object({label:z.string().min(1).max(200).meta(Qe),cta_path_type:Ak.meta(Qe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Qe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Nc=he.merge(ze).merge(it).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(qk).default([]).meta(Qe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Qe),max_period_unit:Qy.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":ju,"x-revturbine-schema-exposure":Ki,...Jy,...$i()}),Dk=dr("PlacementPayloadAnchor"),Mk=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Qe),surface_type:Ny.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":ju,"x-revturbine-schema-exposure":Ki,...Ek,...zr("surface_slot_handle")}),Uk=Mr(rl),Fk=Mr(Nc);({"/api/placement-anchors":{get:y({operationId:"listPlacementAnchors",requestParams:{query:me},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ce(wk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:y({operationId:"listPlacements",requestParams:{query:me},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ce(rl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:y({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ur(rl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Iy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:y({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:y({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Uk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Iy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:y({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:y({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Zy,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:y({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(Dk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:y({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(Nc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:y({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ur(Nc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:y({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Fk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:y({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:y({operationId:"listSurfaceSlots",requestParams:{query:me},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ce(Mk)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Br,Pii:ol}=fn,{Persisted:Tg,Transient:Ig}=En,{Internal:ml}=vn,Lk=mn(Ut.CustomerOperations,{sdkInput:false}),Nk=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":Tg,"x-revturbine-schema-exposure":ml}),Xy=z.enum(["payment_failed","payment_method_missing"]),Cy=he.merge(ze).merge(it).extend({external_id:z.string().min(1).meta(ol),identity:Nk.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(Xy).default([]).meta(Br),metadata:Xn.meta(Br)}).meta({id:"Customer","x-revturbine-schema-persistence":Tg,"x-revturbine-schema-exposure":ml}),Vk=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":ml}),Bk=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":ml}),zk=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":ml}),_s=he.merge(ze).merge(it).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:Bk.meta(Br),target_id:z.string().min(1).meta(Br),value:z.record(z.string(),z.unknown()).default({}).meta(Br),duration_type:Vk.default("permanent").meta(Br),duration_value:z.string().optional().meta(Br),expiry_date:$n.meta(Br),status:zk.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":Tg,"x-revturbine-schema-exposure":ml,...Lk,...$i()});({"/api/customers":{get:y({operationId:"listCustomers",requestParams:{query:me},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ce(Cy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:y({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Cy}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:y({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:y({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:y({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:y({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:y({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:y({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:Vc,Financial:ng}=fn,{Persisted:ev,Transient:ka}=En,{External:ul,Internal:Wc}=vn,Cg=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":ka,"x-revturbine-schema-exposure":ul}),tv=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":ka,"x-revturbine-schema-exposure":ul});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":ul});var nv=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":ka,"x-revturbine-schema-exposure":ul}),$k=z.object({product_instance_id:z.string().min(1).meta(Be),user_id:z.string().min(1).meta(Vc),plan:nv.optional().meta(Be),usage:z.record(z.string(),tv).default({}).meta(Be),trial:Cg.optional().meta(Be),entitlements:z.record(z.string(),z.union([z.boolean(),zc])).default({}).meta(Be)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":ev,"x-revturbine-schema-exposure":ul}),$o=he.merge(it).merge(ze).extend({user_id:z.string().min(1).meta(Vc),account_id:z.string().min(1).nullable().optional().meta(Vc),email:z.string().email().nullable().optional().meta(Vc),email_type:z.string().optional().meta(Be),plan_handle:z.string().min(1).optional().meta(Be),plan:nv.optional().meta(Be),usage:z.record(z.string(),tv).default({}).meta(Be),trial:Cg.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(),zc])).default({}).meta(Be),instances:z.array($k).optional().meta(Be),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Vc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Be,"x-revturbine-schema-persistence":ka}),derived_config_version:z.string().nullable().optional().meta(Be),context_hash:z.string().nullable().optional().meta(Be),derived_computed_at:$n.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":ev,"x-revturbine-schema-exposure":ul}),Kk=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Be,...Ti}),days_remaining:z.number().int().min(0).optional().meta({...Be,...Ti}),ends_at:z.string().optional().meta({...Be,...Ti})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Wc}),Hk=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Be,...Ti}),failed_payment_reason:z.string().optional().meta({...ng,...Ty}),issues:z.array(Xy).optional().meta({...ng,...Ty}),provider_subscription_id:z.string().optional().meta({...ng,...zE})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Wc}),Gk=z.object({can_upgrade:z.boolean().optional().meta({...Be,...Ti}),can_manage_billing:z.boolean().optional().meta({...Be,...Ti})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Wc}),Yk=z.object({handle:z.string().min(1).optional().meta({...Be,...Ti}),name:z.string().min(1).optional().meta({...Be,...Ti})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Wc});z.object({subject:z.string().min(1).meta({...Be,...Ti}),context_version:z.string().optional().meta({...Be,...Ti}),trial:Kk.optional().meta({...Be,...Ti}),billing:Hk.optional().meta({...Be,...Ti}),plan:Yk.optional().meta({...Be,...Ti}),capabilities:Gk.optional().meta({...Be,...Ti})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Wc});({"/api/user-contexts":{get:y({operationId:"listUserContexts",requestParams:{query:me},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ce($o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:y({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:y({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:$o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:y({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:ir}=fn,{Persisted:Eg,Transient:rv}=En,{Internal:Jc}=vn,Wk=mn(Ut.Playbook,{sdkInput:true}),iv=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),Jk=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Jc}),Zk=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Jc}),rg=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...ir,readOnly:true}),name:Qn.meta(ir),handle:Yt.optional().meta(ir),category:Jk.default("custom").meta(ir),visibility_toggle:z.boolean().default(true).meta(ir),source_type:Zk.default("system").meta(ir),estimated_size:z.number().int().min(0).optional().meta(ir)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Eg,"x-revturbine-schema-exposure":Jc,...iv,...zr()}),Qk=dr("SegmentDimensionAnchor"),ig=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...ir,readOnly:true}),dimension_id:z.string().min(1).meta(ir),name:Qn.meta(ir),handle:Yt.meta(ir),description:Gs.meta(ir),definition_rule:z.record(z.string(),z.unknown()).optional().meta(ir),used_in_count:z.number().int().min(0).default(0).meta({...ir,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Eg,"x-revturbine-schema-exposure":Jc,...iv,...zr()}),Xk=dr("SegmentValueAnchor");he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...ir,readOnly:true}),name:Qn.meta(ir),handle:Yt.meta(ir),description:Gs.meta(ir),rules:z.record(z.string(),z.unknown()).default({}).meta(ir),experiment_handle:z.string().min(1).optional().meta(ir),is_active:z.boolean().default(true).meta(ir),estimated_size:z.number().int().min(0).nullable().default(null).meta(ir),metadata:Xn.meta(ir)}).meta({id:"Segment","x-revturbine-schema-persistence":Eg,"x-revturbine-schema-exposure":Jc,...Wk,...zr()});({"/api/segment-dimension-anchors":{get:y({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(Qk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:y({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(Xk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:y({operationId:"listSegmentDimensions",requestParams:{query:me},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ce(rg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:y({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:rg}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:y({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:rg}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:y({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(ig)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:y({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:ig}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:y({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:ig}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:y({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:At}=fn,{Persisted:pl,Transient:av}=En,{External:Ss}=vn,kg=mn(Ut.Playbook,{sdkInput:true}),eR=mn(Ut.Playbook,{inConfig:false,sdkInput:false}),tR=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),nR=mn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.CodeConstant});he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),handle:Yt.meta({...At,readOnly:true}),name:Qn.meta(At),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(At),subject:z.string().max(500).optional().meta(At),body:z.string().meta(At),template_variables:z.array(z.string()).default([]).meta(At),metadata:Xn.meta(At)}).meta({id:"Message","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...eR,...$i()});var ag=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:Qn.meta(At),handle:Yt.meta(At),action_type:By.meta(At),target_url:z.string().optional().meta(At),target_plan_id:z.string().optional().meta(At),config_fields:z.record(z.string(),z.unknown()).default({}).meta(At),metadata:Xn.meta(At)}).meta({id:"CtaPath","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...kg,...zr()}),rR=dr("CtaPathAnchor"),iR=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":Ss,...nR}),aR=z.object({name:z.string().min(1),field_type:iR,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":Ss,...tR}),sg=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:Qn.meta(At),handle:Yt.meta(At),surface_type:z.union([ku,YE]).meta(At),field_definitions:z.array(aR).default([]).meta(At),description:Gs.meta(At)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...kg,...zr()}),sR=dr("SurfaceTemplateAnchor"),og=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:Qn.meta(At),handle:Yt.meta(At),content_fields:z.record(z.string(),z.unknown()).default({}).meta(At),variation_dimension_id:z.string().optional().meta(At),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(At),notes:z.string().max(1e3).optional().meta(At),used_in_count:z.number().int().min(0).default(0).meta({...At,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...kg,...zr()}),oR=dr("MessageBlockRecordAnchor"),lR=z.object({segment_id:z.string().min(1).meta(At),message_block_id:z.string().min(1).meta(At),ui_path_id:z.string().optional().meta(At),promotion_id:z.string().optional().meta(At)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":av,"x-revturbine-schema-exposure":Ss});z.object({payload_id:z.string().min(1).meta(At),tenant_id:z.string().min(1).meta(At),name:Qn.meta(At),surface_template_id:z.string().min(1).meta(At),default_message_block_id:z.string().min(1).meta(At),segment_content_map:z.array(lR).optional().meta(At),ui_path_id:z.string().optional().meta(At),promotion_id:z.string().optional().meta(At),status:z.enum(["draft","active","inactive"]).meta(At),created_at:z.string().datetime().optional().meta({...At,readOnly:true}),updated_at:z.string().datetime().optional().meta({...At,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":av,"x-revturbine-schema-exposure":Ss});({"/api/surface-template-anchors":{get:y({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(sR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:y({operationId:"listSurfaceTemplates",requestParams:{query:me},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ce(sg)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:y({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(oR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:y({operationId:"listMessageBlocks",requestParams:{query:me},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ce(og)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:y({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(rR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:y({operationId:"listCtaPaths",requestParams:{query:me},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ce(ag)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:il,Pii:cR}=fn,{Persisted:sv}=En,{Internal:mR,External:uR}=vn,pR=mn(Ut.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":sv,"x-revturbine-schema-exposure":uR,...pR});var Ey=he.merge(ze).extend({user_id:z.string().min(1).meta(cR),scope:z.string().min(1).meta(il),preferences:z.record(z.string(),z.unknown()).default({}).meta(il)}).meta({id:"UiPreference","x-revturbine-schema-persistence":sv,"x-revturbine-schema-exposure":mR});({"/api/ui-preferences":{get:y({operationId:"listUiPreferences",requestParams:{query:me},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ce(Ey)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:y({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Mr(Ey))}}},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:Ot,Financial:Ia}=fn,{Persisted:ov,Transient:Zc}=En,{External:Qc,Internal:lv}=vn,dR=z.object({month:z.string().meta(Ot),cohort_size:z.number().int().min(0).meta(Ot),retained:z.number().int().min(0).meta(Ot),retention_rate:z.number().min(0).max(1).meta(Ot),revenue_cents:z.number().int().min(0).meta(Ia)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Qc}),gR=z.object({step:z.string().meta(Ot),label:z.string().meta(Ot),count:z.number().int().min(0).meta(Ot),conversion_rate:z.number().min(0).max(1).meta(Ot),drop_off_rate:z.number().min(0).max(1).meta(Ot)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Qc}),hR=z.object({placement_id:z.string().meta(Ot),placement_name:z.string().meta(Ot),impressions:z.number().int().min(0).meta(Ot),clicks:z.number().int().min(0).meta(Ot),conversions:z.number().int().min(0).meta(Ot),ctr:z.number().min(0).meta(Ot),conversion_rate:z.number().min(0).meta(Ot),revenue_cents:z.number().int().min(0).meta(Ia)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Qc}),fR=z.object({date:z.string().meta(Ot),mrr_cents:z.number().int().min(0).meta(Ia),arr_cents:z.number().int().min(0).meta(Ia),new_mrr_cents:z.number().int().min(0).meta(Ia),churned_mrr_cents:z.number().int().min(0).meta(Ia),expansion_mrr_cents:z.number().int().min(0).meta(Ia),net_new_mrr_cents:z.number().int().meta(Ia)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Qc}),_R=z.object({metric_key:z.string().min(1).meta(Ot),label:z.string().meta(Ot),current_value:z.number().meta(Ia),previous_value:z.number().nullable().default(null).meta(Ia),change_percent:z.number().nullable().default(null).meta(Ot),period:z.string().meta(Ot),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Ot)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Zc,"x-revturbine-schema-exposure":Qc}),ky=he.merge(ze).merge(it).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Ot),severity:xg.meta(Ot),resource_type:z.string().min(1).meta(Ot),resource_id:z.string().min(1).meta(Ot),summary:z.string().max(1e3).meta(Ot),expected_value:z.unknown().optional().meta(Ot),actual_value:z.unknown().optional().meta(Ot),affected_customer_count:z.number().int().min(0).default(0).meta(Ot),is_resolved:z.boolean().default(false).meta(Ot),resolved_at:$n.meta(Ot),metadata:Xn.meta(Ot)}).meta({id:"DriftReport","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":lv}),Ry=he.merge(ze).merge(it).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Ot),severity:xg.meta(Ot),title:z.string().min(1).max(300).meta(Ot),description:z.string().max(2e3).meta(Ot),resource_type:z.string().optional().meta(Ot),resource_id:z.string().optional().meta(Ot),is_acknowledged:z.boolean().default(false).meta(Ot),acknowledged_at:$n.meta(Ot),acknowledged_by:z.string().nullable().default(null).meta(Ot),metadata:Xn.meta(Ot)}).meta({id:"Alert","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":lv});({"/api/analytics/kpis":{get:y({operationId:"listKpiAggregates",requestParams:{query:me},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ce(_R)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:y({operationId:"listPlacementPerformance",requestParams:{query:me},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ce(hR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:y({operationId:"listRevenueMetrics",requestParams:{query:me},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ce(fR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:y({operationId:"listCohortMetrics",requestParams:{query:me},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:ce(dR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:y({operationId:"listFunnelSteps",requestParams:{query:me},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ce(gR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:y({operationId:"listDriftReports",requestParams:{query:me},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ce(ky)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:y({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:ky}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:y({operationId:"listAlerts",requestParams:{query:me},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ce(Ry)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:y({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:Ry}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:x}=fn,{Transient:yR}=En,{Internal:vR}=vn,Xe=t=>({id:t,"x-revturbine-schema-persistence":yR,"x-revturbine-schema-exposure":vR}),bR=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,cv=/^[a-z][a-z0-9_-]{0,99}$/,tn=z.string().regex(bR).max(120),ji=z.string().regex(cv),Zr=tn.meta(Xe("AnalyticsSemanticId")),Hi=z.enum(["account","user","billing_unit","organization"]).meta(Xe("AnalyticsAnalyticalUnit")),Ou=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Xe("AnalyticsQueryFamily")),Ys=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Xe("AnalyticsSourceScope")),mv=z.enum(["as_of_event","current"]).meta(Xe("AnalyticsHistoricalMode")),xR=z.enum(["hour","day","week","month","quarter"]).meta(Xe("AnalyticsTimeGrain")),Rg=z.enum(["none","previous_period","previous_year"]).meta(Xe("AnalyticsCompareMode")),qu=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Xe("AnalyticsFilterOperator")),Ag=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Xe("AnalyticsFilterControl")),SR=z.enum(["low","medium","high"]).meta(Xe("AnalyticsCardinalityClass")),wg=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Xe("AnalyticsFieldType")),PR=z.enum(["increase","decrease","neutral"]).meta(Xe("AnalyticsMetricDirection")),TR=z.enum(["binary","count","continuous","ratio","revenue"]).meta(Xe("AnalyticsMetricStatisticalType")),IR=z.enum(["additive","semi_additive","non_additive"]).meta(Xe("AnalyticsMetricAggregationSemantics")),CR=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Xe("AnalyticsDimensionType")),uv=z.enum(["filter","group","split","sort"]).meta(Xe("AnalyticsDimensionCapability")),pv=z.enum(["private","team","tenant"]).meta(Xe("AnalyticsViewVisibility")),Ay=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")),ER=z.enum(["unrestricted","pii","financial","operational"]).meta(Xe("AnalyticsClassification")),Oi=z.strictObject({value:z.string().min(1).max(300).meta(x),key:z.string().max(120).optional().meta(x)}).meta(Xe("LocalizedText")),yg=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),Du=z.union([yg,z.array(yg).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(x),compare:Rg.optional().meta(x)}),z.strictObject({min:z.number().optional().meta(x),max:z.number().optional().meta(x)})]).meta(Xe("AnalyticsFilterValue")),jg=z.strictObject({dimension:tn.meta(x),operator:qu.meta(x),value:Du.optional().meta(x)}).meta(Xe("AnalyticsSemanticFilter")),$c=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")),kR=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:Oi.optional().meta(x)})).max(5).optional().meta(x),x_axis_format:$c.optional().meta(x),y_axis_format:$c.optional().meta(x),empty_state:z.enum(["blank","message"]).optional().meta(x)}).meta(Xe("AnalyticsSafeChartOptions")),Mu=z.object({deprecated:z.boolean().meta(x),replaced_by:tn.optional().meta(x)}).meta(Xe("AnalyticsCatalogDeprecation")),RR=Mu,AR=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:CR.meta(x),operators:z.array(qu).min(1).meta(x),control:Ag.meta(x),capabilities:z.array(uv).min(1).meta(x),cardinality:SR.meta(x),classification:ER.default("unrestricted").meta(x),historical_mode:mv.optional().meta(x),allowed_concepts:z.array(tn).optional().meta(x),exclude_from_segment_picker:z.boolean().default(false).meta(x),deprecation:Mu.optional().meta(x)}).meta(Xe("AnalyticsCatalogDimension")),wR=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:wg.meta(x),format:$c.optional().meta(x),source_scope:Ys.optional().meta(x),direction:PR.optional().meta(x),statistical_type:TR.optional().meta(x),aggregation_semantics:IR.optional().meta(x),preferred_analysis_unit:Hi.optional().meta(x),deprecation:Mu.optional().meta(x)}).meta(Xe("AnalyticsCatalogMetric")),jR=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(Hi).min(1).meta(x),primary_time_dimension:tn.meta(x),historical_mode:mv.meta(x),dimensions:z.array(tn).min(1).meta(x),metrics:z.array(tn).min(1).meta(x),query_families:z.array(Ou).min(1).meta(x),source_scope:Ys.meta(x),coverage_metric:tn.optional().meta(x),deprecation:Mu.optional().meta(x)}).meta(Xe("AnalyticsCatalogConcept")),dv=z.strictObject({field:tn.meta(x),direction:z.enum(["asc","desc"]).meta(x)}),gv=z.strictObject({dimension:tn.meta(x),grain:xR.meta(x)}),hv=8,OR=z.strictObject({concept:tn.meta(x),family:Ou.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(hv).optional().meta(x),time:gv.optional().meta(x),filters_from:z.array(ji).max(20).optional().meta(x),fixed_filters:z.array(jg).max(20).optional().meta(x),compare:Rg.optional().meta(x),order_by:z.array(dv).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x)}).meta(Xe("AnalyticsViewQuery")),qR=z.strictObject({type:z.literal("metric").meta(x),value:tn.meta(x),comparison:tn.optional().meta(x),format:$c.optional().meta(x)}).meta(Xe("AnalyticsRenderMetric")),DR=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:kR.optional().meta(x)}).meta(Xe("AnalyticsRenderCartesian")),MR=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")),UR=z.strictObject({type:z.literal("table").meta(x),columns:z.array(tn).min(1).max(20).meta(x)}).meta(Xe("AnalyticsRenderTable")),FR=z.strictObject({type:z.literal("timeline").meta(x),timestamp:tn.meta(x),event_type:tn.meta(x)}).meta(Xe("AnalyticsRenderTimeline")),LR=z.strictObject({type:z.literal("recommendations").meta(x),presentation:z.enum(["list","ranked_cards"]).meta(x)}).meta(Xe("AnalyticsRenderRecommendations")),fv=z.discriminatedUnion("type",[qR,DR,MR,UR,FR,LR]).meta(Xe("AnalyticsRenderSpec")),NR=z.strictObject({id:ji.meta(x),dimension:tn.meta(x),control:Ag.meta(x),label:Oi.optional().meta(x),operators:z.array(qu).min(1).meta(x),default_value:Du.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(ji).min(1).max(24)]).default("all").meta(x)}).meta(Xe("AnalyticsViewFilter")),_v=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:ji.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")),VR=z.strictObject({id:ji.meta(x),title:Oi.optional().meta(x),description:Oi.optional().meta(x),query:OR.meta(x),render:fv.meta(x)}).meta(Xe("AnalyticsViewBlock")),BR=z.strictObject({id:ji.meta(x),label:Oi.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")),zR=z.strictObject({allow:z.array(Ay).default([]).meta(x),deny:z.array(Ay).default([]).meta(x)}).meta(Xe("AnalyticsCustomizationPolicy"));var yv=z.string().regex(/^\d+\.\d+$/),vv=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(x),schema_version:yv.meta(x),id:ji.meta(x),revision:z.number().int().min(1).meta(x),title:Oi.meta(x),description:Oi.optional().meta(x),analytical_unit:Hi.meta(x),base_template:z.strictObject({id:ji.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(NR).max(20).meta(x),layout:_v.meta(x),blocks:z.array(VR).min(1).max(24).meta(x),handoffs:z.array(BR).max(10).optional().meta(x),customization_policy:zR.meta(x)}).meta(Xe("AnalyticsView")),$R=z.strictObject({id:ji.optional().meta(x),dimension:tn.meta(x),control:Ag.optional().meta(x),label:Oi.optional().meta(x),operators:z.array(qu).min(1).optional().meta(x),default_value:Du.optional().meta(x),required:z.boolean().optional().meta(x),pinned:z.boolean().optional().meta(x),applies_to:z.union([z.literal("all"),z.array(ji).min(1).max(24)]).optional().meta(x)}).meta(Xe("AnalyticsViewFilterDraft")),KR=z.strictObject({id:ji.optional().meta(x),title:Oi.optional().meta(x),concept:tn.meta(x),family:Ou.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(hv).optional().meta(x),time:gv.optional().meta(x),filters_from:z.array(ji).max(20).optional().meta(x),fixed_filters:z.array(jg).max(20).optional().meta(x),compare:Rg.optional().meta(x),order_by:z.array(dv).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x),render:z.union([z.literal("auto"),fv]).optional().meta(x)}).meta(Xe("AnalyticsViewBlockDraft")),HR=z.strictObject({id:ji.optional().meta(x),label:Oi.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:yv.meta(x),title:Oi.meta(x),analytical_unit:Hi.optional().meta(x),filters:z.union([z.literal("recommended"),z.array($R).max(20)]).optional().meta(x),layout:z.union([z.literal("auto"),_v]).optional().meta(x),blocks:z.array(KR).min(1).max(24).meta(x),handoffs:z.union([z.literal("recommended"),z.array(HR).max(10)]).optional().meta(x),visibility:pv.optional().meta(x)}).meta(Xe("AnalyticsViewDraft"));var Og=z.string().regex(/^(\/[^/]*)*$/).max(300),GR=z.strictObject({op:z.enum(["add","replace","remove"]).meta(x),path:Og.meta(x),value:z.unknown().optional().meta(x)}).meta(Xe("AnalyticsSuggestedPatchOp")),bv=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")),YR=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(x),path:Og.meta(x),message:z.string().min(1).max(500).meta(x),actual:z.unknown().optional().meta(x),allowed:z.array(yg).max(50).optional().meta(x),suggested_patch:z.array(GR).max(10).optional().meta(x)}).meta(Xe("AnalyticsValidationIssue"));z.object({path:Og.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(YR).default([]).meta(x),warnings:z.array(bv).default([]).meta(x),catalog_version:z.string().min(1).max(64).meta(x)}).meta(Xe("AnalyticsValidationResult"));var WR=z.object({id:tn.meta(x),type:wg.meta(x),nullable:z.boolean().meta(x)}).meta(Xe("AnalyticsResultField")),JR=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")),ZR=z.object({query_hash:z.string().min(1).max(128).meta(x),concept:tn.meta(x),analytical_unit:Hi.meta(x),source_scope:Ys.meta(x),coverage:JR.optional().meta(x),as_of:z.string().datetime().meta(x),freshness_seconds:z.number().int().min(0).meta(x),applied_filters:z.array(jg).default([]).meta(x),next_cursor:z.string().max(500).optional().meta(x),warnings:z.array(bv).default([]).meta(x)}).meta(Xe("AnalyticsResultMeta")),QR=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(x),fields:z.array(WR).meta(x),meta:ZR.meta(x)}).meta(Xe("AnalyticsResult")),{Unrestricted:ur}=fn,{Persisted:XR,Transient:eA}=En,{Internal:xv}=vn,tA=mn(Ut.CustomerOperations,{inConfig:false,sdkInput:false,source:wi.Customer}),qg=t=>({id:t,"x-revturbine-schema-persistence":XR,"x-revturbine-schema-exposure":xv,...tA}),nA=t=>({id:t,"x-revturbine-schema-persistence":eA,"x-revturbine-schema-exposure":xv}),Dg=z.object({environment_id:z.string().min(1).meta({...ur,readOnly:true})}),rA=z.enum(["viewer","editor"]).meta(nA("AnalyticsViewAccessRole")),iA=he.merge(it).merge(Dg).merge(ze).extend({owner_user_id:z.string().min(1).meta(ur),name:z.string().min(1).max(300).meta(ur),visibility:pv.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(qg("AnalyticsSavedView")),aA=he.merge(it).merge(Dg).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:vv.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(qg("AnalyticsViewRevision")),sA=he.merge(it).merge(Dg).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:rA.meta(ur)}).meta(qg("AnalyticsViewAccess")),{Unrestricted:Cn}=fn,{Transient:oA}=En,{Internal:lA}=vn,Ws=t=>({id:t,"x-revturbine-schema-persistence":oA,"x-revturbine-schema-exposure":lA}),cA=z.enum(["fixture","generated"]).meta(Ws("AnalyticsCatalogSource")),mA=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(Ws("AnalyticsCatalogProvenanceKind")),uA=z.object({kind:mA.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(Ws("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(Cn),source:cA.meta(Cn),generated_at:z.string().datetime().optional().meta(Cn),provenance:z.array(uA).optional().meta(Cn),concepts:z.array(jR).min(1).meta(Cn),dimensions:z.array(AR).min(1).meta(Cn),metrics:z.array(wR).min(1).meta(Cn)}).meta(Ws("AnalyticsCatalog"));var dA=z.enum(["concept","dimension","metric","query_family"]).meta(Ws("AnalyticsAgentCatalogEntryKind")),gA=z.object({id:Zr.meta(Cn),kind:dA.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:wg.optional().meta(Cn),format:$c.optional().meta(Cn),capabilities:z.array(uv).optional().meta(Cn),compatible_concepts:z.array(Zr).optional().meta(Cn),compatible_families:z.array(Ou).optional().meta(Cn),analytical_units:z.array(Hi).optional().meta(Cn),source_scope:Ys.optional().meta(Cn),example:z.string().max(2e3).optional().meta(Cn),deprecation:RR.optional().meta(Cn)}).meta(Ws("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(gA).max(50).meta(Cn)}).meta(Ws("AnalyticsCatalogSearchResult"));var {Unrestricted:pr}=fn,{Transient:fA}=En,{Internal:_A}=vn,dl=t=>({id:t,"x-revturbine-schema-persistence":fA,"x-revturbine-schema-exposure":_A}),Ks=z.string().regex(cv),yA=z.strictObject({filter_id:Ks.meta(pr),value:Du.nullable().meta(pr)}).meta(dl("AnalyticsFilterState"));z.strictObject({view_id:Ks.meta(pr),revision:z.number().int().min(1).optional().meta(pr),block_ids:z.array(Ks).min(1).max(24).optional().meta(pr),filter_state:z.array(yA).max(20).optional().meta(pr)}).meta(dl("AnalyticsQueryRequest"));var bA=z.object({block_id:Ks.meta(pr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(pr),message:z.string().min(1).max(500).meta(pr)}).meta(dl("AnalyticsBlockError")),xA=z.object({block_id:Ks.meta(pr),result:QR.meta(pr)}).meta(dl("AnalyticsBlockResult"));z.object({view_id:Ks.meta(pr),revision:z.number().int().min(1).meta(pr),catalog_version:z.string().min(1).max(64).meta(pr),results:z.array(xA).meta(pr),errors:z.array(bA).default([]).meta(pr)}).meta(dl("AnalyticsQueryResponse"));var PA=z.object({id:Ks.meta(pr),version:z.number().int().min(1).meta(pr),title:Oi.meta(pr),description:Oi.optional().meta(pr),block_count:z.number().int().min(1).meta(pr)}).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:y({operationId:"listAnalyticsViews",requestParams:{query:me},summary:"List saved analytics views",tags:["analytics-views"],responses:{200:{description:"Saved analytics views",content:{"application/json":{schema:ce(iA)}}}},"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:y({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(aA)}}}},"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:y({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(sA)}}}},"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:y({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:ce(PA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:y({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:vv}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:Za}=fn,{Transient:IA}=En,{Internal:CA}=vn,Uu=t=>({id:t,"x-revturbine-schema-persistence":IA,"x-revturbine-schema-exposure":CA}),EA=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(Uu("ProviderCapability")),Sv=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(Uu("ProviderAvailability")),Xc=z.object({provider_handle:Yt.meta(Za),provider_type:z.string().min(1).max(100).meta(Za),provider_version:z.string().min(1).max(100).meta(Za),contract_version:z.number().int().min(1).meta(Za),generated_at:z.string().datetime().meta(Za),data_watermark:z.string().datetime().optional().meta(Za),source_revision:z.string().min(1).max(200).optional().meta(Za)}).meta(Uu("ProviderProvenance")),lg=z.object({provider_handle:Yt.meta(Za),capability:EA.meta(Za)}).meta(Uu("ProviderBindingRef")),{Unrestricted:Le}=fn,{Transient:kA}=En,{Internal:RA}=vn,Xa=t=>({id:t,"x-revturbine-schema-persistence":kA,"x-revturbine-schema-exposure":RA}),AA=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(Xa("GrowthSignalPoint")),wA=z.object({metric:Zr.meta(Le),analytical_unit:Hi.meta(Le),source_scope:Ys.meta(Le),dimensions:z.record(Zr,z.string()).meta(Le),points:z.array(AA).meta(Le),provenance:Xc.meta(Le)}).meta(Xa("GrowthSignalSeries"));z.object({availability:Sv.meta(Le),series:z.array(wA).meta(Le),provenance:Xc.meta(Le)}).meta(Xa("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(Xa("TrendFeatures"));var jA=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(Xa("EvidenceRequirement")),OA=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(Xa("OpportunityInterpretation")),Pv=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:Ys.meta(Le),interpretation:OA.meta(Le)}).meta(Xa("OpportunityEvidence"));z.object({required_metrics:z.array(Zr).min(1).meta(Le),evidence:jA.meta(Le)}).meta(Xa("DetectorRequirements"));var cg=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(Pv).min(1).meta(Le),hypothesis:z.string().min(1).meta(Le),confidence:z.number().min(0).max(1).meta(Le),impact:cg.optional().meta(Le),suggested_action:cg.optional().meta(Le),suggested_experiment:cg.optional().meta(Le)}).meta(Xa("OpportunityCandidate"));var {Unrestricted:Ca}=fn,{Transient:em}=En,{External:tm}=vn,Tv=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":em,"x-revturbine-schema-exposure":tm}),qA=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":em,"x-revturbine-schema-exposure":tm}),DA=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Ca),surface:Tv.meta(Ca),purpose:z.string().min(1).max(300).meta(Ca),stability:qA.meta(Ca)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":em,"x-revturbine-schema-exposure":tm}),MA=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Ca),surface:Tv.meta(Ca),purpose:z.string().min(1).max(300).meta(Ca)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":em,"x-revturbine-schema-exposure":tm});z.object({version:z.number().int().min(1).meta(Ca),events:z.array(DA).min(1).meta(Ca),prefix_families:z.array(MA).meta(Ca)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":em,"x-revturbine-schema-exposure":tm});var Iv=["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"],Mg=["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"],UA=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],FA=["area_viewed","feature_gated"],wy={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 Su(t,e){return t.map(n=>({name:n,surface:e,purpose:wy[n].purpose,stability:wy[n].stability}))}var Cv=["impression"],Ug=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],Ev={events:[...Su(Iv,"control_plane"),...Su(FA,"control_plane"),...Su(Mg,"sdk_client"),...Su(UA,"sdk_client")]};Ev.events.map(t=>t.name);Ev.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:L,Pii:ll}=fn,{Persisted:kv,Transient:Kn}=En,{Internal:Ps,External:wr}=vn,Rv=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr}),LA=he.extend({event_type:z.string().min(1).meta(L),source:Rv.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":Kn,"x-revturbine-schema-exposure":Ps}),NA=LA.extend({ingested_at:z.string().datetime().meta(L)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":kv,"x-revturbine-schema-exposure":Ps});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":Kn,"x-revturbine-schema-exposure":Ps});var VA=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Kn,"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:VA.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":Kn,"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":Kn,"x-revturbine-schema-exposure":wr});z.object({days_remaining:z.number().int().min(0).optional().meta(L)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Kn,"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":Kn,"x-revturbine-schema-exposure":wr});z.object({feature:z.string().min(1).meta(L)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Kn,"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":Kn,"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":Kn,"x-revturbine-schema-exposure":wr});var zA=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr}),$A=z.enum(Iv).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr});z.object({event_type:$A.meta(L),source:zA.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr});z.object({q:z.string().optional().meta(L),source:Rv.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":Kn,"x-revturbine-schema-exposure":Ps});var KA=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":Ps}),HA=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":Ps}),mg=he.merge(ze).merge(it).extend({event_id:z.string().min(1).meta(L),event_type:z.string().min(1).meta(L),source:KA.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L),status:HA.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":kv,"x-revturbine-schema-exposure":Ps});z.object({accepted:z.number().int().min(0).meta(L)}).meta({id:"null","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":Ps});var GA=500,YA=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr}),WA=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:YA.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":Kn,"x-revturbine-schema-exposure":wr});z.object({events:z.array(WA).min(1).max(GA).meta(L)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr});var ZA=10,QA=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr}),XA=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":Kn,"x-revturbine-schema-exposure":wr}),ew=z.object({event_type:QA.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:XA.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":Kn,"x-revturbine-schema-exposure":wr});z.object({events:z.array(ew).min(1).max(ZA).meta(L)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Kn,"x-revturbine-schema-exposure":wr});({"/api/events/search":{get:y({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:KE(NA)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:y({operationId:"listWebhookEvents",requestParams:{query:me},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ce(mg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:ht}=fn,{Persisted:nm,Transient:rm}=En,{Internal:Ra}=vn,Av=mn(Ut.Playbook,{sdkInput:true}),wv=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),nw=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ra}),Fg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ra}),jv=z.object({name:Qn.meta(ht),handle:Yt.meta(ht),plan_id:z.string().nullable().optional().meta(ht),segment_id:z.string().nullable().optional().meta(ht),trial_limit_type:Fg.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:Xn.meta(ht)}),Ko=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(jv).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":nm,"x-revturbine-schema-exposure":Ra,...Av,...zr()}),rw=dr("FreeTrialRuleAnchor"),iw=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ra}),Ov=z.object({name:Qn.meta(ht),handle:Yt.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:Fg.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:iw.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:Xn.meta(ht)}),Ho=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(Ov).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":nm,"x-revturbine-schema-exposure":Ra,...Av,...zr()}),aw=dr("ReverseTrialRuleAnchor"),qv=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ra}),Dv=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ra}),Go=he.merge(ze).merge(it).extend({trial_limit_policy:qv.default("1_per_lifetime").meta(ht),eligibility_scope:Dv.default("per_customer").meta(ht)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":nm,"x-revturbine-schema-exposure":Ra,...wv}),Yo=he.merge(ze).merge(it).extend({trial_limit_policy:qv.default("1_per_lifetime").meta(ht),eligibility_scope:Dv.default("per_customer").meta(ht)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":nm,"x-revturbine-schema-exposure":Ra,...wv}),Pu=he.merge(ze).merge(it).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:nw.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:Fg.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:$n.meta(ht),cancelled_at:$n.meta(ht),metadata:Xn.meta(ht)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":nm,"x-revturbine-schema-exposure":Ra});({"/api/free-trial-rule-anchors":{get:y({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(rw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:y({operationId:"listFreeTrialRules",requestParams:{query:me},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ce(Ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:y({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:Ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free 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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:y({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:y({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(aw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({operationId:"listTrialInstances",requestParams:{query:me},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ce(Pu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:y({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:y({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:y({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:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:E,Financial:jy}=fn,{Persisted:Ts,Transient:Lg}=En,{Internal:ma}=vn,Fu=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),Mv=mn(Ut.CustomerOperations,{sdkInput:false}),sw=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":ma}),ow=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":ma}),lw=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma}),cw=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":Ts,"x-revturbine-schema-exposure":ma,...Fu}),mw=z.object({variant_id:z.string().min(1),name:Qn,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(cw).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma,...Fu}),uw=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),pw=z.object({minimum_revenue_effect:z.number().min(0)}).strict(),dw=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()})]),gw=z.object({method:z.literal("holm"),family_scope:z.literal("primary_and_guardrails_separate")}),Uv=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:Hi,sequential:uw.optional(),multiple_comparisons:gw.optional(),variance_reduction:dw.optional(),practical_significance:pw.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma,...Fu});var xr=t=>({id:t,"x-revturbine-schema-persistence":Lg,"x-revturbine-schema-exposure":ma}),Lu=z.object({variant_id:z.string().min(1).meta(E)}),hw=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(xr("ExperimentClusterAggregate")),fw=z.object({assignment_unit:Hi.meta(E),clusters:z.array(hw).min(2).meta(E)}).meta(xr("ExperimentClusteredSufficientStatistics")),Nu={clustered:fw.optional().meta(E)},_w=Lu.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),...Nu}).meta(xr("MeanVariantStatisticalSummary")),yw=Lu.extend({statistic_type:z.literal("binary").meta(E),n:z.number().int().min(0).meta(E),successes:z.number().int().min(0).meta(E),...Nu}).meta(xr("BinaryVariantStatisticalSummary")),vw=Lu.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),...Nu}).meta(xr("RatioVariantStatisticalSummary")),bw=Lu.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),...Nu}).meta(xr("CovarianceVariantStatisticalSummary")),xw=z.discriminatedUnion("statistic_type",[_w,yw,vw,bw]).meta(xr("VariantStatisticalSummary")),Fv=z.object({start:z.string().datetime().meta(E),end:z.string().datetime().meta(E)}).meta(xr("ExperimentObservationWindow")),Sw=z.object({metric:Zr.meta(E),observation_window:Fv.meta(E)}).meta(xr("ExperimentCovariateProvenance")),Pw=z.object({schema_version:z.number().int().min(1).meta(E),experiment_handle:Yt.meta(E),experiment_version:z.number().int().min(1).meta(E),metric:Zr.meta(E),analysis_unit:Hi.meta(E),variants:z.array(xw).min(1).meta(E),observation_window:Fv.meta(E),covariate:Sw.optional().meta(E),data_watermark:z.string().datetime().meta(E),source_scope:Ys.meta(E),provider:Xc.meta(E)}).meta(xr("ExperimentEvidence")),Tw=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(xr("ExperimentSampleRatioMismatch")),Iw=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(E),sample_ratio_mismatch:Tw.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(xr("ExperimentHealth")),Cw=z.object({lower:z.number().meta(E),upper:z.number().meta(E),level:z.number().min(0).max(1).meta(E)}).meta(xr("ExperimentConfidenceInterval")),Ew=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(xr("ExperimentSequentialResult")),kw=z.object({minimum_revenue_effect:z.number().min(0).meta(jy),revenue_effect:z.number().meta(jy),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(E)}).meta(xr("ExperimentPracticalSignificanceResult")),Rw=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(xr("ExperimentMultipleComparisonResult")),Aw=z.object({metric:Zr.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:Cw.optional().meta(E),p_value:z.number().min(0).max(1).optional().meta(E),multiple_comparison:Rw.optional().meta(E),probability_positive:z.number().min(0).max(1).optional().meta(E),expected_loss:z.number().min(0).optional().meta(E),sequential:Ew.optional().meta(E),practical_significance:kw.optional().meta(E),sample_size:z.number().int().min(0).optional().meta(E)}).meta(xr("ExperimentMetricResult")),ww=z.object({metric:Zr.meta(E),summary_schema_version:z.number().int().min(1).meta(E),data_watermark:z.string().datetime().meta(E),provider:Xc.meta(E)}).meta(xr("ExperimentEvidenceProvenance")),jw=z.object({provider:Xc.meta(E),evidence:z.array(ww).min(1).meta(E)}).meta(xr("AnalysisProvenance")),Ow=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(Aw).meta(E),health:Iw.meta(E),provenance:jw.meta(E)}).meta(xr("ExperimentAnalysisResult")),Lv=he.merge(it).extend({created_at:z.string().datetime().meta({...E,readOnly:true}),experiment_handle:Yt.meta(E),experiment_version:z.number().int().min(1).meta(E),metric_semantic_id:Zr.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:Yt.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)}),qw=Lv.extend({analysis_unit:Hi.meta(E),evidence:Pw.meta(E)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma,...Mv}),Dw=Lv.extend({evidence_snapshot_id:z.string().min(1).meta(E),analysis_provider_handle:Yt.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:Uv.meta(E),result:Ow.meta(E)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma,...Mv}),Ya=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...E,readOnly:true}),name:Qn.meta(E),handle:Yt.meta(E),description:z.string().max(1e3).optional().meta(E),experiment_type:ow.meta(E),status:sw.default("draft").meta(E),target_resource_id:z.string().optional().meta(E),target_segments:z.array(z.string()).optional().meta(E),variants:z.array(mw).min(2).meta(E),primary_metric:Zr.meta(E),guardrail_metrics:z.array(Zr).optional().meta(E),assignment_unit:Hi.optional().meta(E),assignment_provider_binding:lg.extend({capability:z.literal("experiment_assignment"),allocation_mode:lw}).optional().meta(E),evidence_provider_binding:lg.extend({capability:z.literal("experiment_evidence")}).optional().meta(E),analysis_provider_binding:lg.extend({capability:z.literal("experiment_analysis")}).optional().meta(E),analysis_config:Uv.optional().meta(E),metric_threshold:z.number().default(.05).meta(E),secondary_metrics:z.array(Zr).default([]).meta(E),traffic_allocation:z.number().min(0).max(1).default(1).meta(E),started_at:$n.meta(E),ended_at:$n.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:Xn.meta(E)}).meta({id:"Experiment","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma,...Fu,...zr()}),Mw=dr("ExperimentAnchor"),Uw=xg,Oy=he.merge(ze).merge(it).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:Uw.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(Pv).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:Xn.meta(E)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":ma});({"/api/experiment-evidence-snapshots":{get:y({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:me},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:ce(qw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:y({operationId:"listExperimentAnalysisResults",requestParams:{query:me},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:ce(Dw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:y({operationId:"listExperimentAnchors",requestParams:{query:me},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ce(Mw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:y({operationId:"listExperiments",requestParams:{query:me},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ce(Ya)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:y({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:y({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Ya.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:y({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:y({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:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:y({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:y({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:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:y({operationId:"listOptimizationSuggestions",requestParams:{query:me},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ce(Oy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:y({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Oy}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Dr,Financial:qy}=fn,{Persisted:Fw,Transient:Nv}=En,{Internal:Ng}=vn,Lw=mn(Ut.Playbook,{sdkInput:true}),Nw=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Nv,"x-revturbine-schema-exposure":Ng}),Vw=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Nv,"x-revturbine-schema-exposure":Ng}),ys=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...Dr,readOnly:true}),name:Qn.meta(Dr),handle:Yt.meta(Dr),description:z.string().max(1e3).optional().meta(Dr),rt_status:Nw.default("draft").meta(Dr),discount_type:Vw.meta(Dr),discount_value:z.number().min(0).meta(qy),currency:z.string().length(3).default("USD").meta(qy),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:$n.meta(Dr),ends_at:$n.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:Xn.meta(Dr)}).meta({id:"Promotion","x-revturbine-schema-persistence":Fw,"x-revturbine-schema-exposure":Ng,...Lw,...zr()}),Bw=dr("PromotionAnchor");({"/api/promotion-anchors":{get:y({operationId:"listPromotionAnchors",requestParams:{query:me},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ce(Bw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:y({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:y({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:y({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:y({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:y({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:y({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:d}=fn,{Persisted:gl,Transient:St}=En,{Internal:Gi,External:Ft}=vn,gt=mn(Ut.Playbook,{sdkInput:true}),Dy=mn(Ut.Playbook,{sdkInput:false}),cl=mn(Ut.Playbook,{inConfig:false,sdkInput:false}),Vv=mn(Ut.Playbook,{inConfig:false,sdkInput:true}),Wo=mn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.CodeConstant}),pg=mn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.Runtime}),dg=mn(Ut.Playbook,{inConfig:false,sdkInput:false,source:wi.Runtime}),zw=mn(Ut.Billing,{sdkInput:false}),$w=mn(Ut.Metering,{sdkInput:false}),Kw=mn(Ut.Branding,{inConfig:true,sdkInput:true}),Hw=mn(Ut.Branding,{sdkInput:false}),Gw="1.0.0",Dc=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),name:Qn.meta(d),handle:Yt.meta(d),description:Gs.meta(d),is_default:z.boolean().default(false).meta(d),entitlement_ids:z.array(z.string()).default([]).meta(d),metadata:Xn.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...cl,...zr()}),Yw=dr("SeatTypeAnchor"),Mc=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.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:Xn.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...cl,...zr()}),Ww=dr("PersonalizationTokenAnchor"),Jw=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),gg=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({handle:Yt.meta({...d,readOnly:true}),stripe_account_id:z.string().min(1).meta(d),live_mode:z.boolean().default(false).meta(d),onboarding_state:Jw.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:Xn.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...zw,...$i()});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":St,"x-revturbine-schema-exposure":Ft,...Hw});var Uc=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({handle:Yt.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:Xn.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...$w,...$i()}),My=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),Fc=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.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:My.default("warn").meta(d),hard_limit_action:My.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":gl,"x-revturbine-schema-exposure":Gi,...Vv,...$i()}),Zw=dr("UsageEnforcementSettingsAnchor"),Qw=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":St,"x-revturbine-schema-exposure":Gi}),Xw=z.object({id:z.string().min(1).meta(d),group:z.array(Qw).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":St,"x-revturbine-schema-exposure":Gi}),ej=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),Bv=z.object({capRules:z.array(Xw).default([]).meta(d),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(d),remindLaterMinutes:z.number().int().min(0).default(60).meta(d),testMode:ej.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),hg=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.meta({...d,readOnly:true}),global_frequency_cap:Bv.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":gl,"x-revturbine-schema-exposure":Gi,...Vv,...$i()}),tj=dr("PlacementSettingsAnchor"),nj=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":St,"x-revturbine-schema-exposure":Ft}),rj=z.object({name:z.string().min(1).meta(d),handle:z.string().min(1).meta(d),predicates:z.array(nj).optional().meta(d),dimension_id:z.string().optional().meta(d),experiment_handle:z.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),ij=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:bs.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),aj=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:bs.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),sj=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),currency:Hc.meta(d),pricing_model:Yc.meta(d),visibility:bs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Au.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),oj=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),currency:Hc.meta(d),pricing_model:Yc.meta(d),visibility:bs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Au.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),lj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),cj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),mj=z.object({handle:z.string().min(1).meta(d),global_frequency_cap:Bv.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":St,"x-revturbine-schema-exposure":Ft,...gt}),uj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),pj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),dj=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),type:bg.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":St,"x-revturbine-schema-exposure":Ft,...gt}),gj=z.object({id:z.string().min(1).meta(d),entitlement_id:z.string().min(1).meta(d),targets:z.array(Wy).min(1).meta(d),segment_ids:z.array(z.string()).default([]).meta(d),kind:bg.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}),...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(d),allocation:wu.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),hj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),fj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),_j=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":St,"x-revturbine-schema-exposure":Ft}),yj=z.object({id:z.string().min(1).meta(d),surface_type:z.string().meta(d),fields:z.array(_j).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),vj=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":St,"x-revturbine-schema-exposure":Ft}),bj=z.object({name:z.string().min(1).meta(d),action_type:vj.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":St,"x-revturbine-schema-exposure":Ft,...gt}),xj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),Sj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),Uy=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":St,"x-revturbine-schema-exposure":Ft}),Pj=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:Uy.meta(d),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Uy})).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":St,"x-revturbine-schema-exposure":Ft,...gt}),Tj=z.object({label:z.string().meta(d),path:By.meta(d),config:z.record(z.string(),z.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),zv=z.object({template_id:z.string().min(1).meta(d),fields:z.record(z.string(),z.string()).meta(d),ctas:z.array(Tj).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),$v=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":St,"x-revturbine-schema-exposure":Ft}),Ij=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":St,"x-revturbine-schema-exposure":Ft}),Kv=z.object({max_per_period:Ij.optional().meta(d),cooldown_days:z.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),Cj=z.object({id:z.string().min(1).meta(d),target:$v.meta(d),surfaces:z.array(zv).meta(d),caps:Kv.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":St,"x-revturbine-schema-exposure":Ft}),Ej=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:Bc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bc}),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":St,"x-revturbine-schema-exposure":Ft}),kj=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),Rj=z.object({id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:kj.meta(d),trigger:Ej.meta(d),payloads:z.array(Cj).meta(d),order:z.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),Aj=z.object({payload_id:z.string().min(1).meta(d),placement_id:z.string().min(1).meta(d),target:$v.meta(d),caps:Kv.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(zv).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":St,"x-revturbine-schema-exposure":Ft,...gt}),wj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),jj=he.merge(jv).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...cl}),Oj=he.merge(Ov).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...cl}),qj=z.object({plans:z.array(ij).meta({...d,...gt}),addons:z.array(aj).optional().meta({...d,...gt}),entitlements:z.array(dj).meta({...d,...gt}),entitlement_rules:z.array(gj).meta({...d,...gt}),segments:z.array(rj).meta({...d,...gt}),content_ui_paths:z.array(bj).meta({...d,...gt}),slot_configs:z.array(hj).optional().meta({...d,...gt,...Xd({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,...gt,...Xd({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,...Kw,...Xd({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(fj).optional().meta({...d,...gt}),message_blocks:z.array(Pj).optional().meta({...d,...gt}),placement_payloads:z.array(Aj).optional().meta({...d,...gt}),placements:z.array(Rj).optional().meta({...d,...gt}),content_promotions:z.array(xj).optional().meta({...d,...gt}),personalization_tokens:z.array(Sj).optional().meta({...d,...gt}),surface_templates:z.array(yj).optional().meta({...d,...gt}),free_trial_rules:z.array(jj).optional().meta({...d,...Dy}),reverse_trial_rules:z.array(Oj).optional().meta({...d,...Dy}),plan_variations:z.array(sj).optional().meta({...d,...gt}),addon_variations:z.array(oj).optional().meta({...d,...gt}),extension_rules:z.array(wj).optional().meta({...d,...gt}),seat_types:z.array(lj).optional().meta({...d,...gt}),enforcement_defaults:z.array(cj).optional().meta({...d,...gt}),placement_settings:z.array(mj).optional().meta({...d,...gt}),segment_dimensions:z.array(uj).optional().meta({...d,...gt}),meter_bindings:z.array(pj).optional().meta({...d,...gt}),experiments:z.array(z.unknown()).max(0).optional().meta({...d,...cl}),signal_catalog:z.object({}).strict().optional().meta({...d,...cl})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),Dj=z.object({artifact_type:z.literal("playbook").meta({...d,...Wo,readOnly:true}),format_version:z.literal(Gw).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,...pg,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...d,...dg,readOnly:true}),environment_id:z.string().min(1).optional().meta({...d,...dg,readOnly:true}),project_id:z.string().min(1).optional().meta({...d,...dg,readOnly:true}),exported_at:z.string().datetime().optional().meta({...d,...pg,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":St,"x-revturbine-schema-exposure":Ft,...pg}),Hv=Dj.extend(qj.shape).meta({"x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});function Mj(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Gv(t){if(!Mj(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(Gv,Hv).meta({id:"Playbook","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});z.preprocess(Gv,Hv.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});({"/api/seat-type-anchors":{get:y({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(Yw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:y({operationId:"listSeatTypes",requestParams:{query:me},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ce(Dc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:y({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Dc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:y({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",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:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:y({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:y({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(Ww)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:y({operationId:"listPersonalizationTokens",requestParams:{query:me},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ce(Mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:y({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Mc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:y({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",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:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:y({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:y({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(gg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:gg}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:y({operationId:"listMeteringConfigs",requestParams:{query:me},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ce(Uc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:y({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Uc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Uc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:y({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",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:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:y({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:y({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(Zw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:y({operationId:"listUsageEnforcementSettings",requestParams:{query:me},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ce(Fc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:y({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Fc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:y({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Fc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:y({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:y({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(tj)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:y({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(hg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:hg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Wa}=fn,{Persisted:Yv}=En,{Internal:Wv}=vn,Uj=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":Wv}),Fy=he.merge(ze).merge(it).extend({action:Uj.meta(Wa),resource_type:z.string().min(1).max(100).meta(Wa),resource_id:z.string().min(1).meta(Wa),resource_name:z.string().max(200).optional().meta(Wa),actor_id:z.string().min(1).meta(Wa),actor_email:z.string().email().optional().meta(Wa),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Wa),summary:z.string().max(1e3).optional().meta(Wa),metadata:Xn.meta(Wa)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":Wv});({"/api/changelog":{get:y({operationId:"listChangeLogEntries",requestParams:{query:me},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ce(Fy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:y({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:Fy}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Tu}=fn,{Persisted:Fj,Transient:Lj}=En,{Internal:Jv}=vn,Nj=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":Lj,"x-revturbine-schema-exposure":Jv}),vs=he.merge(ze).extend({name:Qn.meta(Tu),handle:Yt.meta(Tu),status:Nj.default("active").meta(Tu),metadata:Xn.meta(Tu)}).meta({id:"Tenant","x-revturbine-schema-persistence":Fj,"x-revturbine-schema-exposure":Jv});({"/api/tenants":{get:y({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:y({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:y({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:y({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:y({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:Vi}=fn,{Persisted:Vj,Transient:Zv}=En,{Internal:Vg}=vn,Bj=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Zv,"x-revturbine-schema-exposure":Vg}),Jo=he.merge(ze).merge(it).extend({name:Qn.meta(Vi),handle:Yt.meta(Vi),description:Gs.meta(Vi),is_production:z.boolean().default(false).meta({...Vi,readOnly:true}),status:Bj.default("active").meta(Vi),cloned_from_environment_id:z.string().nullable().default(null).meta({...Vi,readOnly:true}),cloned_at:$n.meta({...Vi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Vi,readOnly:true}),requires_approval:z.boolean().default(false).meta(Vi),auto_deploy_on_approval:z.boolean().default(false).meta(Vi),created_by:z.string().optional().meta(Vi),metadata:Xn.meta(Vi)}).meta({id:"Environment","x-revturbine-schema-persistence":Vj,"x-revturbine-schema-exposure":Vg}),zj=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":Zv,"x-revturbine-schema-exposure":Vg});({"/api/environments":{get:y({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:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:y({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:y({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:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:y({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:zj}}},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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:rt,Pii:Kc}=fn,{Transient:Aa,Persisted:$j}=En,{External:ua}=vn,Kj=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua});z.object({superseded_output_id:z.string().min(1).meta(rt),superseded_by:z.string().min(1).meta(rt),reason:Kj.meta(rt)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":$j,"x-revturbine-schema-exposure":ua,...fn.Operational});var Hj=z.enum(Vy).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua}),Qv=z.object({output_id:z.string().meta(rt),category:z.string().meta(rt),surface:z.object({template:z.string().optional().meta(rt),type:Ny.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":Aa,"x-revturbine-schema-exposure":ua}),Gj=z.object({status:Hj.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:Qv.optional().meta(rt)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua});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":Aa,"x-revturbine-schema-exposure":ua});var Yj=z.object({id:z.string().meta(Kc),anonymous_id:z.string().optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Kc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua}),Wj=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:Qv.optional().meta(rt),reason_codes:z.array(z.string()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua}),Jj=Gj,Zj=Cg.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua}),Qj=z.object({segments:z.array(z.string()).optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Kc),usage_balances:z.record(z.string(),z.number()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua});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:Yj.meta(Kc),decisions:z.array(Wj).meta(rt),entitlements:z.record(z.string(),Jj).optional().meta(rt),theme:z.record(z.string(),z.unknown()).optional().meta(rt),trial_status:Zj.optional().meta(rt),user_context:Qj.optional().meta(Kc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Aa,"x-revturbine-schema-exposure":ua});var {Unrestricted:en}=fn,{Persisted:Xj,Transient:Vu}=En,{Internal:im}=vn,eO=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Vu,"x-revturbine-schema-exposure":im}),Lc=he.merge(ze).merge(it).extend({environment_id:z.string().min(1).meta(en),name:Qn.meta(en),description:z.string().max(2e3).optional().meta(en),status:eO.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:$n.meta({...en,readOnly:true}),reviewed_at:$n.meta({...en,readOnly:true}),deployed_at:$n.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:Xn.meta(en)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Xj,"x-revturbine-schema-exposure":im}),Xv=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":Vu,"x-revturbine-schema-exposure":im}),tO=z.object({playbook_version_id:z.string().meta(en),entries:z.array(Xv).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":Vu,"x-revturbine-schema-exposure":im}),nO=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":Vu,"x-revturbine-schema-exposure":im});({"/api/playbook-versions/{playbookVersionId}/submit":{post:y({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:Lc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:y({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:Lc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:y({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:Lc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:y({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:nO}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:y({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:Lc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:y({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:tO}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:y({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(Xv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:y({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:Lc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:He,Pii:rO}=fn,{Persisted:Yi}=En,{Internal:Wi}=vn,iO=mn(Ut.CustomerOperations,{sdkInput:false,source:wi.Customer}),aO=365,zs=he.merge(ze).merge(it).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:Sv.default("unavailable").meta({...He,readOnly:true}),last_health_check_at:$n.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":Yi,"x-revturbine-schema-exposure":Wi,...iO}),sO=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),Iu=he.merge(ze).merge(it).extend({name:Qn.meta(He),key_hash:z.string().min(1).meta({...rO,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:sO.default("active").meta(He),last_used_at:$n.meta({...He,readOnly:true}),expires_at:$n.meta(He)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),oO=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),$s=he.merge(ze).merge(it).extend({key:z.string().min(1).max(100).meta(He),value_type:oO.default("boolean").meta(He),value:z.string().max(4e3).default("false").meta(He),description:Gs.meta(He),enabled:z.boolean().default(true).meta(He)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),fg=he.merge(ze).merge(it).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(xu.window_days).meta(He),activity_high_min:z.number().int().min(1).default(xu.high_min).meta(He),activity_medium_min:z.number().int().min(1).default(xu.medium_min).meta(He),activity_low_min:z.number().int().min(1).default(xu.low_min).meta(He),analytics_retention_days:z.number().int().min(1).default(aO).meta(He)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),_g=he.merge(ze).merge(it).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":Yi,"x-revturbine-schema-exposure":Wi}),Cu=he.merge(ze).merge(it).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:$n.meta({...He,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),lO=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),cO=he.merge(it).extend({environment_id:z.string().min(1).default("production").meta(He),actor_type:lO.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":Yi,"x-revturbine-schema-exposure":Wi}),mO=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Yi,"x-revturbine-schema-exposure":Wi}),Eu=he.merge(ze).merge(it).merge(Sn).merge(kn).extend({handle:Yt.meta({...He,readOnly:true}),identifier:z.string().min(1).max(200).meta(He),identifier_type:mO.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":Yi,"x-revturbine-schema-exposure":Wi,...$i()});({"/api/settings/api-keys":{get:y({operationId:"listApiKeys",requestParams:{query:me},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:ce(Iu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:y({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Iu)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:y({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:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:y({operationId:"listFeatureFlags",requestParams:{query:me},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ce($s)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:y({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur($s)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:y({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:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:y({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr($s).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:y({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:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:y({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(fg).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:fg}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:y({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(_g).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:_g}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:y({operationId:"listOnboardingSteps",requestParams:{query:me},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ce(Cu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:y({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:Cu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:y({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(Cu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Cu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:y({operationId:"listAuditEvents",requestParams:{query:me},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ce(cO)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:y({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(Eu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:y({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Eu)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Eu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:y({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:Eu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:y({operationId:"listProviderConnections",requestParams:{query:me},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:ce(zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:y({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(zs)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:y({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:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:y({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(zs).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:y({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:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ye,Pii:Jr}=fn,{Persisted:pi,Transient:Bg}=En,{Internal:Fr}=vn,uO=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fr});he.merge(ze).extend({name:Qn.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:uO.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:$n.meta({...ye,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":pi,"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":pi,"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:$n.meta({...ye,readOnly:true}),refresh_token_expires_at:$n.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":pi,"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":pi,"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":pi,"x-revturbine-schema-exposure":Fr});he.extend({name:Qn.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":pi,"x-revturbine-schema-exposure":Fr});var eb=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fr});var tb=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":Fr}),nb=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Bg,"x-revturbine-schema-exposure":Fr});z.object({resource:tb,action:nb}).meta({id:"Permission","x-revturbine-schema-persistence":Bg,"x-revturbine-schema-exposure":Fr});var pO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],dO=["plans","entitlements","placements","targeting","content","experiments"],gO=["plans","entitlements","placements","targeting","content","experiments"],hO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],fO=["read","create","update","delete","publish","approve","invite","manage_roles"];function Bu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var _O=Bu(pO,["read"]),yO=[..._O,...Bu(dO,["create","update"])];[...yO,...Bu(gO,["publish","approve","delete"])];Bu(hO,fO);var vO=tb.options.flatMap(t=>nb.options.map(e=>`${t}:${e}`));z.enum(vO).meta({id:"McpTokenScope","x-revturbine-schema-persistence":pi,"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:eb.default("viewer").meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fr});var bO=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fr});he.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),email:z.string().email().meta(Jr),role:eb.nullable().default(null).meta(ye),status:bO.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":pi,"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":pi,"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:$n.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:$n.meta({...ye,readOnly:true}),expires_at:$n.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":pi,"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":pi,"x-revturbine-schema-exposure":Fr});var rb="0.7.7";var zu=/^[a-z0-9._]{1,100}$/;var Ne={Persisted:"persisted",Transient:"transient"},Me={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 ib="x-revturbine-schema-exposure",PO="readOnly",TO="x-revturbine-decision-only",$u={[TO]:true},Xr={[ib]:Me.External},zg={[ib]:Me.Internal};function Hn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[PO]===true||(e[n]=r);}return z.object(e)}function er(t){let e=Hn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(zu)}):e}var {Unrestricted:Sr}=qe,{Transient:ei,Persisted:IO}=Ne,{Internal:Js,External:wa}=Me;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":ei,"x-revturbine-schema-exposure":wa});var $g=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":ei,"x-revturbine-schema-exposure":wa}),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":ei,"x-revturbine-schema-exposure":wa}),W=z.object({id:z.string().min(1).meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":wa}),pe=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":wa});var kO=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],Ku=z.enum(kO).meta({id:"ComponentType","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":wa}),am=Ku,RO=["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"],Kg=z.enum(RO).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});var sm=["allowed","limited","denied"],om={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":ei,"x-revturbine-schema-exposure":wa});var hl=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":wa}),Is=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":wa});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});var Wt=z.string().min(1).max(200),at=z.string().min(1).max(100),Ci=z.string().max(500).optional(),Kt=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":ei,"x-revturbine-schema-exposure":Js}),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":ei,"x-revturbine-schema-exposure":Js}),OO=W.merge(le).merge(pe).merge(Lt).extend({handle:at.meta({...Sr,readOnly:true}),active:z.boolean().default(true).meta({...Sr,readOnly:true})});function bn(t){return OO.meta({id:t,"x-revturbine-schema-persistence":IO,"x-revturbine-schema-exposure":Js})}var fl=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js}),_l=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":ei,"x-revturbine-schema-exposure":wa});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"},qO="x-revturbine-context",DO="x-revturbine-in-config",MO="x-revturbine-sdk-input",UO="x-revturbine-source",FO="x-revturbine-deprecation",LO={[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 ft(t,e){return {[qO]:t,[DO]:e.inConfig??t===Ye.Playbook,[MO]:e.sdkInput,[UO]:e.source??LO[t]}}function lm(t){return {deprecated:true,[FO]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Hg={Named:"named",Minted:"minted"},sb="x-revturbine-schema-identity";function Fn(t="handle"){return {[sb]:{kind:Hg.Named,handleField:t}}}function Pr(t="handle"){return {[sb]:{kind:Hg.Minted,handleField:t}}}var K=t=>z.object({items:z.array(t)}),$e=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:yl}=qe,{Persisted:cm,Transient:Hu}=Ne,{External:es}=Me,NO=ft(Ye.Playbook,{sdkInput:true}),VO=ft(Ye.Playbook,{sdkInput:false}),Gg=ft(Ye.Billing,{sdkInput:false}),ja=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Hu,"x-revturbine-schema-exposure":es}),no=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Hu,"x-revturbine-schema-exposure":es}),vl=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Hu,"x-revturbine-schema-exposure":es}),Zs=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:at.meta(Qt),tier_position:z.number().int().min(0).default(0).meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:ja.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"Plan","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":es,...NO,...Fn()}),BO=bn("PlanAnchor"),Qs=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:at.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(yl),currency:Is.meta(yl),pricing_model:no.meta(Qt),visibility:ja.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:vl.default("static").meta(Qt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":es,...Gg,...Pr()}),zO=bn("PlanVariationAnchor"),Xs=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:Wt.meta(Qt),handle:at.meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:ja.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"AddOn","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":es,...VO,...Fn()}),$O=bn("AddOnAnchor"),eo=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),handle:at.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(yl),currency:Is.meta(yl),pricing_model:no.meta(Qt),visibility:ja.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:vl.default("static").meta(Qt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":es,...Gg,...Pr()}),KO=bn("AddOnVariationAnchor"),ob=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Hu,"x-revturbine-schema-exposure":es}),to=W.merge(le).merge(pe).extend({stripe_price_id:z.string().min(1).meta(Qt),stripe_product_id:z.string().min(1).meta(Qt),billing_period:ob.meta(Qt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(yl),currency:Is.meta(yl),pricing_model:no.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":cm,"x-revturbine-schema-exposure":es,...Gg});var HO=Hn(Zs),GO=Hn(Qs),YO=Hn(Xs),WO=Hn(eo),JO=Hn(to);({"/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:K(BO)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Zs)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:er(Zs)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Zs}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:Zs}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:HO}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Zs}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:$e}}}},"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:K(zO)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Qs)}}}},"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:er(Qs)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Qs}}}},"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:Qs}}}},"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:GO}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Qs}}}},"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:K($O)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Xs)}}}},"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:er(Xs)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Xs}}}},"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:Xs}}}},"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:YO}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Xs}}}},"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:K(KO)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(eo)}}}},"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:er(eo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:eo}}}},"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:eo}}}},"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:WO}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:eo}}}},"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:K(to)}}}},"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:er(to)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:to}}}},"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:to}}}},"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:JO}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:to}}}},"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:Wg,Transient:Ei}=Ne,{Internal:lb,External:di}=Me,cb=ft(Ye.Playbook,{sdkInput:true}),QO=ft(Ye.Playbook,{inConfig:false,sdkInput:false}),Jg=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":Ei,"x-revturbine-schema-exposure":di}),bl=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),mb=z.enum(sm).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),ub=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),Zg=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),io=z.object({entitlement_id:z.string().min(1).meta(Re),entitlement_handle:z.string().min(1).meta(Re),status:mb.meta(Re),limit:z.number().optional().meta(Re),used:z.number().optional().meta(Re),allocation:bl.optional().meta(Re),enforcement:Zg.optional().meta(Re),source:ub.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":Ei,"x-revturbine-schema-exposure":di,...qe.Operational});z.object({account:z.record(z.string(),io).optional().meta(Re),instance:z.record(z.string(),io).optional().meta(Re),user:z.record(z.string(),io).optional().meta(Re)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di,...qe.Operational});var pb=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),db=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),Yu=z.object({kind:db.meta(Re),id:z.string().min(1).meta(Re)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),gb=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),ro=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),name:Wt.meta(Re),handle:at.meta(Re),customer_facing_description:z.string().max(500).optional().meta(Re),type:hl.meta(Re),unit:z.string().max(100).optional().meta(Re),period_scope:Jg.optional().meta(Re),allocation:bl.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":Wg,"x-revturbine-schema-exposure":di,...cb,...Fn()}),e1=bn("EntitlementAnchor"),Es=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),handle:at.meta({...Re,readOnly:true}),entitlement_id:z.string().min(1).meta(Re),targets:z.array(Yu).min(1).meta(Re),segment_ids:z.array(z.string()).default([]).meta(Re),visibility:pb.default("public").meta(Re),period_scope:Jg.optional().meta(Re),instance:z.string().max(100).optional().meta(Re),reset_period:gb.optional().meta(Re),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),enforcement:Zg.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:bl.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":Wg,"x-revturbine-schema-exposure":lb,...cb,...Pr()}),t1=bn("EntitlementRuleAnchor");Es.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 r1=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),i1=z.object({code:r1.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":Ei,"x-revturbine-schema-exposure":di}),Yg=Es.extend({warnings:z.array(i1).optional().meta(Re)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di});var Gu=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({handle:at.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":Wg,"x-revturbine-schema-exposure":lb,...QO,...Pr()}),a1=Hn(ro),s1=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:K(e1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(t1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(ro)}}}},"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:er(ro)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ro}}}},"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:ro}}}},"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:a1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ro}}}},"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:$e}}}},"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:K(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:er(Es)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yg}}}},"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:s1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yg}}}},"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:Yg}}}},"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:K(Gu)}}}},"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:er(Gu)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Gu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:et}=qe,{Persisted:Wu,Transient:ks}=Ne,{External:Zi}=Me,fb=ft(Ye.Playbook,{sdkInput:true});ft(Ye.Playbook,{inConfig:false,sdkInput:false});var l1=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),c1=ft(Ye.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),m1=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Qg=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Zi}),Xg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Zi}),_b=z.object({count:z.number().int().positive().meta(et),period:Xg.meta(et)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Zi});z.object({surface_type:z.string().min(1).meta(et),rules:z.array(_b).meta(et),cooldown_ms:z.number().int().nonnegative().optional().meta(et)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":Zi,...qe.Operational,...l1});var yb=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":Zi}),ao=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),name:Wt.meta(et),handle:at.meta(et),description:Ci.meta(et),category:Qg.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:m1.optional().meta(et),activation_window_start:z.string().datetime().optional().meta(et),activation_window_end:z.string().datetime().optional().meta(et),metadata:Kt.meta(et)}).meta({id:"Placement","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":Zi,...fb,...Fn()}),p1=bn("PlacementAnchor"),vb=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Zi}),bb=z.object({code:vb.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":Zi}),hb=ao.extend({warnings:z.array(bb).optional().meta(et)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ks,"x-revturbine-schema-exposure":Zi});var xb=z.object({label:z.string().min(1).max(200).meta(et),cta_path_type:yb.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":Zi}),xl=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),handle:at.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(xb).default([]).meta(et),max_per_period:z.number().int().min(0).nullable().default(null).meta(et),max_period_unit:Xg.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":Wu,"x-revturbine-schema-exposure":Zi,...fb,...Pr()}),d1=bn("PlacementPayloadAnchor"),Sb=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({surface_slot_handle:z.string().min(1).max(200).meta(et),surface_type:am.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":Wu,"x-revturbine-schema-exposure":Zi,...c1,...Fn("surface_slot_handle")}),g1=Hn(ao),h1=Hn(xl);({"/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:K(p1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(ao)}}}},"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:er(ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:hb}}}},"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:ao}}}},"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:g1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:hb}}}},"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:$e}}}},"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:ao}}}},"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:Qg,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:K(d1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(xl)}}}},"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:er(xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xl}}}},"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:h1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xl}}}},"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:K(Sb)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:$r,Pii:Sl}=qe,{Persisted:th,Transient:nh}=Ne,{Internal:Pl}=Me,_1=ft(Ye.CustomerOperations,{sdkInput:false}),Pb=z.object({external_id:z.string().min(1).meta(Sl),traits:z.record(z.string(),z.unknown()).default({}).meta(Sl),plan_id:z.string().optional().meta($r)}).meta({id:"Identity","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":Pl}),Ju=z.enum(["payment_failed","payment_method_missing"]),eh=W.merge(le).merge(pe).extend({external_id:z.string().min(1).meta(Sl),identity:Pb.meta(Sl),stripe_customer_id:z.string().optional().meta($r),current_plan_id:z.string().optional().meta($r),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta($r),status:z.enum(["active","churned","trial","suspended"]).default("active").meta($r),billing_health_issues:z.array(Ju).default([]).meta($r),metadata:Kt.meta($r)}).meta({id:"Customer","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":Pl}),Tb=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":nh,"x-revturbine-schema-exposure":Pl}),Ib=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":nh,"x-revturbine-schema-exposure":Pl}),Cb=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":nh,"x-revturbine-schema-exposure":Pl}),ts=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({handle:at.meta({...$r,readOnly:true}),customer_id:z.string().min(1).meta(Sl),customer_id_list:z.array(z.string()).optional().meta(Sl),override_type:Ib.meta($r),target_id:z.string().min(1).meta($r),value:z.record(z.string(),z.unknown()).default({}).meta($r),duration_type:Tb.default("permanent").meta($r),duration_value:z.string().optional().meta($r),expiry_date:nn.meta($r),status:Cb.default("active").meta($r),reason:z.string().max(500).optional().meta($r),created_by:z.string().optional().meta($r)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":Pl,..._1,...Pr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:H},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:K(eh)}}}},"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:eh}}}},"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:K(ts)}}}},"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:ts}}}},"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:ts.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ts}}}},"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:ts}}}},"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:ts}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Ke,Pii:mm,Financial:rh}=qe,{Persisted:Eb,Transient:Oa}=Ne,{External:Tl,Internal:um}=Me,pm=z.object({in_trial:z.boolean().meta(Ke),trial_type:z.string().optional().meta(Ke),plan_handle:z.string().optional().meta(Ke),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Ke),trial_limit_type:z.enum(["time","usage"]).optional().meta(Ke),progress_percent:z.number().min(0).max(100).optional().meta(Ke),day_number:z.number().int().min(0).optional().meta(Ke),days_remaining:z.number().int().min(0).optional().meta(Ke),usage_entitlement_handle:z.string().optional().meta(Ke),usage_consumed:z.number().int().min(0).optional().meta(Ke),usage_remaining:z.number().int().min(0).optional().meta(Ke),usage_limit:z.number().int().min(0).optional().meta(Ke)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":Tl}),ih=z.object({entitlement_handle:z.string().min(1).meta(Ke),unit:z.string().min(1).meta(Ke),amount:z.number().min(0).meta(Ke),limit:z.number().min(0).optional().meta(Ke),reset_date:z.string().optional().meta(Ke)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":Tl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":Tl});var ah=z.object({handle:z.string().min(1).meta(Ke),name:z.string().min(1).meta(Ke),price:z.string().optional().meta(Ke),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Ke)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":Tl}),kb=z.object({product_instance_id:z.string().min(1).meta(Ke),user_id:z.string().min(1).meta(mm),plan:ah.optional().meta(Ke),usage:z.record(z.string(),ih).default({}).meta(Ke),trial:pm.optional().meta(Ke),entitlements:z.record(z.string(),z.union([z.boolean(),io])).default({}).meta(Ke)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Eb,"x-revturbine-schema-exposure":Tl}),so=W.merge(pe).merge(le).extend({user_id:z.string().min(1).meta(mm),account_id:z.string().min(1).nullable().optional().meta(mm),email:z.string().email().nullable().optional().meta(mm),email_type:z.string().optional().meta(Ke),plan_handle:z.string().min(1).optional().meta(Ke),plan:ah.optional().meta(Ke),usage:z.record(z.string(),ih).default({}).meta(Ke),trial:pm.optional().meta(Ke),payment_failed:z.boolean().optional().meta(Ke),payment_at_risk:z.boolean().optional().meta(Ke),tiers:z.record(z.string(),z.string()).optional().meta(Ke),entitlements:z.record(z.string(),z.union([z.boolean(),io])).default({}).meta(Ke),instances:z.array(kb).optional().meta(Ke),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(mm),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Ke,"x-revturbine-schema-persistence":Oa}),derived_config_version:z.string().nullable().optional().meta(Ke),context_hash:z.string().nullable().optional().meta(Ke),derived_computed_at:nn.meta(Ke),activity_score:z.number().int().min(0).nullable().optional().meta(Ke),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Ke),experiments:z.record(z.string(),z.string()).optional().meta(Ke)}).meta({id:"UserContext","x-revturbine-schema-persistence":Eb,"x-revturbine-schema-exposure":Tl}),b1=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Ke,...Xr}),days_remaining:z.number().int().min(0).optional().meta({...Ke,...Xr}),ends_at:z.string().optional().meta({...Ke,...Xr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":um}),x1=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Ke,...Xr}),failed_payment_reason:z.string().optional().meta({...rh,...$u}),issues:z.array(Ju).optional().meta({...rh,...$u}),provider_subscription_id:z.string().optional().meta({...rh,...zg})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":um}),S1=z.object({can_upgrade:z.boolean().optional().meta({...Ke,...Xr}),can_manage_billing:z.boolean().optional().meta({...Ke,...Xr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":um}),P1=z.object({handle:z.string().min(1).optional().meta({...Ke,...Xr}),name:z.string().min(1).optional().meta({...Ke,...Xr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":um});z.object({subject:z.string().min(1).meta({...Ke,...Xr}),context_version:z.string().optional().meta({...Ke,...Xr}),trial:b1.optional().meta({...Ke,...Xr}),billing:x1.optional().meta({...Ke,...Xr}),plan:P1.optional().meta({...Ke,...Xr}),capabilities:S1.optional().meta({...Ke,...Xr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Oa,"x-revturbine-schema-exposure":um});({"/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:K(so)}}}},"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:so}}}},"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:so.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:so}}}},"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:sr}=qe,{Persisted:sh,Transient:Rb}=Ne,{Internal:dm}=Me,C1=ft(Ye.Playbook,{sdkInput:true}),Ab=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),wb=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Rb,"x-revturbine-schema-exposure":dm}),jb=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Rb,"x-revturbine-schema-exposure":dm}),Zu=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),name:Wt.meta(sr),handle:at.optional().meta(sr),category:wb.default("custom").meta(sr),visibility_toggle:z.boolean().default(true).meta(sr),source_type:jb.default("system").meta(sr),estimated_size:z.number().int().min(0).optional().meta(sr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":sh,"x-revturbine-schema-exposure":dm,...Ab,...Fn()}),E1=bn("SegmentDimensionAnchor"),Qu=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),dimension_id:z.string().min(1).meta(sr),name:Wt.meta(sr),handle:at.meta(sr),description:Ci.meta(sr),definition_rule:z.record(z.string(),z.unknown()).optional().meta(sr),used_in_count:z.number().int().min(0).default(0).meta({...sr,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":sh,"x-revturbine-schema-exposure":dm,...Ab,...Fn()}),k1=bn("SegmentValueAnchor");W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),name:Wt.meta(sr),handle:at.meta(sr),description:Ci.meta(sr),rules:z.record(z.string(),z.unknown()).default({}).meta(sr),experiment_handle:z.string().min(1).optional().meta(sr),is_active:z.boolean().default(true).meta(sr),estimated_size:z.number().int().min(0).nullable().default(null).meta(sr),metadata:Kt.meta(sr)}).meta({id:"Segment","x-revturbine-schema-persistence":sh,"x-revturbine-schema-exposure":dm,...C1,...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:K(E1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(k1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Zu)}}}},"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:Zu}}}},"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:$e}}}},"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:Zu}}}},"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:K(Qu)}}}},"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:Qu}}}},"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:Qu}}}},"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:wt}=qe,{Persisted:Il,Transient:Ob}=Ne,{External:Rs}=Me,oh=ft(Ye.Playbook,{sdkInput:true}),w1=ft(Ye.Playbook,{inConfig:false,sdkInput:false}),j1=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),O1=ft(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant});W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),handle:at.meta({...wt,readOnly:true}),name:Wt.meta(wt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(wt),subject:z.string().max(500).optional().meta(wt),body:z.string().meta(wt),template_variables:z.array(z.string()).default([]).meta(wt),metadata:Kt.meta(wt)}).meta({id:"Message","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":Rs,...w1,...Pr()});var Xu=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:Wt.meta(wt),handle:at.meta(wt),action_type:_l.meta(wt),target_url:z.string().optional().meta(wt),target_plan_id:z.string().optional().meta(wt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(wt),metadata:Kt.meta(wt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":Rs,...oh,...Fn()}),D1=bn("CtaPathAnchor"),qb=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":Rs,...O1}),Db=z.object({name:z.string().min(1),field_type:qb,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":Rs,...j1}),ep=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:Wt.meta(wt),handle:at.meta(wt),surface_type:z.union([Ku,Kg]).meta(wt),field_definitions:z.array(Db).default([]).meta(wt),description:Ci.meta(wt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":Rs,...oh,...Fn()}),M1=bn("SurfaceTemplateAnchor"),tp=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:Wt.meta(wt),handle:at.meta(wt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(wt),variation_dimension_id:z.string().optional().meta(wt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(wt),notes:z.string().max(1e3).optional().meta(wt),used_in_count:z.number().int().min(0).default(0).meta({...wt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":Rs,...oh,...Fn()}),U1=bn("MessageBlockRecordAnchor"),Mb=z.object({segment_id:z.string().min(1).meta(wt),message_block_id:z.string().min(1).meta(wt),ui_path_id:z.string().optional().meta(wt),promotion_id:z.string().optional().meta(wt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Ob,"x-revturbine-schema-exposure":Rs});z.object({payload_id:z.string().min(1).meta(wt),tenant_id:z.string().min(1).meta(wt),name:Wt.meta(wt),surface_template_id:z.string().min(1).meta(wt),default_message_block_id:z.string().min(1).meta(wt),segment_content_map:z.array(Mb).optional().meta(wt),ui_path_id:z.string().optional().meta(wt),promotion_id:z.string().optional().meta(wt),status:z.enum(["draft","active","inactive"]).meta(wt),created_at:z.string().datetime().optional().meta({...wt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...wt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Ob,"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:K(M1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(ep)}}}},"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:K(U1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(tp)}}}},"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:K(D1)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Xu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Cl,Pii:N1}=qe,{Persisted:Ub}=Ne,{Internal:V1,External:B1}=Me,z1=ft(Ye.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Cl,readOnly:true}),name:z.string().min(1).max(120).meta(Cl),mode:z.enum(["light","dark","system"]).default("system").meta(Cl),tokens:z.record(z.string(),z.string()).default({}).meta(Cl)}).meta({id:"Theme","x-revturbine-schema-persistence":Ub,"x-revturbine-schema-exposure":B1,...z1});var lh=W.merge(le).extend({user_id:z.string().min(1).meta(N1),scope:z.string().min(1).meta(Cl),preferences:z.record(z.string(),z.unknown()).default({}).meta(Cl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Ub,"x-revturbine-schema-exposure":V1});({"/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:K(lh)}}}},"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(lh))}}},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:qt,Financial:qa}=qe,{Persisted:Fb,Transient:gm}=Ne,{External:hm,Internal:Lb}=Me,Nb=z.object({month:z.string().meta(qt),cohort_size:z.number().int().min(0).meta(qt),retained:z.number().int().min(0).meta(qt),retention_rate:z.number().min(0).max(1).meta(qt),revenue_cents:z.number().int().min(0).meta(qa)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),Vb=z.object({step:z.string().meta(qt),label:z.string().meta(qt),count:z.number().int().min(0).meta(qt),conversion_rate:z.number().min(0).max(1).meta(qt),drop_off_rate:z.number().min(0).max(1).meta(qt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),Bb=z.object({placement_id:z.string().meta(qt),placement_name:z.string().meta(qt),impressions:z.number().int().min(0).meta(qt),clicks:z.number().int().min(0).meta(qt),conversions:z.number().int().min(0).meta(qt),ctr:z.number().min(0).meta(qt),conversion_rate:z.number().min(0).meta(qt),revenue_cents:z.number().int().min(0).meta(qa)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),zb=z.object({date:z.string().meta(qt),mrr_cents:z.number().int().min(0).meta(qa),arr_cents:z.number().int().min(0).meta(qa),new_mrr_cents:z.number().int().min(0).meta(qa),churned_mrr_cents:z.number().int().min(0).meta(qa),expansion_mrr_cents:z.number().int().min(0).meta(qa),net_new_mrr_cents:z.number().int().meta(qa)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),$b=z.object({metric_key:z.string().min(1).meta(qt),label:z.string().meta(qt),current_value:z.number().meta(qa),previous_value:z.number().nullable().default(null).meta(qa),change_percent:z.number().nullable().default(null).meta(qt),period:z.string().meta(qt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(qt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":gm,"x-revturbine-schema-exposure":hm}),ch=W.merge(le).merge(pe).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(qt),severity:fl.meta(qt),resource_type:z.string().min(1).meta(qt),resource_id:z.string().min(1).meta(qt),summary:z.string().max(1e3).meta(qt),expected_value:z.unknown().optional().meta(qt),actual_value:z.unknown().optional().meta(qt),affected_customer_count:z.number().int().min(0).default(0).meta(qt),is_resolved:z.boolean().default(false).meta(qt),resolved_at:nn.meta(qt),metadata:Kt.meta(qt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Fb,"x-revturbine-schema-exposure":Lb}),mh=W.merge(le).merge(pe).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(qt),severity:fl.meta(qt),title:z.string().min(1).max(300).meta(qt),description:z.string().max(2e3).meta(qt),resource_type:z.string().optional().meta(qt),resource_id:z.string().optional().meta(qt),is_acknowledged:z.boolean().default(false).meta(qt),acknowledged_at:nn.meta(qt),acknowledged_by:z.string().nullable().default(null).meta(qt),metadata:Kt.meta(qt)}).meta({id:"Alert","x-revturbine-schema-persistence":Fb,"x-revturbine-schema-exposure":Lb});({"/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:K($b)}}}},"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:K(Bb)}}}},"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:K(zb)}}}},"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:K(Nb)}}}},"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:K(Vb)}}}},"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:K(ch)}}}},"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:ch}}}},"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:K(mh)}}}},"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:mh}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:S}=qe,{Transient:G1}=Ne,{Internal:Y1}=Me,tt=t=>({id:t,"x-revturbine-schema-persistence":G1,"x-revturbine-schema-exposure":Y1}),Kb=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,np=/^[a-z][a-z0-9_-]{0,99}$/,rn=z.string().regex(Kb).max(120),qi=z.string().regex(np),Tr=rn.meta(tt("AnalyticsSemanticId")),ti=z.enum(["account","user","billing_unit","organization"]).meta(tt("AnalyticsAnalyticalUnit")),El=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(tt("AnalyticsQueryFamily")),pa=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(tt("AnalyticsSourceScope")),dh=z.enum(["as_of_event","current"]).meta(tt("AnalyticsHistoricalMode")),Hb=z.enum(["hour","day","week","month","quarter"]).meta(tt("AnalyticsTimeGrain")),rp=z.enum(["none","previous_period","previous_year"]).meta(tt("AnalyticsCompareMode")),fm=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(tt("AnalyticsFilterOperator")),ip=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(tt("AnalyticsFilterControl")),Gb=z.enum(["low","medium","high"]).meta(tt("AnalyticsCardinalityClass")),_m=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(tt("AnalyticsFieldType")),Yb=z.enum(["increase","decrease","neutral"]).meta(tt("AnalyticsMetricDirection")),Wb=z.enum(["binary","count","continuous","ratio","revenue"]).meta(tt("AnalyticsMetricStatisticalType")),Jb=z.enum(["additive","semi_additive","non_additive"]).meta(tt("AnalyticsMetricAggregationSemantics")),Zb=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(tt("AnalyticsDimensionType")),ap=z.enum(["filter","group","split","sort"]).meta(tt("AnalyticsDimensionCapability")),sp=z.enum(["private","team","tenant"]).meta(tt("AnalyticsViewVisibility")),uh=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")),Qb=z.enum(["unrestricted","pii","financial","operational"]).meta(tt("AnalyticsClassification")),hi=z.strictObject({value:z.string().min(1).max(300).meta(S),key:z.string().max(120).optional().meta(S)}).meta(tt("LocalizedText")),ph=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),kl=z.union([ph,z.array(ph).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(S),compare:rp.optional().meta(S)}),z.strictObject({min:z.number().optional().meta(S),max:z.number().optional().meta(S)})]).meta(tt("AnalyticsFilterValue")),op=z.strictObject({dimension:rn.meta(S),operator:fm.meta(S),value:kl.optional().meta(S)}).meta(tt("AnalyticsSemanticFilter")),oo=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")),Xb=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:hi.optional().meta(S)})).max(5).optional().meta(S),x_axis_format:oo.optional().meta(S),y_axis_format:oo.optional().meta(S),empty_state:z.enum(["blank","message"]).optional().meta(S)}).meta(tt("AnalyticsSafeChartOptions")),lp=z.object({deprecated:z.boolean().meta(S),replaced_by:rn.optional().meta(S)}).meta(tt("AnalyticsCatalogDeprecation")),gh=lp,hh=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:Zb.meta(S),operators:z.array(fm).min(1).meta(S),control:ip.meta(S),capabilities:z.array(ap).min(1).meta(S),cardinality:Gb.meta(S),classification:Qb.default("unrestricted").meta(S),historical_mode:dh.optional().meta(S),allowed_concepts:z.array(rn).optional().meta(S),exclude_from_segment_picker:z.boolean().default(false).meta(S),deprecation:lp.optional().meta(S)}).meta(tt("AnalyticsCatalogDimension")),fh=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:_m.meta(S),format:oo.optional().meta(S),source_scope:pa.optional().meta(S),direction:Yb.optional().meta(S),statistical_type:Wb.optional().meta(S),aggregation_semantics:Jb.optional().meta(S),preferred_analysis_unit:ti.optional().meta(S),deprecation:lp.optional().meta(S)}).meta(tt("AnalyticsCatalogMetric")),_h=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(ti).min(1).meta(S),primary_time_dimension:rn.meta(S),historical_mode:dh.meta(S),dimensions:z.array(rn).min(1).meta(S),metrics:z.array(rn).min(1).meta(S),query_families:z.array(El).min(1).meta(S),source_scope:pa.meta(S),coverage_metric:rn.optional().meta(S),deprecation:lp.optional().meta(S)}).meta(tt("AnalyticsCatalogConcept")),ex=z.strictObject({field:rn.meta(S),direction:z.enum(["asc","desc"]).meta(S)}),tx=z.strictObject({dimension:rn.meta(S),grain:Hb.meta(S)}),nx=8,rx=z.strictObject({concept:rn.meta(S),family:El.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(nx).optional().meta(S),time:tx.optional().meta(S),filters_from:z.array(qi).max(20).optional().meta(S),fixed_filters:z.array(op).max(20).optional().meta(S),compare:rp.optional().meta(S),order_by:z.array(ex).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S)}).meta(tt("AnalyticsViewQuery")),ix=z.strictObject({type:z.literal("metric").meta(S),value:rn.meta(S),comparison:rn.optional().meta(S),format:oo.optional().meta(S)}).meta(tt("AnalyticsRenderMetric")),ax=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:Xb.optional().meta(S)}).meta(tt("AnalyticsRenderCartesian")),sx=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")),ox=z.strictObject({type:z.literal("table").meta(S),columns:z.array(rn).min(1).max(20).meta(S)}).meta(tt("AnalyticsRenderTable")),lx=z.strictObject({type:z.literal("timeline").meta(S),timestamp:rn.meta(S),event_type:rn.meta(S)}).meta(tt("AnalyticsRenderTimeline")),cx=z.strictObject({type:z.literal("recommendations").meta(S),presentation:z.enum(["list","ranked_cards"]).meta(S)}).meta(tt("AnalyticsRenderRecommendations")),yh=z.discriminatedUnion("type",[ix,ax,sx,ox,lx,cx]).meta(tt("AnalyticsRenderSpec")),mx=z.strictObject({id:qi.meta(S),dimension:rn.meta(S),control:ip.meta(S),label:hi.optional().meta(S),operators:z.array(fm).min(1).meta(S),default_value:kl.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(qi).min(1).max(24)]).default("all").meta(S)}).meta(tt("AnalyticsViewFilter")),vh=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:qi.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")),ux=z.strictObject({id:qi.meta(S),title:hi.optional().meta(S),description:hi.optional().meta(S),query:rx.meta(S),render:yh.meta(S)}).meta(tt("AnalyticsViewBlock")),px=z.strictObject({id:qi.meta(S),label:hi.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")),dx=z.strictObject({allow:z.array(uh).default([]).meta(S),deny:z.array(uh).default([]).meta(S)}).meta(tt("AnalyticsCustomizationPolicy"));var gx=z.string().regex(/^\d+\.\d+$/),Rl=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(S),schema_version:gx.meta(S),id:qi.meta(S),revision:z.number().int().min(1).meta(S),title:hi.meta(S),description:hi.optional().meta(S),analytical_unit:ti.meta(S),base_template:z.strictObject({id:qi.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(mx).max(20).meta(S),layout:vh.meta(S),blocks:z.array(ux).min(1).max(24).meta(S),handoffs:z.array(px).max(10).optional().meta(S),customization_policy:dx.meta(S)}).meta(tt("AnalyticsView")),hx=z.strictObject({id:qi.optional().meta(S),dimension:rn.meta(S),control:ip.optional().meta(S),label:hi.optional().meta(S),operators:z.array(fm).min(1).optional().meta(S),default_value:kl.optional().meta(S),required:z.boolean().optional().meta(S),pinned:z.boolean().optional().meta(S),applies_to:z.union([z.literal("all"),z.array(qi).min(1).max(24)]).optional().meta(S)}).meta(tt("AnalyticsViewFilterDraft")),fx=z.strictObject({id:qi.optional().meta(S),title:hi.optional().meta(S),concept:rn.meta(S),family:El.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(nx).optional().meta(S),time:tx.optional().meta(S),filters_from:z.array(qi).max(20).optional().meta(S),fixed_filters:z.array(op).max(20).optional().meta(S),compare:rp.optional().meta(S),order_by:z.array(ex).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S),render:z.union([z.literal("auto"),yh]).optional().meta(S)}).meta(tt("AnalyticsViewBlockDraft")),_x=z.strictObject({id:qi.optional().meta(S),label:hi.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:gx.meta(S),title:hi.meta(S),analytical_unit:ti.optional().meta(S),filters:z.union([z.literal("recommended"),z.array(hx).max(20)]).optional().meta(S),layout:z.union([z.literal("auto"),vh]).optional().meta(S),blocks:z.array(fx).min(1).max(24).meta(S),handoffs:z.union([z.literal("recommended"),z.array(_x).max(10)]).optional().meta(S),visibility:sp.optional().meta(S)}).meta(tt("AnalyticsViewDraft"));var bh=z.string().regex(/^(\/[^/]*)*$/).max(300),yx=z.strictObject({op:z.enum(["add","replace","remove"]).meta(S),path:bh.meta(S),value:z.unknown().optional().meta(S)}).meta(tt("AnalyticsSuggestedPatchOp")),xh=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")),vx=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(S),path:bh.meta(S),message:z.string().min(1).max(500).meta(S),actual:z.unknown().optional().meta(S),allowed:z.array(ph).max(50).optional().meta(S),suggested_patch:z.array(yx).max(10).optional().meta(S)}).meta(tt("AnalyticsValidationIssue"));z.object({path:bh.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(vx).default([]).meta(S),warnings:z.array(xh).default([]).meta(S),catalog_version:z.string().min(1).max(64).meta(S)}).meta(tt("AnalyticsValidationResult"));var bx=z.object({id:rn.meta(S),type:_m.meta(S),nullable:z.boolean().meta(S)}).meta(tt("AnalyticsResultField")),xx=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:ti.meta(S),source_scope:pa.meta(S),coverage:xx.optional().meta(S),as_of:z.string().datetime().meta(S),freshness_seconds:z.number().int().min(0).meta(S),applied_filters:z.array(op).default([]).meta(S),next_cursor:z.string().max(500).optional().meta(S),warnings:z.array(xh).default([]).meta(S)}).meta(tt("AnalyticsResultMeta")),Sh=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(S),fields:z.array(bx).meta(S),meta:Sx.meta(S)}).meta(tt("AnalyticsResult"));var{Unrestricted:gr}=qe,{Persisted:Q1,Transient:X1}=Ne,{Internal:Px}=Me,eq=ft(Ye.CustomerOperations,{inConfig:false,sdkInput:false,source:jr.Customer}),Ph=t=>({id:t,"x-revturbine-schema-persistence":Q1,"x-revturbine-schema-exposure":Px,...eq}),tq=t=>({id:t,"x-revturbine-schema-persistence":X1,"x-revturbine-schema-exposure":Px}),Th=z.object({environment_id:z.string().min(1).meta({...gr,readOnly:true})}),Tx=z.enum(["viewer","editor"]).meta(tq("AnalyticsViewAccessRole")),Ih=W.merge(pe).merge(Th).merge(le).extend({owner_user_id:z.string().min(1).meta(gr),name:z.string().min(1).max(300).meta(gr),visibility:sp.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(Ph("AnalyticsSavedView")),Ch=W.merge(pe).merge(Th).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:Rl.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(Ph("AnalyticsViewRevision")),Eh=W.merge(pe).merge(Th).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:Tx.meta(gr)}).meta(Ph("AnalyticsViewAccess"));var {Unrestricted:Rn}=qe,{Transient:nq}=Ne,{Internal:rq}=Me,lo=t=>({id:t,"x-revturbine-schema-persistence":nq,"x-revturbine-schema-exposure":rq}),Ix=z.enum(["fixture","generated"]).meta(lo("AnalyticsCatalogSource")),Cx=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(lo("AnalyticsCatalogProvenanceKind")),Ex=z.object({kind:Cx.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(lo("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(Rn),source:Ix.meta(Rn),generated_at:z.string().datetime().optional().meta(Rn),provenance:z.array(Ex).optional().meta(Rn),concepts:z.array(_h).min(1).meta(Rn),dimensions:z.array(hh).min(1).meta(Rn),metrics:z.array(fh).min(1).meta(Rn)}).meta(lo("AnalyticsCatalog"));var kx=z.enum(["concept","dimension","metric","query_family"]).meta(lo("AnalyticsAgentCatalogEntryKind")),Rx=z.object({id:Tr.meta(Rn),kind:kx.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:_m.optional().meta(Rn),format:oo.optional().meta(Rn),capabilities:z.array(ap).optional().meta(Rn),compatible_concepts:z.array(Tr).optional().meta(Rn),compatible_families:z.array(El).optional().meta(Rn),analytical_units:z.array(ti).optional().meta(Rn),source_scope:pa.optional().meta(Rn),example:z.string().max(2e3).optional().meta(Rn),deprecation:gh.optional().meta(Rn)}).meta(lo("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(Rx).max(50).meta(Rn)}).meta(lo("AnalyticsCatalogSearchResult"));var {Unrestricted:hr}=qe,{Transient:lq}=Ne,{Internal:cq}=Me,Al=t=>({id:t,"x-revturbine-schema-persistence":lq,"x-revturbine-schema-exposure":cq}),co=z.string().regex(np),wx=z.strictObject({filter_id:co.meta(hr),value:kl.nullable().meta(hr)}).meta(Al("AnalyticsFilterState"));z.strictObject({view_id:co.meta(hr),revision:z.number().int().min(1).optional().meta(hr),block_ids:z.array(co).min(1).max(24).optional().meta(hr),filter_state:z.array(wx).max(20).optional().meta(hr)}).meta(Al("AnalyticsQueryRequest"));var Ox=z.object({block_id:co.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(Al("AnalyticsBlockError")),qx=z.object({block_id:co.meta(hr),result:Sh.meta(hr)}).meta(Al("AnalyticsBlockResult"));z.object({view_id:co.meta(hr),revision:z.number().int().min(1).meta(hr),catalog_version:z.string().min(1).max(64).meta(hr),results:z.array(qx).meta(hr),errors:z.array(Ox).default([]).meta(hr)}).meta(Al("AnalyticsQueryResponse"));var Mx=z.object({id:co.meta(hr),version:z.number().int().min(1).meta(hr),title:hi.meta(hr),description:hi.optional().meta(hr),block_count:z.number().int().min(1).meta(hr)}).meta(Al("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:K(Ih)}}}},"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:K(Ch)}}}},"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:K(Eh)}}}},"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:K(Mx)}}}},"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:Rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var{Unrestricted:ns}=qe,{Transient:pq}=Ne,{Internal:dq}=Me,mp=t=>({id:t,"x-revturbine-schema-persistence":pq,"x-revturbine-schema-exposure":dq}),Ux=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(mp("ProviderCapability")),ym=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(mp("ProviderAvailability")),As=z.object({provider_handle:at.meta(ns),provider_type:z.string().min(1).max(100).meta(ns),provider_version:z.string().min(1).max(100).meta(ns),contract_version:z.number().int().min(1).meta(ns),generated_at:z.string().datetime().meta(ns),data_watermark:z.string().datetime().optional().meta(ns),source_revision:z.string().min(1).max(200).optional().meta(ns)}).meta(mp("ProviderProvenance")),vm=z.object({provider_handle:at.meta(ns),capability:Ux.meta(ns)}).meta(mp("ProviderBindingRef"));var {Unrestricted:Ve}=qe,{Transient:gq}=Ne,{Internal:hq}=Me,rs=t=>({id:t,"x-revturbine-schema-persistence":gq,"x-revturbine-schema-exposure":hq}),Fx=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(rs("GrowthSignalPoint")),Lx=z.object({metric:Tr.meta(Ve),analytical_unit:ti.meta(Ve),source_scope:pa.meta(Ve),dimensions:z.record(Tr,z.string()).meta(Ve),points:z.array(Fx).meta(Ve),provenance:As.meta(Ve)}).meta(rs("GrowthSignalSeries"));z.object({availability:ym.meta(Ve),series:z.array(Lx).meta(Ve),provenance:As.meta(Ve)}).meta(rs("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(rs("TrendFeatures"));var Nx=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(rs("EvidenceRequirement")),Vx=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(rs("OpportunityInterpretation")),up=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:pa.meta(Ve),interpretation:Vx.meta(Ve)}).meta(rs("OpportunityEvidence"));z.object({required_metrics:z.array(Tr).min(1).meta(Ve),evidence:Nx.meta(Ve)}).meta(rs("DetectorRequirements"));var Rh=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(up).min(1).meta(Ve),hypothesis:z.string().min(1).meta(Ve),confidence:z.number().min(0).max(1).meta(Ve),impact:Rh.optional().meta(Ve),suggested_action:Rh.optional().meta(Ve),suggested_experiment:Rh.optional().meta(Ve)}).meta(rs("OpportunityCandidate"));var {Unrestricted:Ma}=qe,{Transient:bm}=Ne,{External:xm}=Me,Ah=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":bm,"x-revturbine-schema-exposure":xm}),zx=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":bm,"x-revturbine-schema-exposure":xm}),$x=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Ma),surface:Ah.meta(Ma),purpose:z.string().min(1).max(300).meta(Ma),stability:zx.meta(Ma)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":bm,"x-revturbine-schema-exposure":xm}),Kx=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Ma),surface:Ah.meta(Ma),purpose:z.string().min(1).max(300).meta(Ma)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":bm,"x-revturbine-schema-exposure":xm});z.object({version:z.number().int().min(1).meta(Ma),events:z.array($x).min(1).meta(Ma),prefix_families:z.array(Kx).meta(Ma)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":bm,"x-revturbine-schema-exposure":xm});var dp=["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"],Hx=["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"],Gx=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],Yx=["area_viewed","feature_gated"],Bx={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 pp(t,e){return t.map(n=>({name:n,surface:e,purpose:Bx[n].purpose,stability:Bx[n].stability}))}var wh={events:[...pp(dp,"control_plane"),...pp(Yx,"control_plane"),...pp(Hx,"sdk_client"),...pp(Gx,"sdk_client")]};wh.events.map(t=>t.name);wh.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:N,Pii:wl}=qe,{Persisted:Jx,Transient:Gn}=Ne,{Internal:ws,External:Or}=Me,Oh=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),Zx=W.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(wl),session_id:z.string().min(1).optional().meta(wl),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}),Qx=Zx.extend({ingested_at:z.string().datetime().meta(N)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":Jx,"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(wl),session_id:z.string().min(1).optional().meta(wl),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 Xx=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(wl),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:Xx.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 tS=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),nS=z.enum(dp).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});z.object({event_type:nS.meta(N),source:tS.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: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":Gn,"x-revturbine-schema-exposure":ws});var rS=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws}),iS=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":ws}),gp=W.merge(le).merge(pe).extend({event_id:z.string().min(1).meta(N),event_type:z.string().min(1).meta(N),source:rS.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N),status:iS.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":Jx,"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 jq=500,Oq=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),aS=z.object({environment_id:z.string().min(1).meta(N),user_id:z.string().min(1).meta(wl),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:Oq.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(aS).min(1).max(jq).meta(N)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or});var qq=10,oS=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Gn,"x-revturbine-schema-exposure":Or}),lS=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}),cS=z.object({event_type:oS.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:lS.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(cS).min(1).max(qq).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:$g(Qx)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(gp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:_t}=qe,{Persisted:Pm,Transient:Tm}=Ne,{Internal:Ua}=Me,uS=ft(Ye.Playbook,{sdkInput:true}),pS=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),dS=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ua}),qh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ua}),Dh=z.object({name:Wt.meta(_t),handle:at.meta(_t),plan_id:z.string().nullable().optional().meta(_t),segment_id:z.string().nullable().optional().meta(_t),trial_limit_type:qh.default("time").meta(_t),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(_t),grace_period_days:z.number().int().min(0).default(0).meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),require_payment_method:z.boolean().default(false).meta(_t),auto_convert:z.boolean().default(true).meta(_t),convert_to_plan_id:z.string().optional().meta(_t),fallback_plan_id:z.string().optional().meta(_t),limit_per_customer:z.number().int().min(1).default(1).meta(_t),is_active:z.boolean().default(true).meta(_t),metadata:Kt.meta(_t)}),mo=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({..._t,readOnly:true})}).merge(Dh).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ua,...uS,...Fn()}),Mq=bn("FreeTrialRuleAnchor"),gS=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ua}),Mh=z.object({name:Wt.meta(_t),handle:at.meta(_t),premium_plan_id:z.string().min(1).meta(_t),fallback_plan_id:z.string().min(1).meta(_t),segment_id:z.string().nullable().optional().meta(_t),trial_limit_type:qh.default("time").meta(_t),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),start_policy:gS.default("signup").meta(_t),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(_t),entitlements_during_trial:z.array(z.string()).default([]).meta(_t),is_active:z.boolean().default(true).meta(_t),metadata:Kt.meta(_t)}),uo=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({..._t,readOnly:true})}).merge(Mh).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ua,...uS,...Fn()}),Uq=bn("ReverseTrialRuleAnchor"),Uh=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ua}),Fh=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ua}),po=W.merge(le).merge(pe).extend({trial_limit_policy:Uh.default("1_per_lifetime").meta(_t),eligibility_scope:Fh.default("per_customer").meta(_t)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ua,...pS}),go=W.merge(le).merge(pe).extend({trial_limit_policy:Uh.default("1_per_lifetime").meta(_t),eligibility_scope:Fh.default("per_customer").meta(_t)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ua,...pS}),Sm=W.merge(le).merge(pe).extend({customer_id:z.string().min(1).meta(_t),rule_id:z.string().min(1).meta(_t),rule_type:z.enum(["free_trial","reverse_trial"]).meta(_t),plan_id:z.string().min(1).meta(_t),status:dS.default("active").meta(_t),started_at:z.string().datetime().meta({..._t,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(_t),trial_limit_type:qh.default("time").meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),converted_at:nn.meta(_t),cancelled_at:nn.meta(_t),metadata:Kt.meta(_t)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ua});({"/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:K(Mq)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(mo)}}}},"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:mo}}}},"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:mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mo}}}},"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:K(Uq)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(uo)}}}},"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:uo}}}},"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:uo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uo}}}},"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:K(po)}}}},"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:po}}}},"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: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: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:K(go)}}}},"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:go}}}},"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:go.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:go}}}},"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:K(Sm)}}}},"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:Sm}}}},"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:Sm}}}},"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:Sm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:k,Financial:hS}=qe,{Persisted:js,Transient:Nh}=Ne,{Internal:da}=Me,hp=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),fS=ft(Ye.CustomerOperations,{sdkInput:false}),_S=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Nh,"x-revturbine-schema-exposure":da}),yS=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Nh,"x-revturbine-schema-exposure":da}),Lq=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da}),vS=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":da,...hp}),bS=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(vS).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da,...hp}),Nq=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),Vq=z.object({minimum_revenue_effect:z.number().min(0)}).strict(),Bq=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()})]),zq=z.object({method:z.literal("holm"),family_scope:z.literal("primary_and_guardrails_separate")}),Vh=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:ti,sequential:Nq.optional(),multiple_comparisons:zq.optional(),variance_reduction:Bq.optional(),practical_significance:Vq.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da,...hp});var Cr=t=>({id:t,"x-revturbine-schema-persistence":Nh,"x-revturbine-schema-exposure":da}),fp=z.object({variant_id:z.string().min(1).meta(k)}),$q=z.object({n:z.number().int().positive().meta(k),sum_numerator:z.number().meta(k),sum_denominator:z.number().positive().meta(k),sum_covariate:z.number().optional().meta(k)}).meta(Cr("ExperimentClusterAggregate")),Kq=z.object({assignment_unit:ti.meta(k),clusters:z.array($q).min(2).meta(k)}).meta(Cr("ExperimentClusteredSufficientStatistics")),_p={clustered:Kq.optional().meta(k)},Hq=fp.extend({statistic_type:z.literal("mean").meta(k),n:z.number().int().min(0).meta(k),sum_y:z.number().meta(k),sum_y2:z.number().min(0).meta(k),..._p}).meta(Cr("MeanVariantStatisticalSummary")),Gq=fp.extend({statistic_type:z.literal("binary").meta(k),n:z.number().int().min(0).meta(k),successes:z.number().int().min(0).meta(k),..._p}).meta(Cr("BinaryVariantStatisticalSummary")),Yq=fp.extend({statistic_type:z.literal("ratio").meta(k),n:z.number().int().min(0).meta(k),sum_numerator:z.number().meta(k),sum_denominator:z.number().meta(k),sum_numerator2:z.number().min(0).meta(k),sum_denominator2:z.number().min(0).meta(k),sum_cross:z.number().meta(k),..._p}).meta(Cr("RatioVariantStatisticalSummary")),Wq=fp.extend({statistic_type:z.literal("covariance").meta(k),n:z.number().int().min(0).meta(k),sum_x:z.number().meta(k),sum_y:z.number().meta(k),sum_x2:z.number().min(0).meta(k),sum_y2:z.number().min(0).meta(k),sum_xy:z.number().meta(k),..._p}).meta(Cr("CovarianceVariantStatisticalSummary")),xS=z.discriminatedUnion("statistic_type",[Hq,Gq,Yq,Wq]).meta(Cr("VariantStatisticalSummary")),SS=z.object({start:z.string().datetime().meta(k),end:z.string().datetime().meta(k)}).meta(Cr("ExperimentObservationWindow")),Jq=z.object({metric:Tr.meta(k),observation_window:SS.meta(k)}).meta(Cr("ExperimentCovariateProvenance")),PS=z.object({schema_version:z.number().int().min(1).meta(k),experiment_handle:at.meta(k),experiment_version:z.number().int().min(1).meta(k),metric:Tr.meta(k),analysis_unit:ti.meta(k),variants:z.array(xS).min(1).meta(k),observation_window:SS.meta(k),covariate:Jq.optional().meta(k),data_watermark:z.string().datetime().meta(k),source_scope:pa.meta(k),provider:As.meta(k)}).meta(Cr("ExperimentEvidence")),Zq=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(k),p_value:z.number().min(0).max(1).optional().meta(k),chi_squared:z.number().min(0).optional().meta(k),variants:z.array(z.object({variant_id:z.string().min(1).meta(k),observed_count:z.number().int().min(0).meta(k),expected_count:z.number().min(0).meta(k)})).default([]).meta(k),reason:z.string().min(1).max(500).optional().meta(k)}).meta(Cr("ExperimentSampleRatioMismatch")),TS=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(k),sample_ratio_mismatch:Zq.optional().meta(k),issues:z.array(z.object({code:z.string().min(1).max(100).meta(k),message:z.string().min(1).max(500).meta(k)})).default([]).meta(k)}).meta(Cr("ExperimentHealth")),Qq=z.object({lower:z.number().meta(k),upper:z.number().meta(k),level:z.number().min(0).max(1).meta(k)}).meta(Cr("ExperimentConfidenceInterval")),Xq=z.object({method:z.literal("always_valid").meta(k),status:z.enum(["continue","significant_positive","significant_negative"]).meta(k),look_count:z.number().int().min(1).meta(k),spending_state:z.object({alpha:z.number().positive().lt(1).meta(k),look_alpha:z.number().positive().lt(1).meta(k),cumulative_alpha_spent:z.number().positive().lt(1).meta(k),alpha_remaining:z.number().positive().lt(1).meta(k),unadjusted_p_value:z.number().min(0).max(1).optional().meta(k)}).meta(k)}).meta(Cr("ExperimentSequentialResult")),eD=z.object({minimum_revenue_effect:z.number().min(0).meta(hS),revenue_effect:z.number().meta(hS),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(k)}).meta(Cr("ExperimentPracticalSignificanceResult")),tD=z.object({method:z.literal("holm").meta(k),family:z.enum(["primary","guardrails"]).meta(k),family_size:z.number().int().positive().meta(k),unadjusted_p_value:z.number().min(0).max(1).meta(k)}).meta(Cr("ExperimentMultipleComparisonResult")),IS=z.object({metric:Tr.meta(k),control_variant_id:z.string().min(1).meta(k),variant_id:z.string().min(1).meta(k),estimator:z.string().min(1).max(100).meta(k),estimator_version:z.string().min(1).max(100).meta(k),estimate:z.number().meta(k),control_estimate:z.number().meta(k),absolute_effect:z.number().meta(k),relative_effect:z.number().optional().meta(k),standard_error:z.number().min(0).optional().meta(k),confidence_interval:Qq.optional().meta(k),p_value:z.number().min(0).max(1).optional().meta(k),multiple_comparison:tD.optional().meta(k),probability_positive:z.number().min(0).max(1).optional().meta(k),expected_loss:z.number().min(0).optional().meta(k),sequential:Xq.optional().meta(k),practical_significance:eD.optional().meta(k),sample_size:z.number().int().min(0).optional().meta(k)}).meta(Cr("ExperimentMetricResult")),nD=z.object({metric:Tr.meta(k),summary_schema_version:z.number().int().min(1).meta(k),data_watermark:z.string().datetime().meta(k),provider:As.meta(k)}).meta(Cr("ExperimentEvidenceProvenance")),CS=z.object({provider:As.meta(k),evidence:z.array(nD).min(1).meta(k)}).meta(Cr("AnalysisProvenance")),ES=z.object({schema_version:z.number().int().min(1).meta(k),engine:z.string().min(1).max(100).meta(k),engine_version:z.string().min(1).max(100).meta(k),methodology:z.string().min(1).max(100).meta(k),metrics:z.array(IS).meta(k),health:TS.meta(k),provenance:CS.meta(k)}).meta(Cr("ExperimentAnalysisResult")),kS=W.merge(pe).extend({created_at:z.string().datetime().meta({...k,readOnly:true}),experiment_handle:at.meta(k),experiment_version:z.number().int().min(1).meta(k),metric_semantic_id:Tr.meta(k),metric_catalog_version:z.string().min(1).max(64).meta(k),endpoint_version:z.string().min(1).max(100).meta(k),query_hash:z.string().min(1).max(128).meta(k),evidence_provider_handle:at.meta(k),evidence_provider_type:z.string().min(1).max(100).meta(k),evidence_provider_version:z.string().min(1).max(100).meta(k),evidence_provider_contract_version:z.number().int().min(1).meta(k),summary_schema_version:z.number().int().min(1).meta(k),observation_window_start:z.string().datetime().meta(k),observation_window_end:z.string().datetime().meta(k),data_watermark:z.string().datetime().meta(k)}),RS=kS.extend({analysis_unit:ti.meta(k),evidence:PS.meta(k)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da,...fS}),AS=kS.extend({evidence_snapshot_id:z.string().min(1).meta(k),analysis_provider_handle:at.meta(k),analysis_provider_type:z.string().min(1).max(100).meta(k),analysis_provider_version:z.string().min(1).max(100).meta(k),analysis_provider_contract_version:z.number().int().min(1).meta(k),engine:z.string().min(1).max(100).meta(k),engine_version:z.string().min(1).max(100).meta(k),estimator:z.string().min(1).max(100).meta(k),estimator_version:z.string().min(1).max(100).meta(k),analysis_config:Vh.meta(k),result:ES.meta(k)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da,...fS}),Fa=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...k,readOnly:true}),name:Wt.meta(k),handle:at.meta(k),description:z.string().max(1e3).optional().meta(k),experiment_type:yS.meta(k),status:_S.default("draft").meta(k),target_resource_id:z.string().optional().meta(k),target_segments:z.array(z.string()).optional().meta(k),variants:z.array(bS).min(2).meta(k),primary_metric:Tr.meta(k),guardrail_metrics:z.array(Tr).optional().meta(k),assignment_unit:ti.optional().meta(k),assignment_provider_binding:vm.extend({capability:z.literal("experiment_assignment"),allocation_mode:Lq}).optional().meta(k),evidence_provider_binding:vm.extend({capability:z.literal("experiment_evidence")}).optional().meta(k),analysis_provider_binding:vm.extend({capability:z.literal("experiment_analysis")}).optional().meta(k),analysis_config:Vh.optional().meta(k),metric_threshold:z.number().default(.05).meta(k),secondary_metrics:z.array(Tr).default([]).meta(k),traffic_allocation:z.number().min(0).max(1).default(1).meta(k),started_at:nn.meta(k),ended_at:nn.meta(k),confidence_threshold:z.number().min(0).max(1).default(.95).meta(k),winning_variant_id:z.string().nullable().default(null).meta(k),metadata:Kt.meta(k)}).meta({id:"Experiment","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da,...hp,...Fn()}),rD=bn("ExperimentAnchor"),wS=fl,Lh=W.merge(le).merge(pe).extend({experiment_id:z.string().optional().meta(k),resource_type:z.string().min(1).meta(k),resource_id:z.string().min(1).meta(k),severity:wS.default("info").meta(k),title:z.string().min(1).max(300).meta(k),description:z.string().max(2e3).meta(k),suggested_action:z.string().max(1e3).optional().meta(k),estimated_impact:z.number().optional().meta(k),detector_id:z.string().min(1).nullable().optional().meta(k),detector_version:z.number().int().min(1).nullable().optional().meta(k),opportunity_type:z.string().min(1).nullable().optional().meta(k),evidence:z.array(up).nullable().optional().meta(k),hypothesis:z.string().min(1).nullable().optional().meta(k),confidence:z.number().min(0).max(1).nullable().optional().meta(k),is_dismissed:z.boolean().default(false).meta(k),metadata:Kt.meta(k)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":da});({"/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:K(RS)}}}},"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:K(AS)}}}},"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:K(rD)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Fa)}}}},"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:Fa}}}},"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:Fa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fa}}}},"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:Fa}}}},"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:Fa}}}},"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:Fa}}}},"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:K(Lh)}}}},"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:Lh}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Lr,Financial:jS}=qe,{Persisted:aD,Transient:OS}=Ne,{Internal:Bh}=Me,sD=ft(Ye.Playbook,{sdkInput:true}),qS=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":OS,"x-revturbine-schema-exposure":Bh}),DS=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":OS,"x-revturbine-schema-exposure":Bh}),is=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Lr,readOnly:true}),name:Wt.meta(Lr),handle:at.meta(Lr),description:z.string().max(1e3).optional().meta(Lr),rt_status:qS.default("draft").meta(Lr),discount_type:DS.meta(Lr),discount_value:z.number().min(0).meta(jS),currency:z.string().length(3).default("USD").meta(jS),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:Kt.meta(Lr)}).meta({id:"Promotion","x-revturbine-schema-persistence":aD,"x-revturbine-schema-exposure":Bh,...sD,...Fn()}),oD=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:K(oD)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(is)}}}},"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:is}}}},"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:is.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:is}}}},"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:is}}}},"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:is}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:g}=qe,{Persisted:Fl,Transient:Pt}=Ne,{Internal:Xi,External:Nt}=Me,yt=ft(Ye.Playbook,{sdkInput:true}),MS=ft(Ye.Playbook,{sdkInput:false}),Ul=ft(Ye.Playbook,{inConfig:false,sdkInput:false}),US=ft(Ye.Playbook,{inConfig:false,sdkInput:true}),jl=ft(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant}),zh=ft(Ye.Playbook,{inConfig:false,sdkInput:true,source:jr.Runtime}),$h=ft(Ye.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),cD=ft(Ye.Billing,{sdkInput:false}),mD=ft(Ye.Metering,{sdkInput:false}),uD=ft(Ye.Branding,{inConfig:true,sdkInput:true}),pD=ft(Ye.Branding,{sdkInput:false}),FS="1.0.0",Ol=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:Wt.meta(g),handle:at.meta(g),description:Ci.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":Fl,"x-revturbine-schema-exposure":Xi,...Ul,...Fn()}),dD=bn("SeatTypeAnchor"),ql=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:at.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":Fl,"x-revturbine-schema-exposure":Xi,...Ul,...Fn()}),gD=bn("PersonalizationTokenAnchor"),LS=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Xi}),yp=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({handle:at.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:LS.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":Fl,"x-revturbine-schema-exposure":Xi,...cD,...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":Pt,"x-revturbine-schema-exposure":Nt,...pD});var Dl=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({handle:at.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":Fl,"x-revturbine-schema-exposure":Xi,...mD,...Pr()}),Kh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Xi}),Ml=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:at.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:Kh.default("warn").meta(g),hard_limit_action:Kh.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":Fl,"x-revturbine-schema-exposure":Xi,...US,...Pr()}),fD=bn("UsageEnforcementSettingsAnchor"),NS=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":Pt,"x-revturbine-schema-exposure":Xi}),VS=z.object({id:z.string().min(1).meta(g),group:z.array(NS).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":Pt,"x-revturbine-schema-exposure":Xi}),BS=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Xi}),Gh=z.object({capRules:z.array(VS).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:BS.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Xi}),vp=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:at.meta({...g,readOnly:true}),global_frequency_cap:Gh.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":Fl,"x-revturbine-schema-exposure":Xi,...US,...Pr()}),_D=bn("PlacementSettingsAnchor"),Yh=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":Pt,"x-revturbine-schema-exposure":Nt}),Wh=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Yh).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_handle:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),zS=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:ja.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),$S=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:ja.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),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),currency:Is.meta(g),pricing_model:no.meta(g),visibility:ja.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:vl.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),HS=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),currency:Is.meta(g),pricing_model:no.meta(g),visibility:ja.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:vl.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),GS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),YS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),WS=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Gh.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),JS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),ZS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),QS=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:hl.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),XS=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(Yu).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:hl.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:bl.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),eP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),tP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),nP=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":Pt,"x-revturbine-schema-exposure":Nt}),rP=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(nP).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),Jh=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":Pt,"x-revturbine-schema-exposure":Nt}),iP=z.object({name:z.string().min(1).meta(g),action_type:Jh.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),aP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),sP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),Hh=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":Pt,"x-revturbine-schema-exposure":Nt}),oP=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:Hh.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Hh})).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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),lP=z.object({label:z.string().meta(g),path:_l.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),Zh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(lP).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),Qh=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":Pt,"x-revturbine-schema-exposure":Nt}),cP=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":Pt,"x-revturbine-schema-exposure":Nt}),Xh=z.object({max_per_period:cP.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),mP=z.object({id:z.string().min(1).meta(g),target:Qh.meta(g),surfaces:z.array(Zh).meta(g),caps:Xh.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":Pt,"x-revturbine-schema-exposure":Nt}),uP=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":Pt,"x-revturbine-schema-exposure":Nt}),pP=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),ef=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:pP.meta(g),trigger:uP.meta(g),payloads:z.array(mP).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),dP=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:Qh.meta(g),caps:Xh.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(Zh).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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),yD=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),vD=W.merge(Dh).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...Ul}),bD=W.merge(Mh).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...Ul}),gP=z.object({plans:z.array(zS).meta({...g,...yt}),addons:z.array($S).optional().meta({...g,...yt}),entitlements:z.array(QS).meta({...g,...yt}),entitlement_rules:z.array(XS).meta({...g,...yt}),segments:z.array(Wh).meta({...g,...yt}),content_ui_paths:z.array(iP).meta({...g,...yt}),slot_configs:z.array(eP).optional().meta({...g,...yt,...lm({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,...yt,...lm({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,...uD,...lm({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(tP).optional().meta({...g,...yt}),message_blocks:z.array(oP).optional().meta({...g,...yt}),placement_payloads:z.array(dP).optional().meta({...g,...yt}),placements:z.array(ef).optional().meta({...g,...yt}),content_promotions:z.array(aP).optional().meta({...g,...yt}),personalization_tokens:z.array(sP).optional().meta({...g,...yt}),surface_templates:z.array(rP).optional().meta({...g,...yt}),free_trial_rules:z.array(vD).optional().meta({...g,...MS}),reverse_trial_rules:z.array(bD).optional().meta({...g,...MS}),plan_variations:z.array(KS).optional().meta({...g,...yt}),addon_variations:z.array(HS).optional().meta({...g,...yt}),extension_rules:z.array(yD).optional().meta({...g,...yt}),seat_types:z.array(GS).optional().meta({...g,...yt}),enforcement_defaults:z.array(YS).optional().meta({...g,...yt}),placement_settings:z.array(WS).optional().meta({...g,...yt}),segment_dimensions:z.array(JS).optional().meta({...g,...yt}),meter_bindings:z.array(ZS).optional().meta({...g,...yt}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...Ul}),signal_catalog:z.object({}).strict().optional().meta({...g,...Ul})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),hP=z.object({artifact_type:z.literal("playbook").meta({...g,...jl,readOnly:true}),format_version:z.literal(FS).meta({...g,...jl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...jl}),playbook_version_id:z.string().nullable().default(null).meta({...g,...zh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...$h,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...$h,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...$h,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...zh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...jl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...jl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...jl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...zh}),bp=hP.extend(gP.shape).meta({"x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});function xD(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fP(t){if(!xD(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(fP,bp).meta({id:"Playbook","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});z.preprocess(fP,bp.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});({"/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:K(dD)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Ol)}}}},"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:er(Ol)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ol}}}},"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:Ol.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ol}}}},"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:K(gD)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(ql)}}}},"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:er(ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ql}}}},"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:ql.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ql}}}},"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(yp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:yp}}}},"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:K(Dl)}}}},"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:er(Dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dl}}}},"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:Dl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Dl}}}},"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:K(fD)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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:K(Ml)}}}},"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:er(Ml)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ml}}}},"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:Ml.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ml}}}},"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:K(_D)}}},default:{description:"Error response",content:{"application/json":{schema:$e}}}},"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(vp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:vp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:as}=qe,{Persisted:_P}=Ne,{Internal:yP}=Me,vP=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":_P,"x-revturbine-schema-exposure":yP}),tf=W.merge(le).merge(pe).extend({action:vP.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:Kt.meta(as)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":_P,"x-revturbine-schema-exposure":yP});({"/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:K(tf)}}}},"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:tf}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:xp}=qe,{Persisted:CD,Transient:ED}=Ne,{Internal:bP}=Me,xP=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":ED,"x-revturbine-schema-exposure":bP}),os=W.merge(le).extend({name:Wt.meta(xp),handle:at.meta(xp),status:xP.default("active").meta(xp),metadata:Kt.meta(xp)}).meta({id:"Tenant","x-revturbine-schema-persistence":CD,"x-revturbine-schema-exposure":bP});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:H},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:K(os)}}}},"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:os}}}},"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:os.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:os}}}},"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:os}}}},"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:os}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:ea}=qe,{Persisted:RD,Transient:SP}=Ne,{Internal:nf}=Me,PP=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":SP,"x-revturbine-schema-exposure":nf}),ho=W.merge(le).merge(pe).extend({name:Wt.meta(ea),handle:at.meta(ea),description:Ci.meta(ea),is_production:z.boolean().default(false).meta({...ea,readOnly:true}),status:PP.default("active").meta(ea),cloned_from_environment_id:z.string().nullable().default(null).meta({...ea,readOnly:true}),cloned_at:nn.meta({...ea,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...ea,readOnly:true}),requires_approval:z.boolean().default(false).meta(ea),auto_deploy_on_approval:z.boolean().default(false).meta(ea),created_by:z.string().optional().meta(ea),metadata:Kt.meta(ea)}).meta({id:"Environment","x-revturbine-schema-persistence":RD,"x-revturbine-schema-exposure":nf}),TP=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":SP,"x-revturbine-schema-exposure":nf});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:H},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:K(ho)}}}},"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:ho}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:ho}}}},"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:ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ho}}}},"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:ho}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:TP}}},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:$e}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:st,Pii:Im}=qe,{Transient:La,Persisted:wD}=Ne,{External:ga}=Me,IP=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga});z.object({superseded_output_id:z.string().min(1).meta(st),superseded_by:z.string().min(1).meta(st),reason:IP.meta(st)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":wD,"x-revturbine-schema-exposure":ga,...qe.Operational});var CP=z.enum(sm).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga}),rf=z.object({output_id:z.string().meta(st),category:z.string().meta(st),surface:z.object({template:z.string().optional().meta(st),type:am.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":La,"x-revturbine-schema-exposure":ga}),EP=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:rf.optional().meta(st)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga});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":La,"x-revturbine-schema-exposure":ga});var kP=z.object({id:z.string().meta(Im),anonymous_id:z.string().optional().meta(st),traits:z.record(z.string(),z.unknown()).optional().meta(Im)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga}),RP=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:rf.optional().meta(st),reason_codes:z.array(z.string()).optional().meta(st)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga}),AP=EP,wP=pm.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga}),jP=z.object({segments:z.array(z.string()).optional().meta(st),traits:z.record(z.string(),z.unknown()).optional().meta(Im),usage_balances:z.record(z.string(),z.number()).optional().meta(st)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga});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:kP.meta(Im),decisions:z.array(RP).meta(st),entitlements:z.record(z.string(),AP).optional().meta(st),theme:z.record(z.string(),z.unknown()).optional().meta(st),trial_status:wP.optional().meta(st),user_context:jP.optional().meta(Im)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":ga});var {Unrestricted:an}=qe,{Persisted:DD,Transient:Sp}=Ne,{Internal:Cm}=Me,OP=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Sp,"x-revturbine-schema-exposure":Cm}),Ll=W.merge(le).merge(pe).extend({environment_id:z.string().min(1).meta(an),name:Wt.meta(an),description:z.string().max(2e3).optional().meta(an),status:OP.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:Kt.meta(an)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":DD,"x-revturbine-schema-exposure":Cm}),af=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":Sp,"x-revturbine-schema-exposure":Cm}),qP=z.object({playbook_version_id:z.string().meta(an),entries:z.array(af).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":Sp,"x-revturbine-schema-exposure":Cm}),DP=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":Sp,"x-revturbine-schema-exposure":Cm});({"/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:Ll}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:Ll}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:Ll}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:DP}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:$e}}}},"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:Ll}}}},"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:qP}}}},"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:K(af)}}}},"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:Ll}}},default:{description:"Error",content:{"application/json":{schema:$e}}}},"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:$e}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Je,Pii:UD}=qe,{Persisted:ta}=Ne,{Internal:na}=Me,FD=ft(Ye.CustomerOperations,{sdkInput:false,source:jr.Customer}),MP=365,Os=W.merge(le).merge(pe).extend({provider_handle:at.meta(Je),provider_type:at.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:ym.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":ta,"x-revturbine-schema-exposure":na,...FD}),UP=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),Em=W.merge(le).merge(pe).extend({name:Wt.meta(Je),key_hash:z.string().min(1).meta({...UD,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:UP.default("active").meta(Je),last_used_at:nn.meta({...Je,readOnly:true}),expires_at:nn.meta(Je)}).meta({id:"ApiKey","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),FP=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),qs=W.merge(le).merge(pe).extend({key:z.string().min(1).max(100).meta(Je),value_type:FP.default("boolean").meta(Je),value:z.string().max(4e3).default("false").meta(Je),description:Ci.meta(Je),enabled:z.boolean().default(true).meta(Je)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),Pp=W.merge(le).merge(pe).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(om.window_days).meta(Je),activity_high_min:z.number().int().min(1).default(om.high_min).meta(Je),activity_medium_min:z.number().int().min(1).default(om.medium_min).meta(Je),activity_low_min:z.number().int().min(1).default(om.low_min).meta(Je),analytics_retention_days:z.number().int().min(1).default(MP).meta(Je)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),Tp=W.merge(le).merge(pe).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":ta,"x-revturbine-schema-exposure":na}),km=W.merge(le).merge(pe).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":ta,"x-revturbine-schema-exposure":na}),LP=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),NP=W.merge(pe).extend({environment_id:z.string().min(1).default("production").meta(Je),actor_type:LP.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":ta,"x-revturbine-schema-exposure":na}),VP=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":ta,"x-revturbine-schema-exposure":na}),Rm=W.merge(le).merge(pe).merge(Lt).merge(Bt).extend({handle:at.meta({...Je,readOnly:true}),identifier:z.string().min(1).max(200).meta(Je),identifier_type:VP.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":ta,"x-revturbine-schema-exposure":na,...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:K(Em)}}}},"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:er(Em)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Em}}}},"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:Em}}}},"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:K(qs)}}}},"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:er(qs)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:qs}}}},"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:qs}}}},"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(qs).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:qs}}}},"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:qs}}}},"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(Pp).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Pp}}}},"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(Tp).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Tp}}}},"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:K(km)}}}},"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:km}}}},"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(km).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:km}}}},"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:K(NP)}}}},"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:K(Rm)}}}},"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:er(Rm)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Rm}}}},"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:Rm}}}},"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:K(Os)}}}},"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:er(Os)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:Os}}}},"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:Os}}}},"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(Os).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:Os}}}},"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:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ve,Pii:ri}=qe,{Persisted:fi,Transient:sf}=Ne,{Internal:Nr}=Me,BP=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({name:Wt.meta(ve),email:z.string().email().meta(ri),email_verified:z.boolean().default(false).meta(ve),image:z.string().url().nullable().default(null).meta(ri),role:BP.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":fi,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({expires_at:z.string().datetime().meta(ve),token:z.string().min(1).meta({...ri,readOnly:true}),ip_address:z.string().nullable().default(null).meta(ri),user_agent:z.string().nullable().default(null).meta(ri),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":fi,"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({...ri,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...ri,readOnly:true}),id_token:z.string().nullable().default(null).meta({...ri,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({...ri,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});W.merge(le).extend({identifier:z.string().min(1).meta(ri),value:z.string().min(1).meta({...ri,readOnly:true}),expires_at:z.string().datetime().meta(ve)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});W.extend({secret:z.string().min(1).meta({...ri,readOnly:true}),backup_codes:z.string().min(1).meta({...ri,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":fi,"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":fi,"x-revturbine-schema-exposure":Nr});var of=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});var lf=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":sf,"x-revturbine-schema-exposure":Nr}),cf=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":sf,"x-revturbine-schema-exposure":Nr});z.object({resource:lf,action:cf}).meta({id:"Permission","x-revturbine-schema-persistence":sf,"x-revturbine-schema-exposure":Nr});var GD=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],YD=["plans","entitlements","placements","targeting","content","experiments"],WD=["plans","entitlements","placements","targeting","content","experiments"],JD=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],ZD=["read","create","update","delete","publish","approve","invite","manage_roles"];function Ip(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var QD=Ip(GD,["read"]),XD=[...QD,...Ip(YD,["create","update"])];[...XD,...Ip(WD,["publish","approve","delete"])];Ip(JD,ZD);var eM=lf.options.flatMap(t=>cf.options.map(e=>`${t}:${e}`));z.enum(eM).meta({id:"McpTokenScope","x-revturbine-schema-persistence":fi,"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:of.default("viewer").meta(ve),created_at:z.string().datetime().meta({...ve,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});var zP=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Nr});W.extend({organization_id:z.string().min(1).meta({...ve,readOnly:true}),email:z.string().email().meta(ri),role:of.nullable().default(null).meta(ve),status:zP.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":fi,"x-revturbine-schema-exposure":Nr});W.extend({name:z.string().max(200).nullable().default(null).meta(ve),public_key:z.string().min(1).meta({...ri,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":fi,"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({...ri,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":fi,"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":fi,"x-revturbine-schema-exposure":Nr});var lM=16,cM=11;async function HP(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 $P(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var Nl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function mM(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new Nl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!$P(n))throw new Nl("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(!$P(r)||r>n)throw new Nl("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 GP(t,e){let n=lM,r=cM,i=mM(t);if(i.minReadableSchemaVersion>n)throw new Nl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${i.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(i.schemaVersion>n)throw new Nl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);if(i.schemaVersion<r)throw new Nl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);return i}var YP=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),KP=z.string().datetime({offset:true}),uM=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),mf=z.object({url:z.string().min(1),sha256:YP,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),pM=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:uM}).strict(),dM=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:dM,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:mf,standby:mf.optional(),previous:mf.optional(),not_before:KP,expires_at:KP,rollback_to:YP.optional(),signature:pM.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 gM=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]);function hM(t){let e=t.componentType??t.surfaceType;if(!e)throw new Error("[RevTurbine] Placement component registration requires componentType.");return e}var Vl=class{constructor(){w(this,"types",new Map);w(this,"componentIndex",new Map);}register(e){let n=hM(e),r=this.types.get(e.id);r&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousComponentType:r.componentType,nextComponentType:n});let i={...e,componentType:n,priority:e.priority??0,renderedFields:e.renderedFields??[],accepts:e.accepts??(s=>s.surface.type===n)};this.types.set(i.id,i);let a=this.componentIndex.get(i.componentType)??[];a.includes(i.id)||(a.push(i.id),this.componentIndex.set(i.componentType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.componentIndex.get(n.componentType);if(r){let i=r.filter(a=>a!==e);i.length>0?this.componentIndex.set(n.componentType,i):this.componentIndex.delete(n.componentType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let i=this.types.get(e.surface.template);if(i)return i;let a=vg[e.surface.template];if(a&&a!==e.surface.type)return}let r=(this.componentIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,a)=>a.priority-i.priority);for(let i of r)if(i.accepts?.(e))return i;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listByComponentType(e){return (this.componentIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}listBySurfaceType(e){return this.listByComponentType(e)}has(e){return this.types.has(e)}};function WP(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=a=>{if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"&&a.trim().length>0){let s=Number(a);if(Number.isFinite(s))return s}},i=a=>{let s="_usage_remaining";if(a==="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(!a.endsWith(s))return;let u=a.slice(0,-s.length);if(!u)return;let _=r(e[`${u}_usage_current`]),C=r(e[`${u}_usage_limit`]);if(!(_===void 0||C===void 0))return Math.max(0,C-_)};return t.replace(/\{\{(\w+)\}\}/g,(a,s)=>{let u=n[s]??s,_=e[u];if(_!=null)return String(_);let C=i(u);return C!=null?String(C):`{{${s}}}`})}function fM(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=WP(i,e):n[r]=i;return n}function _M(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,i]of Object.entries(t))gM.has(r)||(n[r]=i);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 yM(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 Am=null,uf=null;function ZP(t){}function vM(){return Am||(Am=new Vl,uf),Am}function bM(){Am=null;}var df=class{constructor(){w(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();}},pf=null;function gf(){return pf||(pf=new df),pf}function QP(t,e=gf()){let n=new Map;for(let[r,i]of Object.entries(t)){if(e.has(r))continue;let a=(s,u)=>{let _=u.placement.cta_path??u.placement.ui_path??{};Promise.resolve().then(()=>i(_)).catch(C=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,C);});};e.register(r,a),n.set(r,a);}return ()=>{for(let[r,i]of n)e.get(r)===i&&e.unregister(r);}}function XP(t,e=gf()){if(e.has("snooze"))return ()=>{};let n=(r,i)=>{let a=i.placement,s=typeof a.remind_later_minutes=="number"?a.remind_later_minutes:void 0;t(i.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}function eT(t,e,n=gf()){let r=new Map;for(let[i,a]of Object.entries(t)){if(n.has(i))continue;let s=(u,_)=>{let C={placement:_.placement,actionType:i,params:u.params??{}},I=async(R,O)=>{try{await e.trackResult(C,R,O);}catch(A){console.error(`[RevTurbine] serverActions.${i} telemetry failed:`,A);}};(async()=>{let R;try{R=await a(C);}catch(O){let A=O instanceof Error?O:new Error(String(O));console.error(`[RevTurbine] serverActions.${i} failed:`,A),await I(false,A);return}if(!R||R.success!==true){console.error(`[RevTurbine] serverActions.${i} reported failure.`),await I(false);return}R.userContext&&e.applyUserContext(R.userContext),await I(true);})();};n.register(i,s),r.set(i,s);}return ()=>{for(let[i,a]of r)n.get(i)===a&&n.unregister(i);}}var wm={recommended_plan_handle:"",recommended_plan_name:""};function tT(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:i}=t;if(i.length===0)return wm;if(e==="custom"){let u=n??"";if(u===""||u===r)return wm;let _=i.find(C=>C.unique_handle===u);return _?{recommended_plan_handle:_.unique_handle,recommended_plan_name:_.name}:wm}if(r==="")return wm;let a=sd(r,i);if(a===null)return wm;let s=i.find(u=>u.unique_handle===a);return {recommended_plan_handle:a,recommended_plan_name:s?.name??a}}var hf="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Ep=hf.length,xM=Ep-1,SM=10,Cp=16;function PM(t){let e=t,n="";for(let r=0;r<SM;r+=1){let i=e%Ep;n=hf[i]+n,e=Math.floor(e/Ep);}return n}function nT(){let t=new Uint8Array(Cp);crypto.getRandomValues(t);let e=new Array(Cp);for(let n=0;n<Cp;n+=1)e[n]=t[n]%Ep;return e}function TM(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<xM)return t[e]+=1,true;t[e]=0;}return false}function rT(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Cp?TM(e)||(t+=1,e=nT()):(t=n,e=nT());let r=PM(t);for(let i=0;i<e.length;i+=1)r+=hf[e[i]];return r}}}var ff=rT();var IM=new Set([408,429,500,502,503,504]);function CM(t){return new Promise(e=>setTimeout(e,t))}async function _f(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??CM,a;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(!IM.has(u.status))return {delivered:!1,status:u.status,attempts:s+1};a=new Error(`ingest_status_${u.status}`);}catch(u){a=u instanceof Error?u:new Error(String(u));}s<n&&await i(r*(s+1));}return {delivered:false,error:a,attempts:n+1}}function yf(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function iT(){let t=typeof IntersectionObserver<"u",e=new Map;function n(i,a,s,u){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),i.io.unobserve(a),i.tracked.delete(a),s.onExposed(u));}function r(i,a){let s=`${i}|${a}`,u=e.get(s);if(u)return u;let _=new Map,I={io:new IntersectionObserver(R=>{let O=e.get(s);if(O)for(let A of R){let j=_.get(A.target);!j||j.fired||(A.isIntersecting?j.minVisibleMs<=0?n(O,A.target,j,"viewport"):j.timer===null&&(j.timer=setTimeout(()=>n(O,A.target,j,"viewport"),j.minVisibleMs)):j.timer!==null&&(clearTimeout(j.timer),j.timer=null));}},{threshold:i,rootMargin:a}),tracked:_};return e.set(s,I),I}return {supported:t,observe(i,a,s){if(!t){let R=false;return Promise.resolve().then(()=>{R||s("render_fallback");}),()=>{R=true;}}let u=a.threshold??.5,_=a.rootMargin??"0px",C=r(u,_),I={onExposed:s,minVisibleMs:a.minVisibleMs??0,timer:null,fired:false};return C.tracked.set(i,I),C.io.observe(i),()=>{I.fired||(I.timer!==null&&(clearTimeout(I.timer),I.timer=null),C.io.unobserve(i),C.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var vf=iT();function EM(t,e,n){let r=e.toUpperCase();try{let i=new Intl.NumberFormat(n,{style:"currency",currency:r}),a=i.resolvedOptions().maximumFractionDigits??2;return i.format(t/10**a)}catch{return `${r} ${t}`}}var mT=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],kM=new Set(mT),RM=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,AM=Ls();function wM(t){AM&&console.warn(t);}var uT=new Set(ku.options),pT=["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"],aT=new Set(pT);function xW(t,e){return Ap(e,"defineUiPathResolvers(resolvers)")}function Ap(t,e){if(!t)return {};let n={};for(let[r,i]of Object.entries(t)){let a=String(r||"").trim();if(!a)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof i!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${a}'.`);n[a]=i;}return n}function jM(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t)){let i=String(n||"").trim();if(!i)throw new Error("[RevTurbine] RevTurbineInitOptions.serverActions contains an empty action type key.");if(typeof r!="function")throw new Error(`[RevTurbine] RevTurbineInitOptions.serverActions contains a non-function handler for action type '${i}'.`);e[i]=r;}return e}var jm={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function jp(t){return t?.playbook??t?.exportedConfig}function SW(t){return {...t,runtimeMode:"revturbine_server"}}function PW(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function OM(t){let e=Ap(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function TW(t){return OM(t)}function IW(t,e,n={}){return {slotId:t,componentType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function CW(t,e={}){return {entitlementHandle:t,slotId:e.slotId,componentType:Ha(e),planHandle:e.planHandle,placementHandle:e.placementHandle}}function EW(t,e={}){return {placementHandle:t,slotId:e.slotId,componentType:Ha(e),entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function Ds(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function kW(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function RW(t,e,n){return {eventType:t,payload:e,options:n}}var sT="revturbine:sdk-route-change",ls="sdk_validation_warning",qM="revturbine:decision-cache",DM="revturbine:interaction-state",MM="revturbine:presentation-caps",UM="/api/track",FM="/api/sdk/meta",LM="/api/events/interactions",NM="/api/placements/interactions",VM="revturbine-web-sdk",oT="user_context_observed",BM=20,zM=5e3;function dT(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=gT(t);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function gT(t){return xe(t.payload)?t.payload:null}var $M=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function KM(t){let e={};for(let n of $M)e[n]=dT(t,n);return e}var HM=Ug.map(t=>t.prefix),GM=new Set([...Mg,...Cv]);function YM(t){let e=pc(t);return e===ls?"derived":GM.has(e)||HM.some(n=>e.startsWith(n))?"automatic":"explicit"}var WM=["decision_id"];function JM(t){let e={};for(let n of WM)e[n]=dT(t,n);return e}function ZM(t){return nd(t,Cf(8))}async function lT(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return au(new Uint8Array(e))}function Cf(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let i=0;i<n.length;i+=1){let a=n[i].toString(16).padStart(2,"0");r+=a;}return r.slice(0,t)}function Vr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Cf(16)}`}function kp(){return Bo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function cT(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function QM(t,e){let n={};for(let[r,i]of Object.entries(e))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(n[r]=i);return _d(t,n)}function XM(t,e,n){if(t.length===0)return true;let r=new Map;for(let i of t){let a=n.get(i)??"__no_dim__",s=r.get(a)??[];s.push(i),r.set(a,s);}for(let i of r.values())if(!i.some(a=>e.has(a)))return false;return true}var xf=class{constructor(e){w(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},wp=class wp{constructor(e,n,r,i){w(this,"endpoint",e);w(this,"tenantId",n);w(this,"token",r);w(this,"legacyTargetDefaults",i);w(this,"cached");w(this,"etag");w(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<wp.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(),i=n.headers.get("x-bundle-sha256");if(i&&await HP(new TextEncoder().encode(r))!==i)return this.cached;let a=JSON.parse(r);GP(a);let s=za(a,"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}}};w(wp,"REFRESH_TTL_MS",6e4);var Sf=wp,Pf=class{constructor(e,n,r){w(this,"cached");w(this,"resolver");w(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=za(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},Tf=class{constructor(e,n){w(this,"source");w(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return za(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return za(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Om=class Om{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"ingestPublicKey");w(this,"environmentId");w(this,"locale");w(this,"testTraffic");w(this,"analyticsEnabled");w(this,"anonymousTelemetryEnabled");w(this,"previewMode");w(this,"telemetryConsent");w(this,"telemetryCounters",yf());w(this,"maxBatchSize");w(this,"flushIntervalMs");w(this,"flushTimer");w(this,"batchingTeardown",[]);w(this,"anonTelemetryNoticeShown",false);w(this,"piiRedactionWarned",false);w(this,"endpoint");w(this,"runtimeMode");w(this,"endpointOverrides");w(this,"localRuntime");w(this,"localStorageKey");w(this,"mode");w(this,"policy");w(this,"extensionEnabled");w(this,"placementBehaviorOverrides");w(this,"derivedPlacementBehaviorMemo",null);w(this,"providerFailureSlotBehavior");w(this,"uiPathResolvers");w(this,"serverActions");w(this,"unbridgeUiPathCtaResolvers",()=>{});w(this,"unregisterBuiltinSnoozeResolver",()=>{});w(this,"unregisterServerActionResolvers",()=>{});w(this,"persistentStore");w(this,"sessionStore");w(this,"anonymousId");w(this,"sessionId");w(this,"decisionCache",new Map);w(this,"interactionState",new Map);w(this,"interactionQueue",[]);w(this,"defaultDecisionTtlMs",6e4);w(this,"defaultDismissCooldownMs",1440*60*1e3);w(this,"dismissCooldownDefaultMs",10080*60*1e3);w(this,"defaultRemindLaterMs",3600*1e3);w(this,"defaultUsageWarningPercent",80);w(this,"defaultTrialExpiringDays",3);w(this,"events",[]);w(this,"placements",new Map);w(this,"syncedSurfaceSlotIds",new Set);w(this,"userContext");w(this,"pageContext");w(this,"clientContextToken");w(this,"clientSessionProvider");w(this,"retriedClientContextAfterMint",false);w(this,"serverUserContextProvider");w(this,"lastServerContextHash");w(this,"usageBalances",{});w(this,"localDecisionsByPlacementId",new Map);w(this,"localPlacementsByLookupKey",new Map);w(this,"localEntitlementsByHandle",new Map);w(this,"localUserContextsByUserId",new Map);w(this,"localTrialStatus",{in_trial:false});w(this,"presentationCapsByKey",new Map);w(this,"usageLimitByEntitlement",new Map);w(this,"usageTokenPrefixByEntitlement",new Map);w(this,"segmentIdsByPredicateField",new Map);w(this,"configuredSegmentsById",new Map);w(this,"dirtySegmentIds",new Set);w(this,"segmentMembershipBySegmentId",new Map);w(this,"segmentMembershipUserId");w(this,"lastTrialTriggerStage","none");w(this,"configProvider");w(this,"branding");w(this,"apiBranding");w(this,"cachedPlacementResolver");w(this,"cachedPlacementResolverConfig");w(this,"sdkDisabledByProviderFailure",false);w(this,"sdkDisabledReason");w(this,"providerRegistry");w(this,"placementTypeRegistry");w(this,"impressionHistory");w(this,"emittedResolutionDiagnostics",new Set);w(this,"emittedSdkErrors",new Set);w(this,"reportedUnrecognizedContextKeys",new Set);w(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.locale=e.locale?.trim()||void 0,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??BM),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??zM),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??jm.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=Ap(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.serverActions=jM(e.serverActions),this.persistentStore=fs(e.persistentStorage),this.sessionStore=Qd(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?cT():{},...e.user||{}},this.pageContext={...this.policy.inferPage?kp():{},...e.page||{},tags:uc(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(ls,{reason:"init received a blank user id"});}catch{}}if(this.sessionId=Vr(),this.providerRegistry=new jc,this.placementTypeRegistry=new Vl,this.impressionHistory=new Hd({store:new bu({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),ZP(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=QP(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=XP((n,r)=>{this.snooze(n,r);}),this.unregisterServerActionResolvers=eT(this.serverActions,{applyUserContext:n=>this.setUserContext(n),trackResult:(n,r,i)=>this.emitSemantic("placement_interaction",{interaction_type:"cta_clicked",action_type:n.actionType,action_success:r,payload_id:n.placement.output_id,placement_id:n.placement.surface?.slot_id??null,decision_id:n.placement.decision_id??null,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),action_outcome:i?"rejected":r?"success":"failure"},{immediate:false})}),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===jm.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new Tf(e.configProvider,n);let r=za(jp(e.localRuntime),"localRuntime.playbook",n),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new Pf(i,n,r);if(r)return new xf(r);let a=e.runtimeMode??jm.Server,s=e.ingestPublicKey??e.apiKey;if(a!==jm.LocalOnly&&e.endpoint&&s)return new Sf(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??[],a={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:a},a}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 i of r.predicates){let a=String(i.field||"").trim();if(!a)continue;let s=this.segmentIdsByPredicateField.get(a)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(a,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=Io({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,i=this.localTrialStatus,a=this.userContext.payment_failed,s=this.userContext.payment_at_risk,u=this.userContext.tiers,_=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&&!_&&!I)return;let R={};if(r&&typeof r=="object"){let A=ba(r);for(let[j,M]of Object.entries(r)){if(!M||typeof M!="object")continue;let oe=typeof M.amount=="number"?M.amount:A[j]??0,Z=typeof M.limit=="number"?M.limit:0,_e=Z>0?Math.max(0,Z-oe):0;R[j]={used:oe,limit:Z,remaining:_e,unit:typeof M.unit=="string"?M.unit:void 0,reset_date:typeof M.reset_date=="string"?M.reset_date:void 0};}}let O={...i.in_trial!==void 0?{trialActive:i.in_trial}:{},...i.trial_limit_type!==void 0?{trialLimitType:i.trial_limit_type}:{},...i.progress_percent!==void 0?{trialProgressPercent:i.progress_percent}:{},...i.days_remaining!==void 0?{trialDaysRemaining:i.days_remaining}:{},...i.day_number!==void 0&&i.days_remaining!==void 0?{trialDaysTotal:i.day_number+i.days_remaining}:{},...i.state!==void 0?{trialState:i.state}:{},...i.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{trialUsageConsumed:i.usage_consumed}:{},...i.usage_limit!==void 0?{trialUsageLimit:i.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...O,...a!==void 0?{paymentFailed:a}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(R).length>0||_?{entitlements:{entries:{},usage:R,..._?{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 i of r)this.dirtySegmentIds.add(i);}}toSegmentEvaluationTraits(e,n,r){return du(e,n,r)}buildTargetingState(e){return gu(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,i=n.id||this.anonymousId;if(r!==i){this.segmentMembershipUserId=i,this.markAllSegmentsDirty();return}let a=this.buildTargetingState(e),s=this.buildTargetingState(n),u=new Set,_=new Set([...Object.keys(a.segmentTraits),...Object.keys(s.segmentTraits)]);for(let C of _)a.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 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",i=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,a=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:Ds(i,a,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:Ha(e)??"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 xd(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId)return false;let r=Ha(n);if(r&&e.surfaceType&&e.surfaceType!==r)return false;let i=(a,s)=>!a||!s?true:a===s;return i(n.entitlementHandle,e.entitlementHandle)&&i(n.planHandle,e.planHandle)&&i(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return ad(e,n.planHandle)}applyCategoryConflictSuppression(e){return lu(e)}resolveLocalPlacementFromCandidates(e,n){return Pd(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[i,a]of this.localPlacementsByLookupKey.entries()){if(!a)continue;let s=id(i);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(a,e)&&r.push(a);}return n&&!r.some(i=>i.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,i]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,i);if(e?.placementsByLookupKey)for(let[r,i]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,i);if(e?.entitlementByHandle)for(let[r,i]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,i);if(e?.userContextByUserId)for(let[r,i]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,i);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 i of r.placements||[])this.placements.set(i.id,i);for(let[i,a]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,a);for(let[i,a]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,a);for(let[i,a]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,a);for(let[i,a]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,a);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 `${qM}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${DM}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${MM}:${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(([i,a])=>{!a||typeof a!="object"||!Number.isFinite(a.expiresAt)||a.expiresAt<=r||this.decisionCache.set(i,a);});}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,i])=>{!i||typeof i!="object"||this.interactionState.set(r,i);});}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,i]of Object.entries(n)){if(!i||typeof i!="object")continue;let a=Array.isArray(i.seenAt)?i.seenAt.filter(u=>Number.isFinite(u)&&u>0):[],s=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:a,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(),i=new Set;if(!r)return i;i.add(r);for(let a of e.plans??[]){let s=typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"";s===r&&i.add(s);}return i}ruleTargetsActivePlan(e,n){let i=(Array.isArray(e.targets)?e.targets:[]).filter(a=>xe(a)&&a.kind==="plan");return i.length===0?true:i.some(a=>typeof a.id=="string"&&n.has(a.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,i=e.entitlements??[];for(let s of i){let u=typeof s.unique_handle=="string"?s.unique_handle:"";u&&r.set(u,u);}let a=e.entitlement_rules??[];for(let s of a){if(!xe(s))continue;let u=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!u)continue;let _=typeof s.kind=="string"?s.kind:"";if(!(_==="usage_limit"||_==="credits"||_==="seat"))continue;let I=r.get(u)??"",R=typeof s.unit=="string"?s.unit:"",O=od(R),A=O&&!ld(O)?O:xo(I||u);A&&(this.usageTokenPrefixByEntitlement.set(u,A),I&&this.usageTokenPrefixByEntitlement.set(I,A));let j=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(j)||j<=0||!this.ruleTargetsActivePlan(s,n))continue;let M=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(u,{limit:j,warningPercent:M}),I&&this.usageLimitByEntitlement.set(I,{limit:j,warningPercent:M});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=jd({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:i=>this.usageThresholdForEntitlement(i)}),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 i=this.resolveContextPlanRaw(),a=String(i||"").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 tT({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:a,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,s]of Object.entries(r))a!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(n[a]=s);if(n.plan_name===void 0){let a=Ns(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;}let i=this.priceTokensForProviders();return n.plan_price===void 0&&(n.plan_price=i.plan_price),n.upgrade_plan_price===void 0&&(n.upgrade_plan_price=i.upgrade_plan_price),n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...ba(this.userContext.usage),...this.usageBalances},n={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let a=this.usageTokenPrefixByEntitlement.get(r)??xo(r)??r,s=this.usageThresholdForEntitlement(r);n[a]={current:i,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}catalogEligibilityContext(e){let n=this.getConfiguredExportedConfig(),r={};for(let i of n?.segments??[])i.dimension_id&&(r[i.handle]=i.dimension_id);return {segmentIds:e??this.getTargeting().segmentIds,segmentDimensions:r}}eligiblePlansForSegments(e){let n=this.getConfiguredExportedConfig();return n?ru(n.plans??[],n.plan_variations??[],this.catalogEligibilityContext(e)):[]}eligibleAddonsForSegments(e){let n=this.getConfiguredExportedConfig();return n?iu(n.addons??[],n.addon_variations??[],this.catalogEligibilityContext(e)):[]}async getEligiblePlans(){!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode()&&await this.refreshExportedConfigSnapshot();let e=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():void 0;return this.eligiblePlansForSegments(e?.segments?.segmentIds)}async getEligibleAddons(){!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode()&&await this.refreshExportedConfigSnapshot();let e=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():void 0;return this.eligibleAddonsForSegments(e?.segments?.segmentIds)}formatEligiblePrice(e){return EM(e.price.price,e.price.currency,this.locale)}priceTokensForProviders(e){let n=this.eligiblePlansForSegments(e?.segments?.segmentIds),r=e?.plan?.currentPlanHandle||this.resolveContextPlanRaw(),i=e?.plan?.billingPeriod,a=C=>{let I=n.filter(R=>R.handle===C);return I.find(R=>R.price.billingPeriod===i)??I[0]},s=a(r||void 0),u=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig()),_=a(u.recommended_plan_handle||void 0);return {plan_price:s?this.formatEligiblePrice(s):e?.plan?.currentPlanPrice??"",upgrade_plan_price:_?this.formatEligiblePrice(_):""}}applyPriceTokens(e,n){let r=this.priceTokensForProviders(n),i=a=>typeof a=="string"?a.replace(/\{\{\s*(plan_price|upgrade_plan_price)\s*\}\}/g,(s,u)=>r[u]):"";return {...e,content:{...e.content,header:i(e.content.header),body:i(e.content.body),cta_label:i(e.content.cta_label),title:i(e.content.title),cta:i(e.content.cta)},...e.output?{output:{...e.output,content:Object.fromEntries(Object.entries(e.output.content).map(([a,s])=>[a,typeof s=="string"?i(s):s]))}}:{}}}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 Yd({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 i=this.resolveContextPlanRaw(),a=String(i||"").toLowerCase(),s=this.getTargeting(),u=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:_,effectivePlanHandle:C}=this.resolveReverseTrialGrants(r);return fc({handle:e,context:n,currentPlanHandle:a,segmentIds:u,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,..._!==void 0?{trialGrantedEntitlementHandles:_}:{},...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 a=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !a||a.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(a.entitlements_during_trial),effectivePlanHandle:a.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=Ns(r,this.userContext.plan),a=i??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],u=Array.from(new Set(s.flatMap(O=>(O.predicates??[]).map(A=>A.field)))).sort(),_={...n?.traits??{},...this.userContext.custom??{}};for(let[O,A]of Object.entries(this.userContext.entitlements??{}))_[O]===void 0&&(_[O]=A);i&&_.plan_name===void 0&&(_.plan_name=i),a&&_.plan===void 0&&(_.plan=a);let C={...n?.usage??{},...ba(this.userContext.usage),...this.usageBalances};for(let[O,A]of Object.entries(C))_[O]===void 0&&(_[O]=A);let I={};for(let[O,A]of Object.entries(_))(typeof A=="string"||typeof A=="number"||typeof A=="boolean")&&(I[O]=A);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 A=this.configuredSegmentsById.get(O)??s.find(M=>M.handle===O);if(!A){this.segmentMembershipBySegmentId.delete(O);continue}let j=yc([A],I).length>0;this.segmentMembershipBySegmentId.set(O,j);}this.dirtySegmentIds.clear();}let R=s.length>0?s.filter(O=>this.segmentMembershipBySegmentId.get(O.handle)===true).map(O=>O.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:R,traits:_,...a?{plan:a}:{},...Object.keys(C).length>0?{usage:C}:{},configuredSegments:s,configuredTraitFields:u}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),a=this.getPolicy(),s=this.getConfiguredExportedConfig(),u=new Set(r.segmentIds),_=r.configuredSegments.map(be=>{let It=Array.isArray(be.predicates)?be.predicates.map(wn=>QM(wn,r.traits)):[],gn=It.length>0?It.every(wn=>wn.matched):u.has(be.handle);return {segmentId:be.handle,...be.name?{segmentName:be.name}:{},matched:gn,predicates:It}}),C=new Map,I=new Map;if(Array.isArray(s?.entitlements))for(let be of s.entitlements){let It=nr(be.unique_handle),gn=It;gn&&It&&C.set(gn,It);let wn=nr(be.type);gn&&wn&&I.set(gn,wn);}let R=new Map;if(Array.isArray(s?.plans))for(let be of s.plans){let It=nr(be.unique_handle),gn=It;gn&&It&&R.set(gn,It);}let A=(nr(r.traits.plan_handle,r.plan)??"").toLowerCase(),j=new Map;if(Array.isArray(s?.segments))for(let be of s.segments){let It=nr(be.handle),gn=nr(be.dimension_id);It&&gn&&j.set(It,gn);}let M=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((be,It)=>{let gn=nr(be.id)??`entitlement_rule_${It}`,wn=nr(be.entitlement_id),mt=wn?C.get(wn):void 0,Nn=Array.isArray(be.targets)?be.targets.filter(ut=>ut.kind==="plan").map(ut=>ut.id):[],Rr=Nn.map(ut=>R.get(ut)??ut),Jn=Array.isArray(be.segment_ids)?be.segment_ids.filter(ut=>typeof ut=="string"):[],_n=nr(be.kind),un=!A||Nn.some(ut=>ut.toLowerCase()===A),Vn=XM(Jn,u,j),Tn=un&&Vn,bi=mt?i[mt]:wn?i[wn]:void 0,Dt=Tn?bi?.status??"unknown":"unknown",jn;if(Tn)switch(_n){case "feature":jn=be.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let ut=nr(be.tier_name);jn=ut?`unlocks ${ut} tier`:"unlocks capability tier";break}case "usage_limit":{let ut=typeof be.limit_value=="number"?be.limit_value:void 0,cr=nr(be.unit)??"",Mi=nr(be.period_scope)??"",xi=Mi?` / ${Mi.replace("per_","")}`:"";jn=ut!=null?`sets limit to ${ut.toLocaleString()}${cr?` ${cr}`:""}${xi}`:"sets usage limit";break}case "credits":{let ut=be.allowance_value,cr=typeof ut=="number"?ut:void 0,Mi=nr(be.unit)??"credits",xi=nr(be.reset_period)??"",hn=xi?` / ${xi.replace("per_","")}`:"";jn=cr!=null?`grants ${cr.toLocaleString()} ${Mi}${hn}`:"grants credit allowance";break}case "seat":{let ut=be.included_count,cr=typeof ut=="number"?ut:void 0;jn=cr!=null?`includes ${cr} seat${cr===1?"":"s"}`:"includes seats";break}default:if(wn){let ut=I.get(wn);ut==="feature"?jn="grants access":ut&&(jn=`${ut.replace(/_/g," ")} entitlement`);}break}return {ruleId:gn,...wn?{entitlementId:wn}:{},...mt?{entitlementHandle:mt}:{},..._n?{kind:_n}:{},planScopes:Rr,planIds:Nn,...Jn.length>0?{segmentIds:Jn}:{},matchesPlan:un,matchesSegment:Vn,matched:Tn,outcome:Dt,...jn?{outcomeDescription:jn}:{},...bi?.reason?{reason:bi.reason}:{}}}):[],oe=nr(n.output?.output_id),Z=this.placements.get(e.placementId),_e=nr(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 It=nr(be.id)??"",gn=nr(be.name)??"";if(J.has(It))continue;let wn=nr(n.output?.rule_id);if(wn&&It===wn){J.add(It),ne.push(be);continue}if(_e&&(It===_e||gn===_e||It===`pl_${_e}`||gn===`pl_${_e}`)){J.add(It),ne.push(be);continue}De.length>0&&(be.payloads??[]).some(Rr=>(Rr.surfaces??[]).some(_n=>{let un=nr(_n.template_id);return un?De.includes(un):false}))&&(J.add(It),ne.push(be));}let ot=ne.flatMap(be=>(be.payloads??[]).map(gn=>{let wn=gn.target,mt=wn?.plan_ids??[],Nn=mt.map(Dt=>R.get(Dt)??Dt),Rr=wn?.segment_chips??[],_n=(gn.surfaces??[]).map(Dt=>nr(Dt.template_id)).filter(Dt=>typeof Dt=="string"),un=mt.length===0||!A||mt.some(Dt=>Dt.toLowerCase()===A),Vn=Rr.length===0||Rr.some(Dt=>u.has(Dt)),Tn="active",bi=Tn==="active"&&un&&Vn;return {payloadId:String(gn.id??""),placementId:String(be.id??""),placementName:String(be.name??""),status:Tn,planIds:mt,planScopes:Nn,segmentChips:Rr,surfaceTemplateIds:_n,matchesPlan:un,matchesSegment:Vn,eligible:bi,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(It=>({count:It.count,period:It.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:a,entitlements:i,segments:_,entitlementRules:M,eligiblePayloads:ot,placementRules:An}}usageThresholdForEntitlement(e){return hd(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return Od(e,n,i=>this.usageThresholdForEntitlement(i)).map(i=>this.emitTrigger(i.type,{entitlement_handle:i.entitlement_handle,current_usage:i.current_usage,usage_limit:i.usage_limit,usage_percent:i.usage_percent,threshold:i.threshold}))}deriveTrialTriggerStage(e){return qd(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(sT,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...a)=>{r(...a),n();});let i=e.replaceState.bind(e);e.replaceState=((...a)=>{i(...a),n();}),window.addEventListener("popstate",n),window.addEventListener(sT,a=>{let s=a.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 Ad(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:uc(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?kp():{},...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=gT(e),i=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof i=="string"&&i.trim()&&(this.placements.has(i)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:i}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(ls,{source_event_type:e,warning_count:n.length,warning_codes:n.map(i=>i.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?kp():{},...this.pageContext},i=r.url||(Yr()?window.location.href:""),a=(()=>{try{return new URL(i).pathname}catch{return Yr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:a,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:uc(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===oT?{}:{...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>=Om.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>=Om.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((i,a)=>i+(a.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(),i=r?.format_version!=null?String(r.format_version):void 0,a=i?`${this.tenantId}:${i}`:this.tenantId,s=(await lT(a)).slice(0,64),_={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Vr(),config_hash_id:s,sdk_version:rb,runtime_mode:this.runtimeMode,...i?{bundle_version:i}:{},...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",FM),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(_),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 O=xy(R);return n+=O.redactions,O.value}),i=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&i&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let a=Vr(),s=this.getConfiguredExportedConfig()?.playbook_version_id,u=r.map(R=>{let O=R.user_id||R.anonymous_id,A=Jd(this.userContext.account_id||O),j=Wd({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:VM});return n+=j.redactions+(A.redacted?1:0),{environment_id:this.environmentId,user_id:O,account_id:A.value,event_name:pc(R.type).slice(0,120),event_ts:R.event_time,properties:JSON.stringify(j.value),...KM(R.properties),...JM(R.properties),origin:YM(R.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:ff.next(),request_id:Vr(),tenant_id:R.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let _=this.endpointFor("ingestEvents",UM),C={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":a},body:JSON.stringify({events:u}),keepalive:true};(await _f(()=>fetch(_,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 i of r)try{Promise.resolve(i.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 i=pc(e),a=this.toEventEnvelope(i,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],u=[a];if(s.length>0&&u.push(this.buildValidationWarningEvent(i,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:i,properties:a}=Zd(e,n);await this.capture(i,a,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.unregisterServerActionResolvers(),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 i=xe(n)?n:{};await this.capture(e,{semantic:true,payload:i},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),i={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},a=await this.fetchUserContext(i.id||""),s=new Set(r.segmentIds||[]),u=new Set(a.segmentIds||[]),_=Array.from(u).filter(I=>!s.has(I)),C=Array.from(s).filter(I=>!u.has(I));for(let I of _)await this.emitSemantic("segment_enrolled",{segment_id:I,user_id:i.id??null});for(let I of C)await this.emitSemantic("segment_unenrolled",{segment_id:I,user_id:i.id??null});if(n){let I=r.usage||{},R={...I,...this.usageBalances},O=this.evaluateUsageThresholdCrossings(I,R);await Promise.all(O);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(oT,{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(kp());}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,i=Date.now()+r;for(let a of e.decisions??[]){if(!a.output)continue;let s=[this.tenantId,a.slot_id??a.entitlement_handle??a.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),u=xe(a.output?.content)?a.output.content:{};this.decisionCache.set(s,{value:{placementId:a.slot_id??a.entitlement_handle??a.placement_handle??"unknown",requestId:e.request_id,visible:a.visible,decisionSource:"cache",reasonCodes:a.reason_codes??[],content:Ds(String(u.header??""),String(u.body??""),String(u.cta_label??"")),output:a.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[a,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(a,{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 bd({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:lT,randomHex:Cf})}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(/\/+$/,""),i=ZM(e.placementScopeKey||e.id||e.name),a={...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:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:a},u={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},_=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:u,body:JSON.stringify(s)});if(_.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(_.status!==404)throw new Error(`surface_slot_upsert_failed:${_.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=bo(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),a=[];r||a.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||a.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!xe(e.metadata)&&a.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),u={id:s,route:n,name:i||"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}:{}}},_=this.placements.get(s),C=_?this.stableStringify(_):null,I=this.stableStringify(u);return (!_||C!==I)&&(this.placements.set(s,u),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(u),a.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",a,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:i||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;if(!this.hasEndpointOverride("placementTypes")){Ls()&&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(a=>tU(a)).filter(a=>a!==null);if(n.length===0)return;let r=Vr(),i=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(!i.ok)throw new Error(`persist_placement_types_failed:${i.status}`)}stableStringify(e){return mc(e)}decisionCacheKey(e,n){return Sd({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 uy({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 i=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:i,value:n}),this.persistDecisionCache();}suppressionForState(e){return py(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return cu(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,i=this.placementCapKey(e),a=this.presentationCapsByKey.get(i),s=Id(e,i,a,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(i,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 i=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],i],suppressionReason:i}}normalizeDecisionFromResponse(e,n,r,i){return Td(e,n,r,i)}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:Ds("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),a=this.suppressionForState(this.interactionState.get(i));if(a.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:a.reason?[a.reason]:[],suppressionReason:a.reason,content:Ds(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,u=await this.localRuntime?.getContext?.(),_=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(u||_)&&(s=this.stableStringify({legacyCtx:u??{},providerCtx:_??{}}));let C=this.decisionCacheKey(e,s),I=this.readDecisionCache(C);if(I)return this.gateDecisionByCaps(I,{tick:false});{let O=this.getOrBuildPlacementResolver();if(O){let j={...u,..._?{__providers:_}:{}},M=this.applyPriceTokens(this.gateDecisionByCaps(await O(e,n,j)),_);return this.localDecisionsByPlacementId.set(e.placementId,M),this.writeDecisionCache(C,M,e.ttlMs),this.persistLocalRuntimeState(),M}let A=this.localDecisionsByPlacementId.get(e.placementId);if(A){let j=this.gateDecisionByCaps({...A,decisionSource:"fallback"});return this.writeDecisionCache(C,j,e.ttlMs),this.persistLocalRuntimeState(),j}}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:Ds(`${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 i=await this.getPlacementDecision(r),a=this.decisionCacheKey(r);this.writeDecisionCache(a,i,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let a=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(a);if(s){s.placementIds.push(r.placementId);continue}n.set(a,{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 i=e.filter(a=>r.placementIds.includes(a.placementId)&&a.userId===r.userId);await Promise.allSettled(i.map(a=>this.getPlacementDecision(a)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=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(i.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let u=Number(i.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let u=Number(i.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(i.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",LM),{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",NM),{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,i=n.treatmentId,a=n.metadata??{},s=Number(a.cooldown_ms),u=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,u);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,i);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,i,void 0,void 0,u);else if(n.interactionType==="suppress"){let I=Number(a.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,a,Number.isFinite(I)&&I>0?I:void 0);}let _=n.metadata??{},C=typeof _.decision_id=="string"?_.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:_},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),i=Vr();if(this.isDisabledByProviderFailure()){let u=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:u.content}}if(this.isLocalOnlyMode()){let u=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:u?"remote":"fallback",content:Ds(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:i,decisionSource:"fallback",content:Ds("Placement not found","Register the placement before requesting content.","Register placement")};let a=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:a});return {placementId:e,requestId:i,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??Ds(`${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,...i}=n,a=typeof i.handle=="string"&&i.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). `+(a?"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(ls,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:a?"1":"0"});}catch{}}return i}reportUnrecognizedContextKeys(e,n,r,i){if(n.length===0)return;let a=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(a))return;this.reportedUnrecognizedContextKeys.add(a);let s=i?` ${i}`:"";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(ls,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=tu(e,Vr);return n&&xe(e)&&typeof e.decision_id!="string"&&this.capture(ls,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return dd(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=Ha(e);if(r&&!uT.has(r))return this.capture(ls,{reason:`getPlacement called with unknown componentType: ${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 a=this.localPlacementForConfig(e);return a&&this.applyPlacementCapsIfNeeded(a).allowed?a: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 a=this.localRuntime?.resolvers?.checkEntitlement;if(a){let s=await a(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 i=this.localEntitlementsByHandle.get(e);return i||(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=ba(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(a=>!(a in n));if(r.length===0)return;let i=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(i)){this.reportedUnrecognizedContextKeys.add(i),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(ls,{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 i=new Set(r.map(u=>xe(u)&&typeof u.unique_handle=="string"?u.unique_handle:null).filter(u=>u!==null));if(i.size===0)return;let a=e.filter(u=>!i.has(u));if(a.length===0)return;let s=`usage:unmatched:${[...a].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: ${a.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: ${[...i].sort().join(", ")}.`);try{this.capture(ls,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:a.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 a=await r(e);return this.localUserContextsByUserId.set(e,a),this.persistLocalRuntimeState(),a}let i=this.localUserContextsByUserId.get(e);return i||{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 i=await r.json(),a={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(s=>typeof s=="string"):[],traits:xe(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:xe(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,a),this.persistLocalRuntimeState(),a}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new Oc,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 _=await this.mintClientSessionToken();if(_){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(_);}finally{this.retriedClientContextAfterMint=!1;}}}return}let i=await r.json(),a=this.mapClientSafeContext(i);if(Object.keys(a).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:a.trial?{in_trial:a.trial.in_trial,state:a.trial.state,days_remaining:a.trial.days_remaining}:void 0,payment_at_risk:a.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:a.trial??null,plan_handle:a.plan_handle??null,plan:a.plan??null})),u=await wd(s)+`:${a.payment_at_risk===!0?1:0}`;if(u===this.lastServerContextHash)return;this.lastServerContextHash=u,this.applyServerContextPatch(a);}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={},i=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);i&&(n.trial={in_trial:i==="active"||i==="running_out",state:i,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let a=e.plan?.handle;return typeof a=="string"&&a.length>0&&(n.plan_handle=a,n.plan={handle:a,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:a}),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,i){await this.impressionHistory.recordImpression(e,n,r,i);}async recordDismissal(e,n,r,i,a){await this.impressionHistory.recordDismissal(e,n,r,i,a);}async recordClickThru(e,n,r,i,a){await this.impressionHistory.recordClickThru(e,n,r,i,a);}async recordConversion(e,n,r,i){await this.impressionHistory.recordConversion(e,n,r,i);}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(),i=this.validateTrialStatusShape(r);return this.localTrialStatus=i,await this.evaluateTrialLifecycleTriggers(i),this.persistLocalRuntimeState(),i}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),i=n?.nowIso??new Date().toISOString(),{trial:a}=Gm({...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:i,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=a??{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:[],i=e.includeProviderHandlers??true,a=Ap(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...a};if(i&&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=[],_=0;for(let I of r){let R=xe(I)?I:{},O=typeof R.action_type=="string"?R.action_type.trim():"";if(!O){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[O]=="function"){_+=1;continue}u.push({actionType:O,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:_,issues:u};if(!C.valid&&e.throwOnMissing){let I=C.issues.filter(O=>O.reason==="missing_resolver").map(O=>O.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=xe(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],i=0;for(let u of n){let C=(xe(u)?u:{}).action_type,I=typeof C=="string"?C.trim():"";if(!I){i+=1;continue}typeof this.uiPathResolvers[I]!="function"&&r.push(I);}if(i===0&&r.length===0)return;let a=Array.from(new Set(r)),s=[];a.length>0&&s.push(`missing resolvers for action_type: ${a.join(", ")}`),i>0&&s.push(`content_ui_paths with missing action_type: ${i}`),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}RM.test(e)&&wM(`[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,i=xe(n)?n:{};xe(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(a=>!kM.has(a)),mT),i.usage&&(this.usageBalances={...this.usageBalances,...ba(i.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:i.account_id,email:i.email,plan_handle:typeof i.plan_handle=="string"&&i.plan_handle.trim()!==""?i.plan_handle.trim():void 0,plan:i.plan,usage:i.usage,entitlements:i.entitlements,custom:i.custom,personalization:i.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(i.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?cT():{},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 i=await this.checkEntitlement(e,r);return i.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:i}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:i.reason??null},{immediate:false}),{ran:false,entitlement:i})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},i=Object.entries(r).filter(([a])=>aT.has(a));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(a=>!aT.has(a)),pT,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),i.length>0&&this.setUserContext(Object.fromEntries(i)),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});}};w(Om,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var If=Om;function Ef(t){let e=eU(t),n=new If(e);if(!e.provider)return n;let r=(I,R)=>{try{return typeof I=="function"?I(e):I}catch(O){return console.warn(`[RevTurbine] Provider factory failed at chain index ${R}.`,O),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((I,R)=>r(I,R+1))].filter(I=>I!==null);if(i.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let a=async(I,R,O)=>{let A=[];for(let j=0;j<i.length;j+=1){let oe=i[j][I];if(oe){A.push(j);try{return await oe(...R)}catch(Z){let _e=i.slice(j+1).some(De=>typeof De[I]=="function");console.warn(j===0&&_e?`[RevTurbine] Primary provider ${I} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${I} failed at chain index ${j}.`,Z);}}}return A.length===0||n.disableForProviderFailure(`provider_${I}_chain_failed`),O()},s=n.getPlacement.bind(n),u=n.checkEntitlement.bind(n),_=n.persistPlacementTypes.bind(n),C=n.identify.bind(n);return n.getPlacement=async I=>a("getPlacement",[I],()=>s(I)),n.checkEntitlement=async(I,R)=>a("checkEntitlement",[I,R],()=>u(I,R)),n.persistPlacementTypes=async I=>a("persistPlacementTypes",[I],()=>_(I)),n.identify=(I,R)=>{let O=0;for(let A=0;A<i.length;A+=1){let j=i[A];if(j.identify){O+=1;try{j.identify(I,R);return}catch(M){let oe=i.slice(A+1).some(Z=>typeof Z.identify=="function");console.warn(A===0&&oe?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${A}.`,M);}}}if(O>0){n.disableForProviderFailure("provider_identify_chain_failed"),C(I,R);return}C(I,R);},n}var Rp={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function bf(t){return typeof t=="string"&&t.trim().length>0}function eU(t){return jp(t.localRuntime)!==void 0?{...t,tenantId:bf(t.tenantId)?t.tenantId:Rp.tenantId,apiKey:bf(t.apiKey)?t.apiKey:Rp.apiKey,endpoint:bf(t.endpoint)?t.endpoint:Rp.endpoint,mode:t.mode??Rp.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function tU(t){if(!xe(t))return null;let e=(_,C)=>String(_??"").trim().slice(0,C),n=e(t.id,256),r=e(t.label,256),i=e(t.description,1024),a=e(t.surfaceType,64);if(!n||!r||!i||!uT.has(a))return null;let s=Number(t.priority),u=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:i,surfaceType:a,priority:u}}typeof window<"u"&&(window.RevTurbine={init:Ef});var ha=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 Bl(t){return t?{id:t.id??ha.id,name:t.name??ha.name,version:t.version??ha.version,colors:{...ha.colors,...t.colors},typography:{...ha.typography,...t.typography},shape:{...ha.shape,...t.shape},shadows:{...ha.shadows,...t.shadows}}:{...ha}}var nU="revturbine:theme";function kf(t){return `${nU}:${t}`}function rU(t,e){try{let n=e.getItem(kf(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function iU(t,e,n){try{n.setItem(kf(t),JSON.stringify(e));}catch{}}function aU(t,e){let n=e??fs();try{n.removeItem(kf(t));}catch{}}async function Rf(t,e){let{tenantId:n,endpoint:r,apiKey:i,base:a}=t,s=t.storage??fs(),u=rU(n,s),_=Bl({...a,...u});return t.onOverride?.(u),sU(r,n,i).then(C=>{C&&(u?.version&&C.version===u.version||(iU(n,C,s),t.onOverride?.(C),e?.(Bl({...a,...C}))));}).catch(()=>{}),_}async function sU(t,e,n){let r=t.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,a=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":i}});if(!a.ok)return null;let s=await a.json();return typeof s!="object"||s===null?null:s}var Op=class{constructor(e,n){w(this,"sdk");w(this,"options");w(this,"listeners",new Set);w(this,"_placementId","");w(this,"_decision",null);w(this,"_isLoading",false);w(this,"_error","");w(this,"_impressionTracked",false);w(this,"_loadSeq",0);w(this,"_rendered",false);w(this,"_exposed",false);w(this,"_exposureBasis",null);w(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 i=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:i?.message_block_handle,messageBlockId:i?.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 i=this.slotContext();this.emitSlotEvent("slot_evaluated",i),this.emitSlotEvent(n,i);}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 i=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=i,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let a=this.exposureMode;return a==="legacy_resolution"?this.fireImpression("legacy_resolution"):a==="viewport"&&!vf.supported&&this.fireImpression("render_fallback"),i}catch(i){return r===this._loadSeq&&(this._error=i instanceof Error?i.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 i=this._decision?.output?.decision_id??null,a=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:a?.message_block_handle,messageBlockId:a?.message_block_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:i?{...n,decision_id:i}: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 qm(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var qp=class{constructor(e,n){w(this,"sdk");w(this,"options");w(this,"listeners",new Set);w(this,"_isLoading",false);w(this,"_error",null);w(this,"_result",null);w(this,"_gatedPlacement",null);w(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:qm(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return qm(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:i}=this.options;this._isLoading=true,this._error=null,this.notify();try{let a=await this.sdk.checkEntitlement(e,n);if(this._result=a,this.emitGateEvaluated(e,a),!r||!qm(a))this._gatedPlacement=null;else if(a.placement)this._gatedPlacement=a.placement;else {let s=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=s;}return a}catch(a){return this._error=a instanceof Error?a.message:String(a),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:qm(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();}},Dp=class{constructor(e,n){w(this,"sdk");w(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 Op(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 qp(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 oU(t){let{bootstrapPlacements:e,...n}=t,r=n,i=Ef(r),a=r.user;a&&typeof a=="object"&&a.id&&i.identify(a.id,a);let s=ha,_=jp(r.localRuntime)?.theme;if(_&&typeof _=="object"?s=Bl(_):s=await Rf({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let C=i.getUserContext().user_id,I=[];for(let R of e){let O=await i.registerPlacement(R.placement),A=R.userId||C;A&&I.push({placementId:O,userId:A,contextMode:R.contextMode,overrides:R.overrides,traits:R.traits,ttlMs:R.ttlMs});}I.length>0&&await i.bootstrapPlacementDecisions(I);}return new Dp(i,s)}var lU=/\{[^{}]+\}/g,cU=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function mU(){return Math.random().toString(36).slice(2,11)}function yT(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:s,headers:u,requestInitExt:_=void 0,...C}={...t};_=cU()?_:void 0,e=_T(e);let I=[];async function R(O,A){let{baseUrl:j,fetch:M=r,Request:oe=n,headers:Z,params:_e={},parseAs:De="json",querySerializer:ne,bodySerializer:J=a??pU,pathSerializer:ot,body:Pn,middleware:An=[],...be}=A||{},It=e;j&&(It=_T(j)??e);let gn=typeof i=="function"?i:hT(i);ne&&(gn=typeof ne=="function"?ne:hT({...typeof i=="object"?i:{},...ne}));let wn=ot||s||uU,mt=Pn===void 0?void 0:J(Pn,fT(u,Z,_e.header)),Nn=fT(mt===void 0||mt instanceof FormData?{}:{"Content-Type":"application/json"},u,Z,_e.header),Rr=[...I,...An],Jn={redirect:"follow",...C,...be,body:mt,headers:Nn},_n,un,Vn=new oe(dU(O,{baseUrl:It,params:_e,querySerializer:gn,pathSerializer:wn}),Jn),Tn;for(let jn in be)jn in Vn||(Vn[jn]=be[jn]);if(Rr.length){_n=mU(),un=Object.freeze({baseUrl:It,fetch:M,parseAs:De,querySerializer:gn,bodySerializer:J,pathSerializer:wn});for(let jn of Rr)if(jn&&typeof jn=="object"&&typeof jn.onRequest=="function"){let ut=await jn.onRequest({request:Vn,schemaPath:O,params:_e,options:un,id:_n});if(ut)if(ut instanceof oe)Vn=ut;else if(ut instanceof Response){Tn=ut;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!Tn){try{Tn=await M(Vn,_);}catch(jn){let ut=jn;if(Rr.length)for(let cr=Rr.length-1;cr>=0;cr--){let Mi=Rr[cr];if(Mi&&typeof Mi=="object"&&typeof Mi.onError=="function"){let xi=await Mi.onError({request:Vn,error:ut,schemaPath:O,params:_e,options:un,id:_n});if(xi){if(xi instanceof Response){ut=void 0,Tn=xi;break}if(xi instanceof Error){ut=xi;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(ut)throw ut}if(Rr.length)for(let jn=Rr.length-1;jn>=0;jn--){let ut=Rr[jn];if(ut&&typeof ut=="object"&&typeof ut.onResponse=="function"){let cr=await ut.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 bi=Tn.headers.get("Content-Length");if(Tn.status===204||Vn.method==="HEAD"||bi==="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"&&!bi){let ut=await Tn.text();return ut?JSON.parse(ut):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,A,j){return R(A,{...j,method:O.toUpperCase()})},GET(O,A){return R(O,{...A,method:"GET"})},PUT(O,A){return R(O,{...A,method:"PUT"})},POST(O,A){return R(O,{...A,method:"POST"})},DELETE(O,A){return R(O,{...A,method:"DELETE"})},OPTIONS(O,A){return R(O,{...A,method:"OPTIONS"})},HEAD(O,A){return R(O,{...A,method:"HEAD"})},PATCH(O,A){return R(O,{...A,method:"PATCH"})},TRACE(O,A){return R(O,{...A,method:"TRACE"})},use(...O){for(let A of O)if(A){if(typeof A!="object"||!("onRequest"in A||"onResponse"in A||"onError"in A))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");I.push(A);}},eject(...O){for(let A of O){let j=I.indexOf(A);j!==-1&&I.splice(j,1);}}}}function Mp(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 vT(t,e,n){if(!e||typeof e!="object")return "";let r=[],i={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(Mp(u,e[s],n));}let a=r.join(i);return n.style==="label"||n.style==="matrix"?`${i}${a}`:a}function bT(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let a={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(u=>encodeURIComponent(u))).join(a);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]||"&",i=[];for(let a of e)n.style==="simple"||n.style==="label"?i.push(n.allowReserved===true?a:encodeURIComponent(a)):i.push(Mp(t,a,n));return n.style==="label"||n.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function hT(t){return function(n){let r=[];if(n&&typeof n=="object")for(let i in n){let a=n[i];if(a!=null){if(Array.isArray(a)){if(a.length===0)continue;r.push(bT(i,a,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof a=="object"){r.push(vT(i,a,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Mp(i,a,t));}}return r.join("&")}}function uU(t,e){let n=t;for(let r of t.match(lU)??[]){let i=r.substring(1,r.length-1),a=false,s="simple";if(i.endsWith("*")&&(a=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(s="label",i=i.substring(1)):i.startsWith(";")&&(s="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let u=e[i];if(Array.isArray(u)){n=n.replace(r,bT(i,u,{style:s,explode:a}));continue}if(typeof u=="object"){n=n.replace(r,vT(i,u,{style:s,explode:a}));continue}if(s==="matrix"){n=n.replace(r,`;${Mp(i,u)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(u)}`:encodeURIComponent(u));}return n}function pU(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 dU(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 fT(...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[i,a]of r)if(a===null)e.delete(i);else if(Array.isArray(a))for(let s of a)e.append(i,s);else a!==void 0&&e.set(i,a);}return e}function _T(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function gU(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),yT({baseUrl:t.baseUrl,headers:e})}var Af=class extends Error{constructor(n,r){super(r);w(this,"status",n);this.name="ApiError";}};var wf=class extends fy{constructor(n){let{exportedConfig:r,environmentId:i,...a}=n,s=za(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:i??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let u=fs(n.storage),_=new bu({storage:u,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...a,exportedConfig:s,storage:u,impressionStore:_});w(this,"_hydratePromise");let C=n.autoHydrate??true;this._hydratePromise=C?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};var Up=class extends Error{constructor(n,r,i){super(`Experiment "${n}" requests assignment unit "${r}", but this native provider is configured for "${i}"; refuse launch instead of substituting an assignment unit.`);w(this,"experimentHandle");w(this,"requestedUnit");w(this,"subjectUnit");this.name="UnsupportedExperimentAssignmentUnitError",this.experimentHandle=n,this.requestedUnit=r,this.subjectUnit=i;}};function hU(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 xT(t){return hU(t)/4294967296}function fU(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 ST(t,e,n){if(!t)return;let r=fU(n.variants);if(r.length===0)return;let{exposure:i}=n;if(i!==void 0&&(!(i>0)||i<1&&xT(`${t}:${e}:exposure`)>=i))return;let a=r.reduce((u,[,_])=>u+_,0),s=xT(`${t}:${e}:variant`)*a;for(let[u,_]of r)if(s-=_,s<0)return u;return r[r.length-1][0]}function PT(t){let e={};for(let i of t.variants)!Number.isFinite(i.weight)||i.weight<=0||(e[i.variant_id]=(e[i.variant_id]??0)+i.weight);let n=Object.values(e).reduce((i,a)=>i+a,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 i=r.assignment_unit??"user";if(i!==e)throw new Up(r.handle,i,e);n[r.handle]=PT(r);}return TT({experiments:n,subject:t.subject})}function TT(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let i={};for(let[a,s]of Object.entries(e)){let u=ST(r,a,s);u!==void 0&&(i[a]=u);}return {assignments:i}}}}var yU=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function vU(t){let e={};for(let[n,r]of Object.entries(t.properties))e[yU.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 jf=class{constructor(e){w(this,"name");w(this,"handler");w(this,"transform");w(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,i=vU(n);if(this.transform){let a=this.transform(r,i);if(a===null)continue;r=a.eventName,i=a.properties;}try{this.handler(r,i);}catch{}}}};function IT(t){let e=new jf(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function CT(t){let{posthog:e,filter:n,transform:r,name:i}=t;return IT({name:i??"posthog",filter:n,transform:r,handler:(a,s)=>{e.capture(a,s);}})}function bU(t){let{posthog:e,filter:n,transform:r,name:i,syncIdentity:a=false,syncAccountGroup:s=false,mirrorNavigation:u=false}=t,_=i??"posthog",C=CT({posthog:e,filter:n,transform:r,name:_}),I=null,R=null,O=A=>{try{if(a){let j=A.user_id;j&&j!==I?(e.identify?.(j,A.identity.traits),I=j):!j&&I!==null&&(e.reset?.(),I=null);}if(s){let j=A.identity.traits.account_id;typeof j=="string"&&j&&j!==R&&(e.group?.("account",j),R=j);}u&&A.type==="page_view"&&e.capture("$pageview",{$current_url:A.url});}catch{}};return {domain:"events",async resolve(){let j=(await C.resolve())?.consumers??[];return {consumers:[{name:_,consume(oe){for(let Z of oe)O(Z);for(let Z of j)Z.consume(oe);}}]}}}}var xU=["banner_placement"],SU=["banner_placement","in_page_card"],PU=["toast_message"],TU=["modal_overlay"];var IU=["banner_placement","in_page_card","usage_counter","button"],CU=["modal_overlay","inline_gate_message"],EU=["toast_message","modal_overlay","banner_placement"];function kU(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Fp=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);w(this,"status",n);w(this,"requestId",r);this.name="RevTurbineClientSessionError";}},Lp=class{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"endpoint");w(this,"defaultTtlSeconds");w(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=kU(),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 Fp(r.status,n);let i=await r.json();return {client_token:i.client_token,expires_at:i.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 ET=z.enum(["session","day","week","month"]),kT=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(kT),cap:z.object({count:z.number().int().min(1),period:ET})});z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var wT=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(wT).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 OU=/^[a-z0-9._]{1,100}$/,Ms={Persisted:"persisted",Transient:"transient"},Va={Internal:"internal",External:"external"},fa={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},qU="readOnly";function ki(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[qU]===true||(e[n]=r);}return z.object(e)}function ii(t){let e=ki(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(OU)}):e}var {Unrestricted:_i}=fa,{Transient:yi,Persisted:MU}=Ms,{Internal:fo,External:cs}=Va;z.object({page:z.coerce.number().int().min(1).default(1).meta(_i),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(_i)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var Yn=z.object({created_at:z.string().datetime().meta({..._i,readOnly:true}),updated_at:z.string().datetime().meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Ln=z.object({id:z.string().min(1).meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Wn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var UU=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],FU=z.enum(UU).meta({id:"ComponentType","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Np=FU,LU=["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"];z.enum(LU).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var OT=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var Vp=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),$l=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var ms=z.string().min(1).max(200),Er=z.string().min(1).max(100),Bp=z.string().max(500).optional(),Di=z.record(z.string(),z.unknown()).default({}),_o=z.number().int().min(10).max(100).multipleOf(10),zp=z.string().datetime().nullable().default(null),fr=z.object({environment_id:z.string().min(1).default("production").meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo}),kr=z.object({playbook_version_id:z.string().nullable().default(null).meta(_i),is_current:z.boolean().default(true).meta({..._i,readOnly:true}),is_deleted:z.boolean().default(false).meta({..._i,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({..._i,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({..._i,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo}),BU=Ln.merge(Yn).merge(Wn).merge(fr).extend({handle:Er.meta({..._i,readOnly:true}),active:z.boolean().default(true).meta({..._i,readOnly:true})});function ai(t){return BU.meta({id:t,"x-revturbine-schema-persistence":MU,"x-revturbine-schema-exposure":fo})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var qT=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":yi,"x-revturbine-schema-exposure":cs});new Set(Np.options);var DT={Named:"named",Minted:"minted"},MT="x-revturbine-schema-identity";function _a(t="handle"){return {[MT]:{kind:DT.Named,handleField:t}}}function ya(t="handle"){return {[MT]:{kind:DT.Minted,handleField:t}}}var xn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},ra={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},WU="x-revturbine-context",JU="x-revturbine-in-config",ZU="x-revturbine-sdk-input",QU="x-revturbine-source",XU="x-revturbine-deprecation",eF={[xn.Playbook]:ra.Customer,[xn.Branding]:ra.Customer,[xn.Billing]:ra.Stripe,[xn.Metering]:ra.Customer,[xn.CustomerOperations]:ra.Runtime,[xn.EventIngestion]:ra.Runtime};function tr(t,e){return {[WU]:t,[JU]:e.inConfig??t===xn.Playbook,[ZU]:e.sdkInput,[QU]:e.source??eF[t]}}function $p(t){return {deprecated:true,[XU]:{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}=fa,{Persisted:Kp,Transient:Us}=Ms,{External:aa}=Va,FT=tr(xn.Playbook,{sdkInput:true});tr(xn.Playbook,{inConfig:false,sdkInput:false});var gF=tr(xn.Playbook,{inConfig:false,sdkInput:true}),hF=tr(xn.Playbook,{inConfig:false,sdkInput:false,source:ra.Runtime}),fF=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var LT=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa}),NT=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa}),_F=z.object({count:z.number().int().positive().meta(nt),period:NT.meta(nt)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa});z.object({surface_type:z.string().min(1).meta(nt),rules:z.array(_F).meta(nt),cooldown_ms:z.number().int().nonnegative().optional().meta(nt)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Kp,"x-revturbine-schema-exposure":aa,...fa.Operational,...gF});var yF=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":Us,"x-revturbine-schema-exposure":aa}),Kl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...nt,readOnly:true}),name:ms.meta(nt),handle:Er.meta(nt),description:Bp.meta(nt),category:LT.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:_o.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:fF.optional().meta(nt),activation_window_start:z.string().datetime().optional().meta(nt),activation_window_end:z.string().datetime().optional().meta(nt),metadata:Di.meta(nt)}).meta({id:"Placement","x-revturbine-schema-persistence":Kp,"x-revturbine-schema-exposure":aa,...FT,..._a()}),vF=ai("PlacementAnchor"),bF=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa}),xF=z.object({code:bF.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":Us,"x-revturbine-schema-exposure":aa}),UT=Kl.extend({warnings:z.array(xF).optional().meta(nt)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa}),SF=z.object({label:z.string().min(1).max(200).meta(nt),cta_path_type:yF.meta(nt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(nt)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":aa}),Mm=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(SF).default([]).meta(nt),max_per_period:z.number().int().min(0).nullable().default(null).meta(nt),max_period_unit:NT.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":Kp,"x-revturbine-schema-exposure":aa,...FT,...ya()}),PF=ai("PlacementPayloadAnchor"),TF=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({surface_slot_handle:z.string().min(1).max(200).meta(nt),surface_type:Np.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":Kp,"x-revturbine-schema-exposure":aa,...hF,..._a("surface_slot_handle")}),IF=ki(Kl),CF=ki(Mm);({"/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(vF)}}},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(Kl)}}}},"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:ii(Kl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:UT}}}},"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:Kl}}}},"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:IF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:UT}}}},"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:Kl}}}},"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:LT,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(PF)}}},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(Mm)}}}},"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:ii(Mm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mm}}}},"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:CF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mm}}}},"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(TF)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var jF="__self__",OF={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},VT={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:{}}},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:jF,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:OF},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 {Unrestricted:je}=fa,{Persisted:Bf,Transient:Ri}=Ms,{Internal:KT,External:vi}=Va,HT=tr(xn.Playbook,{sdkInput:true}),DF=tr(xn.Playbook,{inConfig:false,sdkInput:false}),GT=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":Ri,"x-revturbine-schema-exposure":vi}),Gp=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),MF=z.enum(OT).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),UF=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),YT=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),Df=z.object({entitlement_id:z.string().min(1).meta(je),entitlement_handle:z.string().min(1).meta(je),status:MF.meta(je),limit:z.number().optional().meta(je),used:z.number().optional().meta(je),allocation:Gp.optional().meta(je),enforcement:YT.optional().meta(je),source:UF.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":Ri,"x-revturbine-schema-exposure":vi,...fa.Operational});z.object({account:z.record(z.string(),Df).optional().meta(je),instance:z.record(z.string(),Df).optional().meta(je),user:z.record(z.string(),Df).optional().meta(je)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi,...fa.Operational});var FF=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),LF=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),WT=z.object({kind:LF.meta(je),id:z.string().min(1).meta(je)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),NF=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),Zl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),name:ms.meta(je),handle:Er.meta(je),customer_facing_description:z.string().max(500).optional().meta(je),type:Vp.meta(je),unit:z.string().max(100).optional().meta(je),period_scope:GT.optional().meta(je),allocation:Gp.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:Di.meta(je)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Bf,"x-revturbine-schema-exposure":vi,...HT,..._a()}),VF=ai("EntitlementAnchor"),rc=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(WT).min(1).meta(je),segment_ids:z.array(z.string()).default([]).meta(je),visibility:FF.default("public").meta(je),period_scope:GT.optional().meta(je),instance:z.string().max(100).optional().meta(je),reset_period:NF.optional().meta(je),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),enforcement:YT.optional().meta(je),warning_threshold_percent:_o.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:Gp.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":Bf,"x-revturbine-schema-exposure":KT,...HT,...ya()}),BF=ai("EntitlementRuleAnchor");rc.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 zF=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),$F=z.object({code:zF.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":Ri,"x-revturbine-schema-exposure":vi}),Mf=rc.extend({warnings:z.array($F).optional().meta(je)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ri,"x-revturbine-schema-exposure":vi}),Uf=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":Bf,"x-revturbine-schema-exposure":KT,...DF,...ya()}),KF=ki(Zl),HF=ki(rc);({"/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(VF)}}},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(BF)}}},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(Zl)}}}},"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:ii(Zl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Zl}}}},"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:Zl}}}},"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:KF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zl}}}},"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(rc)}}}},"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:ii(rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mf}}}},"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:HF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mf}}}},"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:Mf}}}},"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(Uf)}}}},"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:ii(Uf)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Uf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:bt}=fa,{Persisted:Vm,Transient:Bm}=Ms,{Internal:Ba}=Va,JT=tr(xn.Playbook,{sdkInput:true}),ZT=tr(xn.Playbook,{inConfig:false,sdkInput:true}),GF=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":Ba}),zf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":Ba}),QT=z.object({name:ms.meta(bt),handle:Er.meta(bt),plan_id:z.string().nullable().optional().meta(bt),segment_id:z.string().nullable().optional().meta(bt),trial_limit_type:zf.default("time").meta(bt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(bt),grace_period_days:z.number().int().min(0).default(0).meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),require_payment_method:z.boolean().default(false).meta(bt),auto_convert:z.boolean().default(true).meta(bt),convert_to_plan_id:z.string().optional().meta(bt),fallback_plan_id:z.string().optional().meta(bt),limit_per_customer:z.number().int().min(1).default(1).meta(bt),is_active:z.boolean().default(true).meta(bt),metadata:Di.meta(bt)}),Hl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...bt,readOnly:true})}).merge(QT).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ba,...JT,..._a()}),YF=ai("FreeTrialRuleAnchor"),WF=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":Ba}),XT=z.object({name:ms.meta(bt),handle:Er.meta(bt),premium_plan_id:z.string().min(1).meta(bt),fallback_plan_id:z.string().min(1).meta(bt),segment_id:z.string().nullable().optional().meta(bt),trial_limit_type:zf.default("time").meta(bt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),start_policy:WF.default("signup").meta(bt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(bt),entitlements_during_trial:z.array(z.string()).default([]).meta(bt),is_active:z.boolean().default(true).meta(bt),metadata:Di.meta(bt)}),Gl=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...bt,readOnly:true})}).merge(XT).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ba,...JT,..._a()}),JF=ai("ReverseTrialRuleAnchor"),eI=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":Ba}),tI=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":Ba}),Yl=Ln.merge(Yn).merge(Wn).extend({trial_limit_policy:eI.default("1_per_lifetime").meta(bt),eligibility_scope:tI.default("per_customer").meta(bt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ba,...ZT}),Wl=Ln.merge(Yn).merge(Wn).extend({trial_limit_policy:eI.default("1_per_lifetime").meta(bt),eligibility_scope:tI.default("per_customer").meta(bt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ba,...ZT}),Hp=Ln.merge(Yn).merge(Wn).extend({customer_id:z.string().min(1).meta(bt),rule_id:z.string().min(1).meta(bt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(bt),plan_id:z.string().min(1).meta(bt),status:GF.default("active").meta(bt),started_at:z.string().datetime().meta({...bt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(bt),trial_limit_type:zf.default("time").meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),converted_at:zp.meta(bt),cancelled_at:zp.meta(bt),metadata:Di.meta(bt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ba});({"/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(YF)}}},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(Hl)}}}},"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:Hl}}}},"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:Hl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Hl}}}},"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(JF)}}},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(Gl)}}}},"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:Gl}}}},"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:Gl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gl}}}},"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(Yl)}}}},"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:Yl}}}},"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:Yl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yl}}}},"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(Wl)}}}},"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:Wl}}}},"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:Wl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wl}}}},"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(Hp)}}}},"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:Hp}}}},"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:Hp}}}},"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:Hp}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Xt,Financial:ic}=fa,{Persisted:zm,Transient:Yp}=Ms,{External:us}=Va,ZF=tr(xn.Playbook,{sdkInput:true}),QF=tr(xn.Playbook,{sdkInput:false}),$f=tr(xn.Billing,{sdkInput:false}),Fs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Yp,"x-revturbine-schema-exposure":us}),$m=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Yp,"x-revturbine-schema-exposure":us}),Wp=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Yp,"x-revturbine-schema-exposure":us}),Ql=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:ms.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:Fs.default("public").meta(Xt),metadata:Di.meta(Xt)}).meta({id:"Plan","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...ZF,..._a()}),XF=ai("PlanAnchor"),Xl=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(ic),currency:$l.meta(ic),pricing_model:$m.meta(Xt),visibility:Fs.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:Wp.default("static").meta(Xt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...$f,...ya()}),eL=ai("PlanVariationAnchor"),ec=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...Xt,readOnly:true}),name:ms.meta(Xt),handle:Er.meta(Xt),sort_order:z.number().int().default(0).meta(Xt),visibility:Fs.default("public").meta(Xt),metadata:Di.meta(Xt)}).meta({id:"AddOn","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...QF,..._a()}),tL=ai("AddOnAnchor"),tc=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(ic),currency:$l.meta(ic),pricing_model:$m.meta(Xt),visibility:Fs.default("public").meta(Xt),stripe_price_id:z.string().optional().meta(Xt),price_source:Wp.default("static").meta(Xt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...$f,...ya()}),nL=ai("AddOnVariationAnchor"),rL=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Yp,"x-revturbine-schema-exposure":us}),nc=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:rL.meta(Xt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(ic),currency:$l.meta(ic),pricing_model:$m.meta(Xt),nickname:z.string().nullable().default(null).meta(Xt),is_mock:z.boolean().default(false).meta(Xt),last_updated_from_stripe:zp.meta(Xt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...$f}),iL=ki(Ql),aL=ki(Xl),sL=ki(ec),oL=ki(tc),lL=ki(nc);({"/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(Ql)}}},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:ii(Ql)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ql}}},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:Ql}}},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:iL}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ql}}},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(eL)}}},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(Xl)}}}},"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:ii(Xl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Xl}}}},"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:Xl}}}},"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:aL}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Xl}}}},"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(tL)}}},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(ec)}}}},"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:ii(ec)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:ec}}}},"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:ec}}}},"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:sL}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:ec}}}},"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(nL)}}},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(tc)}}}},"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:ii(tc)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:tc}}}},"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:tc}}}},"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:oL}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:tc}}}},"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(nc)}}}},"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:ii(nc)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:nc}}}},"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:nc}}}},"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:lL}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:nc}}}},"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}=fa,{Persisted:sc,Transient:Tt}=Ms,{Internal:sa,External:Vt}=Va,vt=tr(xn.Playbook,{sdkInput:true}),BT=tr(xn.Playbook,{sdkInput:false}),ac=tr(xn.Playbook,{inConfig:false,sdkInput:false}),nI=tr(xn.Playbook,{inConfig:false,sdkInput:true}),Jl=tr(xn.Playbook,{inConfig:false,sdkInput:true,source:ra.CodeConstant}),Ff=tr(xn.Playbook,{inConfig:false,sdkInput:true,source:ra.Runtime}),Lf=tr(xn.Playbook,{inConfig:false,sdkInput:false,source:ra.Runtime}),cL=tr(xn.Billing,{sdkInput:false}),mL=tr(xn.Metering,{sdkInput:false}),uL=tr(xn.Branding,{inConfig:true,sdkInput:true}),pL=tr(xn.Branding,{sdkInput:false}),dL="1.0.0",Um=Ln.merge(Yn).merge(Wn).merge(fr).merge(kr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:ms.meta(h),handle:Er.meta(h),description:Bp.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Di.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":sa,...ac,..._a()}),gL=ai("SeatTypeAnchor"),Fm=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:Di.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":sa,...ac,..._a()}),hL=ai("PersonalizationTokenAnchor"),fL=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":sa}),Nf=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:fL.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:Di.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":sa,...cL,...ya()});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":Tt,"x-revturbine-schema-exposure":Vt,...pL});var Lm=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:Di.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":sa,...mL,...ya()}),zT=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":sa}),Nm=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:zT.default("warn").meta(h),hard_limit_action:zT.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":sc,"x-revturbine-schema-exposure":sa,...nI,...ya()}),_L=ai("UsageEnforcementSettingsAnchor"),yL=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":Tt,"x-revturbine-schema-exposure":sa}),vL=z.object({id:z.string().min(1).meta(h),group:z.array(yL).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":Tt,"x-revturbine-schema-exposure":sa}),bL=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":sa}),rI=z.object({capRules:z.array(vL).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:bL.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":sa}),Vf=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:rI.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":sc,"x-revturbine-schema-exposure":sa,...nI,...ya()}),xL=ai("PlacementSettingsAnchor"),SL=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":Tt,"x-revturbine-schema-exposure":Vt}),PL=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(SL).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_handle:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),TL=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:Fs.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),IL=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:Fs.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),CL=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),currency:$l.meta(h),pricing_model:$m.meta(h),visibility:Fs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Wp.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),EL=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),currency:$l.meta(h),pricing_model:$m.meta(h),visibility:Fs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Wp.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),kL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),RL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),AL=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:rI.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),wL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),jL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),OL=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:Vp.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),qL=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(WT).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:Vp.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}),...rc.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:Gp.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),DL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),ML=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),UL=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":Tt,"x-revturbine-schema-exposure":Vt}),FL=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(UL).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),LL=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":Tt,"x-revturbine-schema-exposure":Vt}),NL=z.object({name:z.string().min(1).meta(h),action_type:LL.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),VL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),BL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),$T=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":Tt,"x-revturbine-schema-exposure":Vt}),zL=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:$T.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:$T})).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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),$L=z.object({label:z.string().meta(h),path:qT.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),iI=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array($L).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),aI=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":Tt,"x-revturbine-schema-exposure":Vt}),KL=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":Tt,"x-revturbine-schema-exposure":Vt}),sI=z.object({max_per_period:KL.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),HL=z.object({id:z.string().min(1).meta(h),target:aI.meta(h),surfaces:z.array(iI).meta(h),caps:sI.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":Tt,"x-revturbine-schema-exposure":Vt}),GL=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:_o}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_o}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_o}),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":Tt,"x-revturbine-schema-exposure":Vt}),YL=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),WL=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:YL.meta(h),trigger:GL.meta(h),payloads:z.array(HL).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),JL=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:aI.meta(h),caps:sI.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(iI).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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),ZL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),QL=Ln.merge(QT).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...ac}),XL=Ln.merge(XT).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...ac}),eN=z.object({plans:z.array(TL).meta({...h,...vt}),addons:z.array(IL).optional().meta({...h,...vt}),entitlements:z.array(OL).meta({...h,...vt}),entitlement_rules:z.array(qL).meta({...h,...vt}),segments:z.array(PL).meta({...h,...vt}),content_ui_paths:z.array(NL).meta({...h,...vt}),slot_configs:z.array(DL).optional().meta({...h,...vt,...$p({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,...vt,...$p({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,...uL,...$p({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(ML).optional().meta({...h,...vt}),message_blocks:z.array(zL).optional().meta({...h,...vt}),placement_payloads:z.array(JL).optional().meta({...h,...vt}),placements:z.array(WL).optional().meta({...h,...vt}),content_promotions:z.array(VL).optional().meta({...h,...vt}),personalization_tokens:z.array(BL).optional().meta({...h,...vt}),surface_templates:z.array(FL).optional().meta({...h,...vt}),free_trial_rules:z.array(QL).optional().meta({...h,...BT}),reverse_trial_rules:z.array(XL).optional().meta({...h,...BT}),plan_variations:z.array(CL).optional().meta({...h,...vt}),addon_variations:z.array(EL).optional().meta({...h,...vt}),extension_rules:z.array(ZL).optional().meta({...h,...vt}),seat_types:z.array(kL).optional().meta({...h,...vt}),enforcement_defaults:z.array(RL).optional().meta({...h,...vt}),placement_settings:z.array(AL).optional().meta({...h,...vt}),segment_dimensions:z.array(wL).optional().meta({...h,...vt}),meter_bindings:z.array(jL).optional().meta({...h,...vt}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...ac}),signal_catalog:z.object({}).strict().optional().meta({...h,...ac})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),tN=z.object({artifact_type:z.literal("playbook").meta({...h,...Jl,readOnly:true}),format_version:z.literal(dL).meta({...h,...Jl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Jl}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Ff,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...Lf,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...Lf,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...Lf,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Ff,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Jl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Jl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Jl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...Ff}),oI=tN.extend(eN.shape).meta({"x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});function nN(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function lI(t){if(!nN(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(lI,oI).meta({id:"Playbook","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});z.preprocess(lI,oI.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});({"/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(gL)}}},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(Um)}}}},"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:ii(Um)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Um}}}},"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:Um.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Um}}}},"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(hL)}}},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(Fm)}}}},"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:ii(Fm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fm}}}},"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:Fm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fm}}}},"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:ki(Nf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Nf}}}},"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(Lm)}}}},"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:ii(Lm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Lm}}}},"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:Lm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Lm}}}},"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(_L)}}},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(Nm)}}}},"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:ii(Nm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nm}}}},"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:Nm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nm}}}},"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(xL)}}},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:ki(Vf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Vf}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var iN=["web-client"],aN=z.enum(iN),sN=["method","meta","component"],oN=z.enum(sN),lN=["ts","python","java","csharp","rust"];z.enum(lN);var cN=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(),mN=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:oN,appliesTo:z.array(aN).min(1),composes:z.string().min(1).optional(),perLanguage:cN.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"]}),uN=z.object({version:z.number().int().positive(),functions:z.array(mN).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let i of [r.canonical,...r.aliases]){let a=n.get(i);a!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${a}")`,path:["functions"]}),n.set(i,r.canonical);}});uN.parse({version:4,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:"getEligiblePlans",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public plan variations eligible for the current user, including structured display prices."},{canonical:"getEligibleAddons",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public add-on variations eligible for the current user, including structured display prices."},{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 pN=[{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 dN(){let t=[];for(let[e,n]of Object.entries(VT))for(let[r,i]of Object.entries(n.fields)){let a=i.reference;if(a){if(!a.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${a.table} has no onDelete policy`);t.push({from:e,field:r,to:a.table,by:a.by,kind:a.kind,onDelete:a.onDelete,resolution:"playbook"});}}return t}function gN(t){return [...t].sort((e,n)=>Jp(e.from,n.from)||Jp(e.field,n.field)||Jp(e.to,n.to)||Jp(e.targetKind??"",n.targetKind??""))}function Jp(t,e){return t<e?-1:t>e?1:0}Object.freeze(gN([...dN(),...pN]));
2
- export{wf as BrowserRuntime,qc as BrowserStorage,Sy as CONTROL_PLANE_EVENT_SOURCE,Py as CONTROL_PLANE_SOURCE_KEY,my as CapEnforcer,Gd as DEFAULT_BRANDING,ha as DEFAULT_THEME,fd as DecisionEngine,jc as DomainProviderRegistry,qp as EntitlementGate,xU as FIXED_BANNER_TEMPLATE_IDS,IU as FIXED_SURFACE_TEMPLATE_IDS,CU as GATED_SURFACE_TEMPLATE_IDS,SU as GENERAL_BANNER_TEMPLATE_IDS,TU as GENERAL_MODAL_TEMPLATE_IDS,PU as GENERAL_TOAST_TEMPLATE_IDS,zo as InMemoryStorage,cy as InteractionTracker,EU as MESSAGE_SURFACE_TEMPLATE_IDS,Op as PlacementController,Vl as PlacementTypeRegistry,pT as RECOGNIZED_UPDATE_KEYS,Af as RevTurbineApiError,If as RevTurbineCustomerSdk,Lp as RevTurbineServer,jm as RuntimeMode,_y as SERVER_TRAITS_DOMAIN,Dp as SdkSession,Oc as ServerUserContextProvider,Up as UnsupportedExperimentAssignmentUnitError,PT as adaptExperimentVersionToBucketer,Pc as applyValueMaps,ST as bucketSubject,Zd as buildControlPlaneEvent,aU as clearPersistedTheme,IT as createAnalyticsProvider,TT as createBasicExperimentProvider,EW as createChainedPlacementRequest,PW as createCustomEndpointRuntimeConfig,CW as createEntitlementPlacementRequest,_E as createHydrationProviders,OM as createLocalRuntimeConfig,_U as createNativeExperimentAssignmentProvider,CT as createPostHogAnalyticsProvider,bU as createPostHogIntegration,gU as createRevTurbineApiClient,RW as createSemanticEvent,SW as createServerRuntimeConfig,IW as createSlotPlacementRequest,uu as createStaticPlacementContentLookupProvider,Io as createStaticPlacementResolver,fE as createStaticProviders,TW as createStrictLocalRuntimeConfig,kW as createTreatmentInteraction,xW as defineUiPathResolvers,Hm as deriveLocalTrialStatusFromInstance,ed as deriveReverseTrialGrants,qm as entitlementResultDenies,yc as evaluateSegments,Gm as evaluateTrialStatus,e_ as findActiveTrialInstance,td as findLatestStartedTrialInstance,EM as formatCurrencyMinorUnits,vM as getDefaultRegistry,oU as initRevTurbine,Yr as isBrowser,Bo as isServer,Rf as loadTheme,Bl as mergeTheme,Gf as normalizeConfigArtifactOrThrow,yM as parsePromotion,_M as parseUiPath,bM as resetDefaultRegistry,Yd as resolveBranding,fM as resolveContent,jp as resolveLocalPlaybook,Rd as resolvePayloadForUser,pu as resolvePayloadForUserWithProvider,fs as resolvePersistentStorage,Qd as resolveSessionStorage,WP as resolveTokens};//# sourceMappingURL=headless.js.map
1
+ import {z}from'zod';var mI=Object.defineProperty;var uI=(t,e,n)=>e in t?mI(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var w=(t,e,n)=>uI(t,typeof e!="symbol"?e+"":e,n);function pI(){try{return "production"}catch{return}}function dI(){try{return typeof process<"u"}catch{return false}}function Ls(){let t=pI();if(t!==void 0)return t!=="production";if(dI())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var Km="1.0.0",Gf=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],gI=["slot_configs","content_overrides"];function hI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fI(t,e){if(!Ls())return;let n=gI.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 _I(t,e){for(let n of Gf)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function yI(t){return t.artifact_type==="playbook"&&t.format_version===Km&&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&&Gf.every(e=>Array.isArray(t[e]))}function vI(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 Yf(t,e,n){if(t===void 0)return;if(!hI(t))throw new Error(`Invalid ${e}: expected top-level object`);fI(t,e),_I(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!==Km)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==Km)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let i=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,a=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!i)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!a)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(!vI(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:u,..._}=t,C=r?t.playbook_version_id??null:u??null,I={..._,artifact_type:"playbook",format_version:Km,playbook_handle:t.playbook_handle??"default",playbook_version_id:C,tenant_id:i,environment_id:a};if(!yI(I))throw new Error(`Invalid ${e}: malformed Playbook header`);return I}function ha(t,e,n){return Yf(t,e,n)}var Wf=z.enum(["session","day","week","month"]),Jf=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(Jf),cap:z.object({count:z.number().int().min(1),period:Wf})});function bI(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 Qf(t,e){return `${t}:${e}`}function oc(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 i of t.rules){if(!i.group.some(_=>_.kind==="template"?_.id===n.templateId:_.kind==="slot"?_.id===n.slotId:false))continue;let s=Qf(i.id,i.cap.period);if((r.get(s)??0)>=i.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:i.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:i}=t.perPayload;if(i!=null&&Number.isFinite(i)&&i>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let a of n)for(let s of a.rules){let u=bI(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 Wp(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 Xf=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(Xf).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 Zp=864e5,TI=75;function e_(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function II(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=TI?"running_out":"active"}function CI(t,e,n){let r=Math.max(0,e-t),i=Math.max(0,n-t),a=Math.max(0,e-n),s=Math.max(1,Math.round(r/Zp)),u=Math.min(s,Math.floor(i/Zp)),_=Math.max(0,Math.ceil(a/Zp)),C=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:u,daysRemaining:_,daysTotal:s,progressPercent:C}}function EI(t,e){let n=Math.max(1,e),r=Math.max(0,t),i=Math.max(0,n-r),a=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:i,usageLimit:n,progressPercent:a}}function Hm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:i,usageBalances:a}=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 _=e.trial_limit_type??"time",C=0,I=false,k,O,A,j,M,oe;if(_==="usage"){let J=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),at=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof J!="string"||typeof at!="number"||at<1)return;let Pn=a?.[J]??0,An=EI(Pn,at);C=An.progressPercent,I=An.isExpiredByBounds,A=An.usageConsumed,j=An.usageRemaining,M=An.usageLimit,oe=J;}else {let J=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(J))return;let at=CI(s,J,u);C=at.progressPercent,I=at.isExpiredByBounds,k=at.dayNumber,O=at.daysRemaining;}let Z=e_(e.status,I),ge=II(Z,C),De;e.rule_type==="reverse_trial"?De=i: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:ge,trial_limit_type:_,progress_percent:C,...k!==void 0?{day_number:k}:{},...O!==void 0?{days_remaining:O}:{},...oe!==void 0?{usage_entitlement_handle:oe}:{},...A!==void 0?{usage_consumed:A}:{},...j!==void 0?{usage_remaining:j}:{},...M!==void 0?{usage_limit:M}:{}}}function t_(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let i,a=-1/0;for(let s of t){let u=Date.parse(s.started_at);if(Number.isNaN(u)||r<u)continue;let _=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(_=(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)||(_=r>=I);}let C=e_(s.status,_);C!=="active"&&C!=="converted"||u>a&&(i=s,a=u);}return i}function Qp(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 Xp(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,i=-1/0;for(let a of t){if(a.status!=="active"&&a.status!=="expired"&&a.status!=="converted")continue;let s=Date.parse(a.started_at);Number.isNaN(s)||n<s||s>i&&(r=a,i=s);}return r}function Gm(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:i,usageBalances:a,basePlanHandle:s}=t,u=Xp(r,i);if(!u)return {trial:void 0,reverseGrants:null};if(u.rule_type==="reverse_trial"){let I=(n??[]).find(A=>A.id===u.rule_id),k=Hm({instance:u,...I!==void 0?{rule:I}:{},nowIso:i,...s!==void 0?{basePlanHandle:s}:{},...a!==void 0?{usageBalances:a}:{}}),O=I!==void 0?Qp(u,I):null;return {trial:k,reverseGrants:O}}let _=(e??[]).find(I=>I.id===u.rule_id);return {trial:Hm({instance:u,..._!==void 0?{rule:_}:{},nowIso:i,...s!==void 0?{basePlanHandle:s}:{},...a!==void 0?{usageBalances:a}:{}}),reverseGrants:null}}var RI="__no_dim__";function cc(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let a of t){let s=n(a)??RI,u=i.get(s)??[];u.push(a),i.set(s,u);}for(let a of i.values())if(!a.some(s=>r.has(s)))return false;return true}function kI(t,e){return t<e?-1:t>e?1:0}function he(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function uc(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Xn(...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 bo(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function ed(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function pc(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 td(t){if(!he(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 nd(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function n_(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 r_(t){let e=t,n=he(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 i=he(t.content)?t.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(s=>typeof s=="string"):[]}function rd(t,e){let n=r_(t);if(n.length===0||!e)return true;let r=n_(e);return r.length===0?true:n.some(i=>{let a=i.toLowerCase();return r.some(s=>a===s||a.endsWith(`_${s}`)||a.includes(s))})}function id(t,e){if(e.length===0)return null;let n=[...e].sort((i,a)=>i.tier_position!==a.tier_position?i.tier_position-a.tier_position:i.sort_order!==a.sort_order?i.sort_order-a.sort_order:kI(i.source_id,a.source_id)),r=n.findIndex(i=>i.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function xo(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function ad(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function sd(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function _a(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))he(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function Ym(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(he(t.plan)&&typeof t.plan.handle=="string"&&t.plan.handle.trim().length>0)return t.plan.handle.trim()}function Ns(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 i of t.plans){if(!he(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let s=typeof i.name=="string"?i.name.trim():"";if(s.length>0)return s}}}function Wm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function ps(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 dc(t){let e=t,n=he(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(i=>i!==null)??0}function Jm(t){let e=t,n=he(t.content)?t.content:{};return [In(e.priority),In(e.placement_priority),In(n.priority),In(n.placement_priority)].find(i=>i!==null)??0}function od(t){let e=he(t.content)?t.content:{};return [In(e.usage_percent),In(e.trial_percent_elapsed),In(e.threshold_percent)].find(r=>r!==null)??dc(t)}var AI=new Set(["trial_started","trial_ended","trial_converted"]),wI=new Set(["trial_progress","trial_ending"]);function ld(t){let e=he(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&AI.has(n))return 1;if(n&&wI.has(n))return 3;let r=[In(e.usage_percent),In(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function gc(t){let e=t,n=he(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(i=>i!==null)??null}function cd(t){let e=he(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 i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let a=In(i);return a!==null?String(a):null}function md(t){let n=(he(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(i=>typeof i=="string"?i.trim():In(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=In(n);return r!==null?[String(r)]:[]}function mc(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>mc(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${mc(r)}`).join(",")}}`}function ud(t){return he(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 OI=/^[a-z0-9._]{1,100}$/,ds={Persisted:"persisted",Transient:"transient"},ya={Internal:"internal",External:"external"},ra={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},qI="readOnly";function Si(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[qI]===true||(e[n]=r);}return z.object(e)}function Hr(t){let e=Si(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(OI)}):e}var {Unrestricted:oi}=ra,{Transient:li,Persisted:MI}=ds,{Internal:Vs,External:$a}=ya;z.object({page:z.coerce.number().int().min(1).default(1).meta(oi),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(oi)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var Bn=z.object({created_at:z.string().datetime().meta({...oi,readOnly:true}),updated_at:z.string().datetime().meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),Un=z.object({id:z.string().min(1).meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),zn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var UI=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],a_=z.enum(UI).meta({id:"ComponentType","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),Zm=a_,FI=["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"];z.enum(FI).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var s_={button:"button",plans_page_ctas:"in_page",plans_page_full:"full_page",inline_gate_message:"inline",tooltip:"tooltip",in_page_card:"in_page",usage_counter:"in_page",credit_counter:"in_page",trial_counter:"in_page",banner:"banner",modal_optional:"modal",modal_blocking:"modal",toast:"toast",email:"email",sms:"sms",push:"push",cli:"cli",agent_connector:"agent",custom_in_app:"custom"},o_=Object.freeze({...s_,modal_overlay:"modal",banner_placement:"banner",full_page:"full_page"});function l_(t){let e=a_.safeParse(t);return e.success?e.data:s_[t]}var c_=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});var Qm=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a}),So=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":$a});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var Ka=z.string().min(1).max(200),_r=z.string().min(1).max(100),Xm=z.string().max(500).optional(),Ai=z.record(z.string(),z.unknown()).default({}),Bs=z.number().int().min(10).max(100).multipleOf(10),eu=z.string().datetime().nullable().default(null),mr=z.object({environment_id:z.string().min(1).default("production").meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs}),yr=z.object({playbook_version_id:z.string().nullable().default(null).meta(oi),is_current:z.boolean().default(true).meta({...oi,readOnly:true}),is_deleted:z.boolean().default(false).meta({...oi,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...oi,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...oi,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...oi,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs}),LI=Un.merge(Bn).merge(zn).merge(mr).extend({handle:_r.meta({...oi,readOnly:true}),active:z.boolean().default(true).meta({...oi,readOnly:true})});function Gr(t){return LI.meta({id:t,"x-revturbine-schema-persistence":MI,"x-revturbine-schema-exposure":Vs})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Vs});var m_=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":li,"x-revturbine-schema-exposure":$a});var NI=new Set(Zm.options);function tu(t,e){if(!he(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=he(t.surface)?t.surface:{},i=NI.has(r.type)?r.type:"custom",a=he(t.cta_path)?t.cta_path:he(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:i,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:he(t.content)?t.content:{},...he(t.promotion)?{promotion:t.promotion}:{},cta_path:a,ui_path:a,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 VI=999999;function BI(t){return t==null||t==="unlimited"||t===VI}function hc(t){return BI(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function zI(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 d_(t,e,n){return t.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(s=>zI(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),a=cc(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:i,matchesSegment:a,matched:i&&a}})}function g_(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return hc(e.limit_value)??0;case "credits":return hc(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return hc(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function h_(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let i of t){let a=e(i);(n===void 0||a>r)&&(n=i,r=a);}return n}function $I(t){return h_(t,e=>g_(e.rule))?.rule}function pd(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let i=d_(r,n,t.segmentDimensions);return $I(i.filter(a=>a.matched))}function KI(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 HI(t,e,n){let r=new Map;for(let i of n)typeof i.handle=="string"&&r.set(i.handle,typeof i.dimension_id=="string"?i.dimension_id:void 0);return cc(KI(t),e,i=>r.get(i))}function u_(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 fc(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:i,segmentIds:a,usageBalances:s,userUsage:u,trialGrantedEntitlementHandles:_,effectivePlanHandle:C}=t,k=(r.entitlements??[]).find(lt=>typeof lt?.unique_handle=="string"&&lt.unique_handle===e),O=typeof k?.unique_handle=="string"?k.unique_handle:e,A=typeof k?.unique_handle=="string"?k.unique_handle:void 0,j=!!(_&&_.size>0&&(_.has(e)||_.has(O)||A!==void 0&&_.has(A)));if(j&&(C===void 0||C===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let oe=String((j&&C?C:i)||"").trim().toLowerCase(),ge=(r.plans??[]).find(lt=>typeof lt.unique_handle=="string"&&lt.unique_handle.toLowerCase()===oe),De=typeof ge?.unique_handle=="string"?ge.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(Wn=>he(Wn)&&Wn.kind==="plan"&&typeof Wn.id=="string").map(Wn=>Wn.id):Array.isArray(lt.plan_ids)?lt.plan_ids.filter(Wn=>typeof Wn=="string"):Array.isArray(lt.planIds)?lt.planIds.filter(Wn=>typeof Wn=="string"):[]).includes(De)||!HI(lt,a,r.segments??[])));if(J.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let at=(()=>{let lt=(r.entitlements??[]).find(Nn=>Nn.unique_handle===O);return lt&&typeof lt.type=="string"?lt.type:void 0})(),Pn=lt=>{let Nn=he(lt)?lt:{},Wn={...he(Nn.type_fields)?Nn.type_fields:he(Nn.typeFields)?Nn.typeFields:{},...Nn};return typeof Wn.kind!="string"&&at&&(Wn.kind=at),Wn},An=h_(J,lt=>{let Nn=Pn(lt);return g_({kind:typeof Nn.kind=="string"?Nn.kind:"",fields:Nn})})??J[0],ve=Pn(An);typeof ve.kind=="string"?ve.kind:void 0;let gn=lt=>{let Nn=u?.[lt];if(he(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 nu(ve,wn)}function p_(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function f_(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function nu(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=hc(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?p_(u_(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,i=r===void 0?void 0:hc(r),a=Number(t.initial_grant),s=i!==void 0&&i>=0?i:Number.isFinite(a)&&a>=0?a:void 0;return s!==void 0&&Number.isFinite(s)?p_(u_(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 dd(t,e,n,r,i=80){let a=e.get(t);if(a)return a;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let u=Number(r[t]);if(u>0)return {limit:u,warningPercent:i}}return null}var GI=0;function YI(){return `core_${Date.now()}_${++GI}`}function __(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var gd=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=YI(),n=this.placements.get(t.placementId);if(this.interactionTracker){let a=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(a.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:a.reason?[a.reason]:[],suppressionReason:a.reason,content:__(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let i={__providers:await this.registry.resolveAll()};if(t.traits&&(i.traits=t.traits),this.placementResolver){let a=await this.placementResolver(t,n,i);if(a.visible&&a.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(a.output);if(!s.allowed)return {...a,visible:false,reasonCodes:[...a.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return a}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:__("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",i=e.entitlements;if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let a=i.entries[t];if(!a)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=i.usage?.[t];if(e.rules){let u=pd(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(u){let _={kind:u.kind,...u.fields};if(f_(_.kind))return nu(_,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:a.status,allowed:a.status==="allowed",reason:a.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};function y_(t,e){let n=e.segmentDimensions??{},r=t.filter(a=>a.visibility==="public"&&cc(a.segment_handle===null?[]:[a.segment_handle],e.segmentIds,s=>n[s])),i=r.filter(a=>a.segment_handle!==null);return i.length>0?i:r.filter(a=>a.segment_handle===null)}function v_(t){return {price:t.price_amount,currency:t.currency,pricingModel:t.pricing_model,billingPeriod:t.billing_period}}function ru(t,e,n){return t.filter(r=>r.visibility==="public").flatMap(r=>y_(e.filter(i=>i.plan_handle===r.unique_handle),n).map(i=>({handle:r.unique_handle,name:r.name,tierPosition:r.tier_position,sortOrder:r.sort_order,variationHandle:i.handle,segmentHandle:i.segment_handle,price:v_(i)}))).sort((r,i)=>r.tierPosition-i.tierPosition||r.sortOrder-i.sortOrder||r.handle.localeCompare(i.handle)||r.variationHandle.localeCompare(i.variationHandle))}function iu(t,e,n){return t.filter(r=>r.visibility==="public").flatMap(r=>y_(e.filter(i=>i.addon_handle===r.unique_handle),n).map(i=>({handle:r.unique_handle,name:r.name,sortOrder:r.sort_order,variationHandle:i.handle,segmentHandle:i.segment_handle,price:v_(i)}))).sort((r,i)=>r.sortOrder-i.sortOrder||r.handle.localeCompare(i.handle)||r.variationHandle.localeCompare(i.variationHandle))}var b_=["high","medium","low"];function _c(t,e){return t==="active"?b_.includes(e):t===e}var JI="activity_level";function x_(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),i=t.value,a=t.field===JI;switch(t.operator){case "eq":return a?_c(i,r):r===i;case "neq":return a?!_c(i,r):r!==i;case "gt":return Number(r)>Number(i);case "lt":return Number(r)<Number(i);case "gte":return Number(r)>=Number(i);case "lte":return Number(r)<=Number(i);case "contains":return r.includes(i);case "in":{let s=i.split(",").map(u=>u.trim());return a?s.some(u=>_c(u,r)):s.includes(r)}default:return false}}function yc(t,e,n={}){return t.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0),a=r.experiment_handle;if(a){if(!Object.prototype.hasOwnProperty.call(n,a))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>x_(s,e))}).map(r=>r.handle)}function S_(t){let e={};for(let n of t){let r=n.experiment_handle;r&&(e[n.handle]=r);}return e}function P_(t,e,n={}){for(let r of e){let i=t[r];if(!i)continue;let a=n[i];if(typeof a=="string")return {experiment_id:i,variant_key:a}}}function hd(t,e){let n=String(t.field||""),r=String(t.operator||""),i=String(t.value||""),a=e[n],s=typeof a=="string"||typeof a=="number"||typeof a=="boolean"?a:null,u=x_(t,e);return {field:n,operator:r,expected:i,actual:s,matched:u}}function au(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function vc(t){let e=2166136261;for(let i=0;i<t.length;i+=1)e^=t.charCodeAt(i),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),au(n)}var fd={async sha256Base64Url(t){return vc(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 T_={Named:"named",Minted:"minted"},I_="x-revturbine-schema-identity";function ia(t="handle"){return {[I_]:{kind:T_.Named,handleField:t}}}function aa(t="handle"){return {[I_]:{kind:T_.Minted,handleField:t}}}var yn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ui={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},ZI="x-revturbine-context",QI="x-revturbine-in-config",XI="x-revturbine-sdk-input",eC="x-revturbine-source",tC="x-revturbine-deprecation",nC={[yn.Playbook]:Ui.Customer,[yn.Branding]:Ui.Customer,[yn.Billing]:Ui.Stripe,[yn.Metering]:Ui.Customer,[yn.CustomerOperations]:Ui.Runtime,[yn.EventIngestion]:Ui.Runtime};function Jn(t,e){return {[ZI]:t,[QI]:e.inConfig??t===yn.Playbook,[XI]:e.sdkInput,[eC]:e.source??nC[t]}}function su(t){return {deprecated:true,[tC]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var an=t=>z.object({items:z.array(t)}),er=z.object({error:z.string(),code:z.string(),request_id:z.string()}),U=t=>t,sn=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()});function bc(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=>bc(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(),i=[];for(let a of r){let s=n[a];s!==void 0&&i.push(JSON.stringify(a)+":"+bc(s));}return "{"+i.join(",")+"}"}throw new Error(`canonicalizeJson: unsupported value type ${typeof t}`)}function xc(t){return bc(t)}async function yd(t,e){let n=bo(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 vc(r).slice(0,22)}function Ha(t){return t.componentType??t.surfaceType}function vd(t){return [t.slotId||"",Ha(t)||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function bd(t){let e=xc({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:bo(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${vc(e)}`}function j_(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let i=r.surface.template;if(!i)continue;let a=md(r);if(a.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==i)continue;let u=cd(s);u&&a.includes(u)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let i=n.get(r.surface.template)??[];i.push(r),n.set(r.surface.template,i);}for(let r of n.values()){if(r.length<=1)continue;let i=r.map(s=>{let u=he(s.content)?s.content:{};return {output:s,order:In(u.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(s=>Number.isFinite(s.order));if(i.length<=1)continue;let a=i.reduce((s,u)=>u.order>s.order?u:s);for(let s of i)s.output.output_id!==a.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function C_(t){let n=(he(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function rC(t,e,n){if(n===1){let r=t.surface.slot_id,i=e.surface.slot_id;if(typeof r=="string"&&r&&typeof i=="string"&&i)return {leftKey:r,rightKey:i}}else if(n===0){let r=C_(t),i=C_(e);if(r&&i)return {leftKey:r,rightKey:i}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function ou(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 i=t[n],a=t[r];if(i.surface.type!==a.surface.type)continue;let s=ps(i.category),u=ps(a.category);if(s!==u){s<u?e.add(a.output_id):e.add(i.output_id);continue}if(s===0||s===1){let{leftKey:_,rightKey:C}=rC(i,a,s);_===C&&e.add(a.output_id);}}return t.filter(n=>!e.has(n.output_id))}function xd(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(_=>ps(_.category)===1)),r.length===0)return null;let i=j_(r);if(i.length===0)return null;let a=i.some(_=>gc(_)!==null),s=a?i:ou(i);return s.length===0?null:[...s].sort((_,C)=>{if(a){let M=gc(_),oe=gc(C);if(M!==null&&oe!==null&&M!==oe)return M-oe;if(M!==null&&oe===null)return -1;if(M===null&&oe!==null)return 1}let I=ps(_.category),k=ps(C.category),O=I-k;if(O!==0)return O;if(I===2){let M=ld(_)-ld(C);if(M!==0)return M;let oe=od(C)-od(_);if(oe!==0)return oe}let A=dc(C)-dc(_);if(A!==0)return A;let j=Jm(C)-Jm(_);return j!==0?j:_.output_id.localeCompare(C.output_id)})[0]??null}function iC(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function Sd(t,e,n,r){let i=he(r)?r:{},a=he(i.decision)?i.decision:{},s=he(i.content)?i.content:he(a.content)?a.content:{},u=typeof a.visible=="boolean"?a.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:t,requestId:typeof i.request_id=="string"?i.request_id:e,visible:u,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(_=>typeof _=="string"):[],content:iC(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 lu(t){let e=[],n=[t,t.content,he(t.content)?t.content.payload:void 0,he(t.content)?t.content.placement:void 0,he(t.content)?t.content.surface:void 0];for(let r of n){if(!he(r))continue;let i=he(r.caps)?r.caps:void 0;if(!i)continue;let a=[],s=td(i.max_per_period);s&&a.push(s);let u=Number(i.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:a,..._!==void 0?{cooldownMs:_}:{}});}return e}function Pd(t,e,n,r,i="impression"){if(ps(t.category)<=1)return {allowed:true};let a=lu(t);if(a.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(k=>Number.isFinite(k)&&k>0)},u=oc({perPayload:{policies:a,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!u.allowed)return {allowed:false,reason:u.reason,updatedState:s};let _=[...s.seenAt,r],C=i==="dismiss"?a.map(k=>k.cooldownMs).filter(k=>typeof k=="number"&&Number.isFinite(k)&&k>0):[],I=C.length>0?r+Math.max(...C):void 0;return {allowed:true,updatedState:{seenAt:_,...I!==void 0?{cooldownUntil:I}:{}}}}function Td(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 _d(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Td(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 O_(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 i=r[0];for(let s of r.slice(1)){let u=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,_=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(u>_||u===_&&s.entryOrder<i.entryOrder)&&(i=s);}let a=r.filter(s=>s!==i).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:i,supersededIds:a}}function q_(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 aC(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 sC(t,e){let n=aC(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 oC(t,e){if(!e)return null;let n=sC(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 E_(t,e){if(!t)return true;let n=oC(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:We}=ra,{Persisted:cu,Transient:gs}=ds,{External:Li}=ya,D_=Jn(yn.Playbook,{sdkInput:true});Jn(yn.Playbook,{inConfig:false,sdkInput:false});var lC=Jn(yn.Playbook,{inConfig:false,sdkInput:true}),cC=Jn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ui.Runtime}),mC=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),uC={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function pC(t){return uC[t]??[]}function dC(t,e){return pC(e).includes(t)}var M_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),U_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),gC=z.object({count:z.number().int().positive().meta(We),period:U_.meta(We)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li});z.object({surface_type:z.string().min(1).meta(We),rules:z.array(gC).meta(We),cooldown_ms:z.number().int().nonnegative().optional().meta(We)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Li,...ra.Operational,...lC});var hC=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":gs,"x-revturbine-schema-exposure":Li}),Po=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true}),name:Ka.meta(We),handle:_r.meta(We),description:Xm.meta(We),category:M_.meta(We),drag_order_in_category:z.number().int().default(0).meta(We),surface_slot_id:z.string().optional().meta(We),entitlement_id:z.string().optional().meta(We),tier_threshold:z.string().optional().meta(We),threshold_percent:Bs.optional().meta(We),trial_type:z.enum(["free","reverse"]).optional().meta(We),trigger_type:z.string().optional().meta(We),trial_progress_percent:z.number().min(0).max(100).optional().meta(We),days_before_end:z.number().int().min(0).optional().meta(We),qualifier:mC.optional().meta(We),activation_window_start:z.string().datetime().optional().meta(We),activation_window_end:z.string().datetime().optional().meta(We),metadata:Ai.meta(We)}).meta({id:"Placement","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Li,...D_,...ia()}),fC=Gr("PlacementAnchor"),_C=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),yC=z.object({code:_C.meta(We),message:z.string().min(1).meta(We),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(We)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),R_=Po.extend({warnings:z.array(yC).optional().meta(We)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),vC=z.object({label:z.string().min(1).max(200).meta(We),cta_path_type:hC.meta(We),config_fields:z.record(z.string(),z.unknown()).default({}).meta(We)}).meta({id:"CtaObject","x-revturbine-schema-persistence":gs,"x-revturbine-schema-exposure":Li}),Pc=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true}),handle:_r.meta({...We,readOnly:true}),placement_id:z.string().min(1).meta(We),drag_order:z.number().int().default(0).meta(We),target_plan_ids:z.array(z.string()).default([]).meta(We),target_plan_billing_cadences:z.array(z.string()).default([]).meta(We),target_segments:z.array(z.string()).default([]).meta(We),surface_slot_ids:z.array(z.string()).default([]).meta(We),surface_template_id:z.string().min(1).meta(We),content_fields:z.record(z.string(),z.unknown()).default({}).meta(We),cta_list:z.array(vC).default([]).meta(We),max_per_period:z.number().int().min(0).nullable().default(null).meta(We),max_period_unit:U_.default("session").meta(We),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(We),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(We),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(We),recommendation_plan_override:z.string().optional().meta(We)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Li,...D_,...aa()}),bC=Gr("PlacementPayloadAnchor"),xC=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({surface_slot_handle:z.string().min(1).max(200).meta(We),surface_type:Zm.meta(We),surface_template_ids:z.array(z.string()).default([]).meta(We),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(We),first_seen:z.string().datetime().meta({...We,readOnly:true}),last_seen:z.string().datetime().meta({...We,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(We),placement_count:z.number().int().min(0).default(0).meta({...We,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Li,...cC,...ia("surface_slot_handle")}),SC=Si(Po),PC=Si(Pc);({"/api/placement-anchors":{get:U({operationId:"listPlacementAnchors",requestParams:{query:sn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:an(fC)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:U({operationId:"listPlacements",requestParams:{query:sn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:an(Po)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:U({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Po)}}},responses:{201:{description:"Created",content:{"application/json":{schema:R_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:U({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:U({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:SC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:R_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:U({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:er}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:U({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:U({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:M_,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:U({operationId:"listPlacementPayloadAnchors",requestParams:{query:sn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:an(bC)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:U({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:sn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:an(Pc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:U({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Pc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Pc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:U({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:PC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:U({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:U({operationId:"listSurfaceSlots",requestParams:{query:sn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:an(xC)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function k_(t,e,n){if(!t)return true;if(!dC(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 A_(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let i=r.indexOf(t.tierThreshold);if(i<0)return false;let a=n?.tiers?.[t.entitlementHandle];return (a?r.indexOf(a):-1)<i}function mu(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:[],i=Array.isArray(t.promotions)?t.promotions:[],a=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=>i.find(u=>u.id===s||u.name===s),listPersonalizationTokens:()=>a}}function Tc(t,e){let n={...t};for(let r of e){let i=t[r.token];if(i==null||!r.value_map)continue;let a=String(i),s=r.value_map[a];s!==void 0&&(n[r.token]=s);}return n}function Id(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,i)=>{let a=e[i];if(a===void 0){let s=n[i];s&&(a=e[s]);}return a===void 0?r:String(a)})}function Cd(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=Id(i,e):n[r]=i;return n}function F_(t,e){return Cd(t,e)}function Ed(t,e,n,r,i,a,s){let u=n.filter(O=>O.surface_template_id===t&&O.status==="active");if(u.length===0)return null;let _=new Map(r.map(O=>[O.block_id,O])),C=new Set(e.segmentIds),I=Tc(a,i),k=s?.segmentDimensions;for(let O of u){let A=O.default_message_block_id,j,M=O.ui_path_id,oe=O.promotion_id;if(O.segment_content_map){if(k&&Object.keys(k).length>0){let ne=new Map;for(let J of O.segment_content_map){let at=J.dimension;if(!at)continue;let Pn=ne.get(at)??[];Pn.push(J),ne.set(at,Pn);}if(ne.size>0){let J=true,at;for(let[,Pn]of ne){let An=Pn.find(ve=>C.has(ve.segment_id));if(!An){J=false;break}at||(at=An);}if(J&&at)A=at.message_block_id,j=at.segment_id,at.ui_path_id&&(M=at.ui_path_id),at.promotion_id&&(oe=at.promotion_id);else if(!J)continue}else for(let J of O.segment_content_map)if(C.has(J.segment_id)){A=J.message_block_id,j=J.segment_id,J.ui_path_id&&(M=J.ui_path_id),J.promotion_id&&(oe=J.promotion_id);break}}else for(let ne of O.segment_content_map)if(C.has(ne.segment_id)){A=ne.message_block_id,j=ne.segment_id,ne.ui_path_id&&(M=ne.ui_path_id),ne.promotion_id&&(oe=ne.promotion_id);break}}let Z=_.get(A);if(!Z||Z.status!=="active")continue;let ge={...Z.default_content};if(Z.segment_overrides){let ne=j?Z.segment_overrides.find(J=>J.segment_value_id===j):Z.segment_overrides.find(J=>C.has(J.segment_value_id));ne&&(ge={...ge,...ne.content},j=ne.segment_value_id);}let De=F_(ge,I);return {payload:O,messageBlock:Z,resolvedContent:De,matchedSegmentId:j,uiPathId:M,promotionId:oe}}return null}async function uu(t,e,n,r,i){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),_=i??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),C=Tc(r,_);for(let I of s){let k=I.default_message_block_id,O,A=I.ui_path_id,j=I.promotion_id;if(I.segment_content_map){for(let ne of I.segment_content_map)if(u.has(ne.segment_id)){k=ne.message_block_id,O=ne.segment_id,ne.ui_path_id&&(A=ne.ui_path_id),ne.promotion_id&&(j=ne.promotion_id);break}}let M=await Promise.resolve(n.getMessageBlockById(k));if(!M||M.status!=="active")continue;let oe={...M.default_content};if(M.segment_overrides){let ne=O?M.segment_overrides.find(J=>J.segment_value_id===O):M.segment_overrides.find(J=>u.has(J.segment_value_id));ne&&(oe={...oe,...ne.content},O=ne.segment_value_id);}let Z=F_(oe,C),ge;A&&n.getUiPathById&&(ge=await Promise.resolve(n.getUiPathById(A)));let De;return j&&n.getPromotionById&&(De=await Promise.resolve(n.getPromotionById(j))),{payload:I,messageBlock:M,resolvedContent:Z,matchedSegmentId:O,uiPathId:A,promotionId:j,uiPath:ge??void 0,promotion:De??void 0}}return null}function TC(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let i=e[r];return i==null?`{{${r}}}`:String(i)})}function IC(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=TC(r,t);continue}e[n]=r;}return e}function CC(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 EC(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function RC(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 EC(e,n)}function kC(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 AC(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 kC(n,e,r)}function wC(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 jC(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 wC(n,e,r)}function OC(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function qC(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function DC(t,e){let n={...o_};for(let u of t.surface_templates??[]){let _=l_(u.surface_type);if(!_)throw new Error(`Surface template ${u.id} has no canonical ComponentType for ${u.surface_type}`);n[u.id]=_;}let r=new Map;for(let u of t.plans??[])r.set(u.unique_handle,u.unique_handle);let i=new Map;for(let u of t.entitlements??[])u.tier_definitions?.length&&i.set(u.unique_handle,u.tier_definitions.map(_=>_.handle));let a=new Map,s=new Map;for(let u of e.placements){let _=u.payloads[0];if(!_)continue;let C=_.surfaces[0];if(!C)continue;let I=C.template_id,k=n[I];if(!k)throw new Error(`Surface template ${I} has no canonical ComponentType`);let O={...C.fields};C.ctas?.[0]&&(O.cta_label=C.ctas[0].label),C.ctas?.[1]&&(O.secondary_cta_label=C.ctas[1].label);let A=CC(C.ctas?.[0]),j=Array.isArray(_.target?.plan_ids)?_.target.plan_ids:[],M=OC(u.trigger),oe=qC(u.trigger),Z=q_(u.trigger),ge=AC(u.trigger,M),De=RC(u.trigger),ne=jC(u.trigger,M),J={output_id:_.id,category:u.category,surface:{template:I,type:k,slot_id:u.id},content:{...O,__target_plan_ids:j,...M?{__trigger_entitlement_handle:M}:{},...Z?{__trigger_kind:Z.kind}:{}},cta_path:A,rule_id:u.id,decision_id:_.id,config_version:Wm(t),present_upsell:true},at=a.get(I)??[];at.push({output:J,entryOrder:u.order??0,entryCategory:u.category,triggerEntitlementHandle:M,triggerSlotId:oe,trialTrigger:Z,thresholdTrigger:ge,qualifierTrigger:De,entitlementGateTrigger:ne}),a.set(I,at);let Pn=u.id.replace(/^pl_/,"");s.set(Pn,J),s.set(u.id,J);}for(let u of a.values())u.sort((_,C)=>_.entryOrder-C.entryOrder);return {outputsByTemplate:a,outputsByName:s,planHandleToId:r,tierLaddersByHandle:i}}function MC(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let i=new Map;for(let s of e.placements){let u=s.payloads[0]?.surfaces?.[0]?.template_id;u&&i.set(s.id,u);}let a=[];for(let s of r){let u=s.content_link?.message_block_id;if(!u)continue;let _=i.get(s.placement_id);_&&a.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:_,default_message_block_id:u,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(a.length!==0)return mu({payloads:a,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:i,planHandleToId:a,tierLaddersByHandle:s}=DC(e.exportedConfig,e.placements),u=MC(e.exportedConfig,e.placements),_=S_(e.exportedConfig.segments??[]);function C(I,k,O,A){let j=Array.isArray(I.content.__target_plan_ids)?I.content.__target_plan_ids.filter(oe=>typeof oe=="string"):[],M=Array.isArray(I.content.__target_billing_periods)?I.content.__target_billing_periods.filter(oe=>typeof oe=="string"):[];return Wp({target_plan_ids:j,target_billing_periods:M,category:I.category},{currentPlanId:k,planHandle:O,billingPeriod:A}).eligible}return async(I,k,O)=>{let A=O?.__providers,j=A?.plan?.currentPlanHandle,M=A?.plan?.billingPeriod,oe=j?a.get(j):void 0,Z=_n=>typeof _n=="string"?_n:"",ge=Array.isArray(k?.metadata?.surface_template_ids)?k.metadata.surface_template_ids:void 0,De,ne=[];if(ge&&ge.length>0){let _n=[];for(let hn of ge){let si=r.get(hn);si&&_n.push(...si);}if(_n.length===0)return w_(I,"no_candidates_for_template","No placements configured for this surface template");_n.sort((hn,si)=>hn.entryOrder-si.entryOrder);let un=k?.metadata?.entitlement_handle,Vn=k?.metadata?.surface_slot_category,bi=Vn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Vn]:void 0,Dt=_n;if(un){let hn=_n.filter(si=>si.triggerEntitlementHandle===un);hn.length>0&&(Dt=hn);}let jn=k?.metadata?.surface_slot_id;if(jn){let hn=Dt.filter(si=>si.triggerSlotId===jn);hn.length>0&&(Dt=hn);}if(k?.metadata?.fixedOnly===true&&(Dt=Dt.filter(hn=>hn.entryCategory==="fixed")),bi&&Vn!=="fixed"&&Dt.length>1){let hn=Dt.filter(si=>bi.includes(si.entryCategory));hn.length>0&&(Dt=hn);}n&&(Dt=Dt.filter(hn=>!n.isHiddenSync(hn.output.rule_id??""))),Dt=Dt.filter(hn=>_d(hn.trialTrigger,A?.plan)),Dt=Dt.filter(hn=>E_(hn.thresholdTrigger,A?.entitlements)),Dt=Dt.filter(hn=>k_(hn.qualifierTrigger,hn.entryCategory,A?.plan)),Dt=Dt.filter(hn=>A_(hn.entitlementGateTrigger,s,A?.entitlements));let ct,cr=[],Mi=Td(A?.plan);if(Mi!==null&&Dt.length>1){let hn=Dt.map(yo=>({ruleId:yo.output.rule_id??void 0,entryOrder:yo.entryOrder,trialTrigger:yo.trialTrigger,output:yo.output})),si=O_(hn,Mi);if(si){ct=si.winner,cr=si.supersededIds;let yo=si.winner.ruleId;Dt=Dt.filter(Hf=>Hf.trialTrigger?.kind!=="trial_progress"||(Hf.output.rule_id??void 0)===yo);}}let xi;for(let hn of Dt)if(C(hn.output,oe,j,M)){De=hn.output,xi=hn;break}xi&&ct&&ct.ruleId===(xi.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=k?.name,un=(_n?i.get(_n):void 0)??i.get(I.placementId),Vn;if(un)for(let Tn of r.values()){let bi=Tn.find(Dt=>Dt.output===un);if(bi){Vn=bi;break}}un&&n?.isHiddenSync(un.rule_id??"")?ne=["placement_retired"]:un&&!_d(Vn?.trialTrigger,A?.plan)?ne=["trial_trigger_unmet"]:un&&!E_(Vn?.thresholdTrigger,A?.entitlements)?ne=["threshold_trigger_unmet"]:un&&!k_(Vn?.qualifierTrigger,Vn?.entryCategory??un.category,A?.plan)?ne=["qualifier_trigger_unmet"]:un&&!A_(Vn?.entitlementGateTrigger,s,A?.entitlements)?ne=["entitlement_gate_unmet"]:un&&C(un,oe,j,M)?De=un:un?ne=["plan_target_mismatch"]:ne=["placement_not_found"];}if(!De){let _n=ne[0]??"placement_not_found";return w_(I,_n,"Placement not configured")}let J=De.content,at,Pn=De.surface.template;if(u&&Pn){let _n={userId:typeof I.userId=="string"?I.userId:"",segmentIds:A?.segments?.segmentIds??[]},un=await uu(Pn,_n,u,{});un&&(J={...De.content,...un.resolvedContent},at=un.messageBlock.block_id);}let An={...J},ve=typeof An.entitlement=="string"?An.entitlement:typeof An.__trigger_entitlement_handle=="string"?An.__trigger_entitlement_handle:void 0,It=ve?A?.entitlements?.usage?.[ve]:void 0;if(It){An.usage_remaining=Number.isFinite(It.remaining)?It.remaining:0,An.usage_limit=Number.isFinite(It.limit)?It.limit:0,An.usage_current=Number.isFinite(It.used)?It.used:0,An.usage_percent=It.limit>0?Math.min(100,Math.round(It.used/It.limit*100)):0;let _n=It.reset_date;typeof _n=="string"&&_n.length>0&&(An.reset_date=_n);}let gn=IC(An),wn=P_(_,A?.segments?.segmentIds??[],A?.experiments?.assignments),lt={...De,content:gn,...at?{message_block_handle:at}:{},...wn},Wn=!((De.category==="upsell"||De.category==="trial_conversion")&&j==="enterprise");return {placementId:I.placementId,requestId:`local_${Date.now()}`,visible:Wn,decisionSource:"fallback",reasonCodes:Wn?[]:["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 w_(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 Io(t){return L_({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function To(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 UC(t,e){let n=To(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 i=(e??"").toLowerCase();for(let[a,s]of Object.entries(r))if(a.toLowerCase()===i)return To(s)}}function FC(t){let e=To(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 N_(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[A,j]of Object.entries(t.base))(typeof j=="string"||typeof j=="number")&&(e[A]=j);let r=n?.plan?.currentPlanHandle,i=n?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let a=n?.plan?.trialDaysRemaining;a!==void 0&&Number.isFinite(a)&&(e.trial_days_remaining=a);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let u=n?.traits?.traits??{};for(let[A,j]of Object.entries(u))(typeof j=="string"||typeof j=="number")&&(e[A]=j);let _=n?.entitlements?.usage??{};for(let[A,j]of Object.entries(_)){let M=Sc(A);if(!M)continue;let oe=To(j.used),Z=To(j.remaining),ge=To(j.limit);if(oe!==void 0&&(e[`${M}_usage_current`]=oe,e.usage_current===void 0&&(e.usage_current=oe),e.current_usage===void 0&&(e.current_usage=oe)),ge!==void 0&&(e[`${M}_usage_limit`]=ge,e.usage_limit===void 0&&(e.usage_limit=ge),e.current_limit===void 0&&(e.current_limit=ge)),Z!==void 0)e[`${M}_usage_remaining`]=Z,e.usage_remaining===void 0&&(e.usage_remaining=Z);else if(oe!==void 0&&ge!==void 0){let ne=Math.max(0,ge-oe);e[`${M}_usage_remaining`]=ne,e.usage_remaining===void 0&&(e.usage_remaining=ne);}if(oe!==void 0&&ge!==void 0&&ge>0){let ne=Math.min(100,Math.round(oe/ge*100));e[`${M}_usage_percent`]=ne,e.usage_percent===void 0&&(e.usage_percent=ne);}let De=j.reset_date;typeof De=="string"&&De.length>0&&(e[`${M}_reset_date`]=De,e.reset_date===void 0&&(e.reset_date=De));}let C=n?.rules?.entitlementRules??{};for(let[A,j]of Object.entries(C)){if(!Array.isArray(j)||j.length===0)continue;let M=j.find(ne=>ne.kind==="usage_limit"||ne.kind==="usage_rate"||ne.kind==="credits"||ne.kind==="seat");if(!M)continue;let oe=Sc(A);if(!oe)continue;let Z=M.fields??{},ge=UC(Z,r);ge!==void 0&&e[`${oe}_usage_limit`]===void 0&&(e[`${oe}_usage_limit`]=ge);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 k=t.effectiveGrants;if(k)for(let[A,j]of Object.entries(k)){if(j.allocation==="per_user"||j.allocation==="per_user_pooled"||!j.allocation){let M=Sc(A);if(!M)continue;j.used!==void 0&&e[`${M}_usage_current`]===void 0&&(e[`${M}_usage_current`]=j.used),j.limit!==void 0&&e[`${M}_usage_limit`]===void 0&&(e[`${M}_usage_limit`]=j.limit);}if(j.enforcement&&(j.status==="limited"||j.status==="denied")){let M=Sc(A);M&&e[`${M}_enforcement`]===void 0&&(e[`${M}_enforcement`]=j.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=j.enforcement);}}let O=n?.rules?.entitlementRules??{};for(let[A,j]of Object.entries(O)){if(!Array.isArray(j))continue;let M=Sc(A);if(M)for(let oe of j){if(oe.kind==="credits"){let Z=e[`${M}_usage_remaining`];Z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=Z);}if(oe.kind==="seat"){let Z=e[`${M}_usage_current`],ge=e[`${M}_usage_limit`];Z!==void 0&&e.seat_count===void 0&&(e.seat_count=Z),ge!==void 0&&e.seat_limit===void 0&&(e.seat_limit=ge);}}}if(t.featureInteractions&&k){let{invokedFeatureHandles:A,interactionCounts:j,topFeaturesByEngagement:M}=t.featureInteractions,oe=new Set(A),Z=new Set;for(let[ne,J]of Object.entries(k))(J.status==="denied"||J.status==="limited")&&Z.add(ne);let ge=0,De=0;for(let ne of A)Z.has(ne)&&(ge++,j&&(De+=j[ne]??0));if(e.gated_features_used_count=ge,j&&(e.gated_action_count=De),M){let ne=M.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 A)J in k&&ne++;e.trial_features_used=ne;}}return e}function Rd(t,e){let n={};for(let[r,i]of Object.entries(e))i!==void 0&&(n[r]=i);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function pu(t,e,n){let r={};for(let[i,a]of Object.entries(t))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(r[i]=a);e&&r.plan===void 0&&(r.plan=e);for(let[i,a]of Object.entries(n))r[i]===void 0&&(r[i]=a);return r}function du(t,e,n){let r=Ym(t),i=Ns(e,r),a=i??r,s={...t.custom??{}};for(let[_,C]of Object.entries(t.entitlements??{}))s[_]===void 0&&(s[_]=C);r?s.plan_handle=r:delete s.plan_handle,i&&s.plan_name===void 0&&(s.plan_name=i),a&&s.plan===void 0&&(s.plan=a);let u={..._a(t.usage),...n??{}};for(let[_,C]of Object.entries(u))s[_]===void 0&&(s[_]=C);return {effectivePlan:a,traits:s,usage:u,segmentTraits:pu(s,a,u)}}function LC(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 kd(t,e=fd){return e.sha256Base64Url(xc(LC(t)))}function Ad(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:a}=t,s={};for(let[Z,ge]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(Z)||(s[Z]=ge);let u={...s},_=Ns(n,Ym(e));_?u.plan_name=_:typeof e.plan=="object"&&e.plan?.name&&(u.plan_name=e.plan.name);let C={..._a(e.usage),...r},I=Object.entries(C).filter(([,Z])=>Number.isFinite(Z)).sort(([Z],[ge])=>Z<ge?-1:Z>ge?1:0),k,O,A,j,M=[];for(let[Z,ge]of I){let De=i.get(Z)??xo(Z);if(!De)continue;let J=a(Z)?.limit,at=J!==void 0?Math.max(0,J-ge):void 0,Pn=J!==void 0&&J>0?Math.min(100,Math.round(ge/J*100)):void 0;u[`${De}_usage_current`]=ge,J!==void 0&&(u[`${De}_usage_limit`]=J),at!==void 0&&(u[`${De}_usage_remaining`]=at),Pn!==void 0&&(u[`${De}_usage_percent`]=Pn),M.push({prefix:De,current:ge,...J!==void 0?{limit:J}:{},...at!==void 0?{remaining:at}:{},...Pn!==void 0?{percent:Pn}:{}}),k===void 0&&(k=ge,O=J,A=at,j=Pn);}let oe=M.find(Z=>Z.prefix==="core")??M.find(Z=>Z.limit!==void 0)??M[0];return oe&&(k=oe.current,O=oe.limit,A=oe.remaining,j=oe.percent),k!==void 0&&(u.usage_current=k),O!==void 0&&(u.usage_limit=O),A!==void 0&&(u.usage_remaining=A),j!==void 0&&(u.usage_percent=j),u}function wd(t,e,n){let r=[];for(let[i,a]of Object.entries(e)){let s=t[i]||0;if(!Number.isFinite(a)||a<=s)continue;let u=n(i);if(!u)continue;let _=s/u.limit*100,C=a/u.limit*100;C>=u.warningPercent&&_<u.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:a,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:u.warningPercent}),a>=u.limit&&s<u.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:a,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(C)),threshold:100});}return r}function jd(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 i=Number(t.day_number);if(Number.isFinite(i)&&i>0&&Number.isFinite(r)){let a=i+Math.max(0,r);if(a>0&&i>=Math.ceil(a/2))return "midpoint"}return "none"}var V_="__self__",NC={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Od={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:{}}},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:V_,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:NC},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 {Unrestricted:xe}=ra,{Persisted:Vd,Transient:Pi}=ds,{Internal:K_,External:ci}=ya,H_=Jn(yn.Playbook,{sdkInput:true}),VC=Jn(yn.Playbook,{inConfig:false,sdkInput:false}),G_=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":Pi,"x-revturbine-schema-exposure":ci}),hu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),BC=z.enum(c_).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),zC=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Y_=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),qd=z.object({entitlement_id:z.string().min(1).meta(xe),entitlement_handle:z.string().min(1).meta(xe),status:BC.meta(xe),limit:z.number().optional().meta(xe),used:z.number().optional().meta(xe),allocation:hu.optional().meta(xe),enforcement:Y_.optional().meta(xe),source:zC.optional().meta(xe),plan_id:z.string().optional().meta(xe),segment_id:z.string().optional().meta(xe),seat_type_id:z.string().optional().meta(xe),rule_id:z.string().optional().meta(xe)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci,...ra.Operational});z.object({account:z.record(z.string(),qd).optional().meta(xe),instance:z.record(z.string(),qd).optional().meta(xe),user:z.record(z.string(),qd).optional().meta(xe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci,...ra.Operational});var $C=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),KC=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),W_=z.object({kind:KC.meta(xe),id:z.string().min(1).meta(xe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),HC=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),wo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...xe,readOnly:true}),name:Ka.meta(xe),handle:_r.meta(xe),customer_facing_description:z.string().max(500).optional().meta(xe),type:Qm.meta(xe),unit:z.string().max(100).optional().meta(xe),period_scope:G_.optional().meta(xe),allocation:hu.optional().meta(xe),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(xe),sort_order:z.number().int().default(0).meta(xe),metadata:Ai.meta(xe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Vd,"x-revturbine-schema-exposure":ci,...H_,...ia()}),GC=Gr("EntitlementAnchor"),Uo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...xe,readOnly:true}),handle:_r.meta({...xe,readOnly:true}),entitlement_id:z.string().min(1).meta(xe),targets:z.array(W_).min(1).meta(xe),segment_ids:z.array(z.string()).default([]).meta(xe),visibility:$C.default("public").meta(xe),period_scope:G_.optional().meta(xe),instance:z.string().max(100).optional().meta(xe),reset_period:HC.optional().meta(xe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(xe),enforcement:Y_.optional().meta(xe),warning_threshold_percent:Bs.optional().meta(xe),overage_price_ref:z.string().optional().meta(xe),grace_period_hours:z.number().int().min(0).optional().meta(xe),tier_value:z.string().optional().meta(xe),rate_value:z.number().optional().meta(xe),initial_grant:z.number().optional().meta(xe),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(xe),rollover_enabled:z.boolean().optional().meta(xe),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(xe),seat_type_id:z.string().optional().meta(xe),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(xe),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(xe),stripe_metered_price_id:z.string().optional().meta(xe),enabled:z.boolean().optional().meta(xe),allocation:hu.optional().meta(xe),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(xe),amount_cents:z.number().int().optional().meta(xe),currency:z.string().optional().meta(xe)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Vd,"x-revturbine-schema-exposure":K_,...H_,...aa()}),YC=Gr("EntitlementRuleAnchor");Uo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 WC=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),JC=z.object({code:WC.meta(xe),message:z.string().min(1).meta(xe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(xe)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Dd=Uo.extend({warnings:z.array(JC).optional().meta(xe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":ci}),Md=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...xe,readOnly:true}),rule_id:z.string().min(1).meta(xe),experiment_id:z.string().min(1).meta(xe),variant_name:z.string().min(1).max(200).meta(xe),is_control:z.boolean().default(false).meta(xe),override_fields:z.record(z.string(),z.unknown()).default({}).meta(xe)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Vd,"x-revturbine-schema-exposure":K_,...VC,...aa()}),ZC=Si(wo),QC=Si(Uo);({"/api/entitlement-anchors":{get:U({operationId:"listEntitlementAnchors",requestParams:{query:sn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:an(GC)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:U({operationId:"listEntitlementRuleAnchors",requestParams:{query:sn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:an(YC)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:U({operationId:"listEntitlements",requestParams:{query:sn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:an(wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:U({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(wo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:U({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:U({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ZC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:U({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:er}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:U({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:sn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:an(Uo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:U({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Uo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:U({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:QC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Dd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:U({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:U({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Dd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:U({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:sn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:an(Md)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:U({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(Md)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Md}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:dt}=ra,{Persisted:kc,Transient:Ac}=ds,{Internal:va}=ya,J_=Jn(yn.Playbook,{sdkInput:true}),Z_=Jn(yn.Playbook,{inConfig:false,sdkInput:true}),XC=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":va}),Bd=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":va}),Q_=z.object({name:Ka.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:Bd.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:Ai.meta(dt)}),Co=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(Q_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":va,...J_,...ia()}),e0=Gr("FreeTrialRuleAnchor"),t0=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":va}),X_=z.object({name:Ka.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:Bd.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:t0.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:Ai.meta(dt)}),Eo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true})}).merge(X_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":va,...J_,...ia()}),n0=Gr("ReverseTrialRuleAnchor"),ey=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":va}),ty=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Ac,"x-revturbine-schema-exposure":va}),Ro=Un.merge(Bn).merge(zn).extend({trial_limit_policy:ey.default("1_per_lifetime").meta(dt),eligibility_scope:ty.default("per_customer").meta(dt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":va,...Z_}),ko=Un.merge(Bn).merge(zn).extend({trial_limit_policy:ey.default("1_per_lifetime").meta(dt),eligibility_scope:ty.default("per_customer").meta(dt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":va,...Z_}),gu=Un.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:XC.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:Bd.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:eu.meta(dt),cancelled_at:eu.meta(dt),metadata:Ai.meta(dt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":kc,"x-revturbine-schema-exposure":va});({"/api/free-trial-rule-anchors":{get:U({operationId:"listFreeTrialRuleAnchors",requestParams:{query:sn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:an(e0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:U({operationId:"listFreeTrialRules",requestParams:{query:sn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:an(Co)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:U({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:Co}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:U({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:U({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:U({operationId:"listReverseTrialRuleAnchors",requestParams:{query:sn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:an(n0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:U({operationId:"listReverseTrialRules",requestParams:{query:sn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:an(Eo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:U({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:Eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:U({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse 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:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:U({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:U({operationId:"listFreeTrialSettings",requestParams:{query:sn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:an(Ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:U({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:U({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:U({operationId:"listReverseTrialSettings",requestParams:{query:sn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:an(ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:U({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:ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:U({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",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-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:U({operationId:"listTrialInstances",requestParams:{query:sn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:an(gu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:U({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:gu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:U({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:gu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:U({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:gu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Wt,Financial:Fo}=ra,{Persisted:wc,Transient:fu}=ds,{External:Ga}=ya,r0=Jn(yn.Playbook,{sdkInput:true}),i0=Jn(yn.Playbook,{sdkInput:false}),zd=Jn(yn.Billing,{sdkInput:false}),hs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":fu,"x-revturbine-schema-exposure":Ga}),jc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":fu,"x-revturbine-schema-exposure":Ga}),_u=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":fu,"x-revturbine-schema-exposure":Ga}),jo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Wt,readOnly:true}),name:Ka.meta(Wt),handle:_r.meta(Wt),tier_position:z.number().int().min(0).default(0).meta(Wt),sort_order:z.number().int().default(0).meta(Wt),visibility:hs.default("public").meta(Wt),metadata:Ai.meta(Wt)}).meta({id:"Plan","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ga,...r0,...ia()}),a0=Gr("PlanAnchor"),Oo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Wt,readOnly:true}),handle:_r.meta({...Wt,readOnly:true}),plan_id:z.string().min(1).meta(Wt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Wt),segment_id:z.string().nullable().default(null).meta(Wt),price_amount:z.number().min(0).meta(Fo),currency:So.meta(Fo),pricing_model:jc.meta(Wt),visibility:hs.default("public").meta(Wt),stripe_price_id:z.string().optional().meta(Wt),price_source:_u.default("static").meta(Wt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ga,...zd,...aa()}),s0=Gr("PlanVariationAnchor"),qo=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Wt,readOnly:true}),name:Ka.meta(Wt),handle:_r.meta(Wt),sort_order:z.number().int().default(0).meta(Wt),visibility:hs.default("public").meta(Wt),metadata:Ai.meta(Wt)}).meta({id:"AddOn","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ga,...i0,...ia()}),o0=Gr("AddOnAnchor"),Do=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...Wt,readOnly:true}),handle:_r.meta({...Wt,readOnly:true}),addon_id:z.string().min(1).meta(Wt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Wt),segment_id:z.string().nullable().default(null).meta(Wt),price_amount:z.number().min(0).meta(Fo),currency:So.meta(Fo),pricing_model:jc.meta(Wt),visibility:hs.default("public").meta(Wt),stripe_price_id:z.string().optional().meta(Wt),price_source:_u.default("static").meta(Wt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ga,...zd,...aa()}),l0=Gr("AddOnVariationAnchor"),c0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":fu,"x-revturbine-schema-exposure":Ga}),Mo=Un.merge(Bn).merge(zn).extend({stripe_price_id:z.string().min(1).meta(Wt),stripe_product_id:z.string().min(1).meta(Wt),billing_period:c0.meta(Wt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Fo),currency:So.meta(Fo),pricing_model:jc.meta(Wt),nickname:z.string().nullable().default(null).meta(Wt),is_mock:z.boolean().default(false).meta(Wt),last_updated_from_stripe:eu.meta(Wt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ga,...zd}),m0=Si(jo),u0=Si(Oo),p0=Si(qo),d0=Si(Do),g0=Si(Mo);({"/api/plan-anchors":{get:U({operationId:"listPlanAnchors",requestParams:{query:sn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:an(a0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:U({operationId:"listPlans",requestParams:{query:sn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:an(jo)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:U({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(jo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:jo}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:U({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:jo}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:U({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:m0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:jo}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:U({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:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:U({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:U({operationId:"listPlanVariationAnchors",requestParams:{query:sn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:an(s0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:U({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:sn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:an(Oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:U({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Oo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:U({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:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:U({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:u0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:U({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:U({operationId:"listAddOnAnchors",requestParams:{query:sn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:an(o0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:U({operationId:"listAddOns",requestParams:{query:sn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:an(qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:U({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(qo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:U({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:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:U({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:p0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:U({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:U({operationId:"listAddOnVariationAnchors",requestParams:{query:sn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:an(l0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:U({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:sn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:an(Do)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:U({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Do)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:U({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:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:U({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:d0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:U({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:U({operationId:"listStripePrices",requestParams:{query:sn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:an(Mo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:U({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:U({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:U({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:g0}}},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:U({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:p}=ra,{Persisted:No,Transient:xt}=ds,{Internal:Ni,External:Mt}=ya,pt=Jn(yn.Playbook,{sdkInput:true}),B_=Jn(yn.Playbook,{sdkInput:false}),Lo=Jn(yn.Playbook,{inConfig:false,sdkInput:false}),ny=Jn(yn.Playbook,{inConfig:false,sdkInput:true}),Ao=Jn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ui.CodeConstant}),Ud=Jn(yn.Playbook,{inConfig:false,sdkInput:true,source:Ui.Runtime}),Fd=Jn(yn.Playbook,{inConfig:false,sdkInput:false,source:Ui.Runtime}),h0=Jn(yn.Billing,{sdkInput:false}),f0=Jn(yn.Metering,{sdkInput:false}),_0=Jn(yn.Branding,{inConfig:true,sdkInput:true}),y0=Jn(yn.Branding,{sdkInput:false}),v0="1.0.0",Ic=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Ka.meta(p),handle:_r.meta(p),description:Xm.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:Ai.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...Lo,...ia()}),b0=Gr("SeatTypeAnchor"),Cc=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.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:Ai.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...Lo,...ia()}),x0=Gr("PersonalizationTokenAnchor"),S0=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Ld=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:S0.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:Ai.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...h0,...aa()});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":xt,"x-revturbine-schema-exposure":Mt,...y0});var Ec=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({handle:_r.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:Ai.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":No,"x-revturbine-schema-exposure":Ni,...f0,...aa()}),z_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Rc=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.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:z_.default("warn").meta(p),hard_limit_action:z_.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":No,"x-revturbine-schema-exposure":Ni,...ny,...aa()}),P0=Gr("UsageEnforcementSettingsAnchor"),T0=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":xt,"x-revturbine-schema-exposure":Ni}),I0=z.object({id:z.string().min(1).meta(p),group:z.array(T0).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":xt,"x-revturbine-schema-exposure":Ni}),C0=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),ry=z.object({capRules:z.array(I0).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:C0.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Ni}),Nd=Un.merge(Bn).merge(zn).merge(mr).merge(yr).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:_r.meta({...p,readOnly:true}),global_frequency_cap:ry.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":No,"x-revturbine-schema-exposure":Ni,...ny,...aa()}),E0=Gr("PlacementSettingsAnchor"),R0=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":xt,"x-revturbine-schema-exposure":Mt}),k0=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(R0).optional().meta(p),dimension_id:z.string().optional().meta(p),experiment_handle:z.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),A0=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:hs.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),w0=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:hs.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),j0=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),currency:So.meta(p),pricing_model:jc.meta(p),visibility:hs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:_u.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),O0=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),currency:So.meta(p),pricing_model:jc.meta(p),visibility:hs.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:_u.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),q0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),D0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),M0=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:ry.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),U0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),F0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),L0=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:Qm.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),N0=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(W_).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:Qm.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}),...Uo.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:hu.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),V0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),B0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),z0=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":xt,"x-revturbine-schema-exposure":Mt}),$0=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(z0).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),K0=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":xt,"x-revturbine-schema-exposure":Mt}),H0=z.object({name:z.string().min(1).meta(p),action_type:K0.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":xt,"x-revturbine-schema-exposure":Mt,...pt}),G0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),Y0=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),$_=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":xt,"x-revturbine-schema-exposure":Mt}),W0=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:$_.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:$_})).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":xt,"x-revturbine-schema-exposure":Mt,...pt}),J0=z.object({label:z.string().meta(p),path:m_.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),iy=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(J0).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),ay=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":xt,"x-revturbine-schema-exposure":Mt}),Z0=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":xt,"x-revturbine-schema-exposure":Mt}),sy=z.object({max_per_period:Z0.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),Q0=z.object({id:z.string().min(1).meta(p),target:ay.meta(p),surfaces:z.array(iy).meta(p),caps:sy.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":xt,"x-revturbine-schema-exposure":Mt}),X0=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:Bs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Bs}),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":xt,"x-revturbine-schema-exposure":Mt}),eE=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt}),tE=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:eE.meta(p),trigger:X0.meta(p),payloads:z.array(Q0).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),nE=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:ay.meta(p),caps:sy.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(iy).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":xt,"x-revturbine-schema-exposure":Mt,...pt}),rE=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":xt,"x-revturbine-schema-exposure":Mt,...pt}),iE=Un.merge(Q_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Lo}),aE=Un.merge(X_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Lo}),sE=z.object({plans:z.array(A0).meta({...p,...pt}),addons:z.array(w0).optional().meta({...p,...pt}),entitlements:z.array(L0).meta({...p,...pt}),entitlement_rules:z.array(N0).meta({...p,...pt}),segments:z.array(k0).meta({...p,...pt}),content_ui_paths:z.array(H0).meta({...p,...pt}),slot_configs:z.array(V0).optional().meta({...p,...pt,...su({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,...pt,...su({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,..._0,...su({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(B0).optional().meta({...p,...pt}),message_blocks:z.array(W0).optional().meta({...p,...pt}),placement_payloads:z.array(nE).optional().meta({...p,...pt}),placements:z.array(tE).optional().meta({...p,...pt}),content_promotions:z.array(G0).optional().meta({...p,...pt}),personalization_tokens:z.array(Y0).optional().meta({...p,...pt}),surface_templates:z.array($0).optional().meta({...p,...pt}),free_trial_rules:z.array(iE).optional().meta({...p,...B_}),reverse_trial_rules:z.array(aE).optional().meta({...p,...B_}),plan_variations:z.array(j0).optional().meta({...p,...pt}),addon_variations:z.array(O0).optional().meta({...p,...pt}),extension_rules:z.array(rE).optional().meta({...p,...pt}),seat_types:z.array(q0).optional().meta({...p,...pt}),enforcement_defaults:z.array(D0).optional().meta({...p,...pt}),placement_settings:z.array(M0).optional().meta({...p,...pt}),segment_dimensions:z.array(U0).optional().meta({...p,...pt}),meter_bindings:z.array(F0).optional().meta({...p,...pt}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...Lo}),signal_catalog:z.object({}).strict().optional().meta({...p,...Lo})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt}),oE=z.object({artifact_type:z.literal("playbook").meta({...p,...Ao,readOnly:true}),format_version:z.literal(v0).meta({...p,...Ao,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...Ao}),playbook_version_id:z.string().nullable().default(null).meta({...p,...Ud,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...Fd,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...Fd,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...Fd,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...Ud,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...Ao,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ao,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ao,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...Ud}),oy=oE.extend(sE.shape).meta({"x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});function lE(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ly(t){if(!lE(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(ly,oy).meta({id:"Playbook","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});z.preprocess(ly,oy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":xt,"x-revturbine-schema-exposure":Mt,...pt});({"/api/seat-type-anchors":{get:U({operationId:"listSeatTypeAnchors",requestParams:{query:sn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:an(b0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:U({operationId:"listSeatTypes",requestParams:{query:sn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:an(Ic)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:U({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Ic)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:U({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ic.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:U({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:U({operationId:"listPersonalizationTokenAnchors",requestParams:{query:sn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:an(x0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:U({operationId:"listPersonalizationTokens",requestParams:{query:sn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:an(Cc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:U({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Cc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:U({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:U({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:U({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Si(Ld)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ld}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:U({operationId:"listMeteringConfigs",requestParams:{query:sn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:an(Ec)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:U({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Ec)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:U({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ec.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:U({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:U({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:sn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:an(P0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:U({operationId:"listUsageEnforcementSettings",requestParams:{query:sn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:an(Rc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:U({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(Rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:U({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:U({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:U({operationId:"listPlacementSettingsAnchors",requestParams:{query:sn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:an(E0)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:U({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Si(Nd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Nd}}}},"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 Oc=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([a,s])=>{let u=this.cache.get(a),_=Date.now();if(u&&u.ttlMs>0&&_-u.resolvedAt<u.ttlMs)return [a,u.value];let C=await s.resolve();return this.cache.set(a,{value:C,resolvedAt:_,ttlMs:s.cacheTtlMs??0}),[a,C]})),n={},r={},i=false;for(let[a,s]of e)if(a==="traits"||a.startsWith("traits:")){let u=s;u?.traits&&(Object.assign(r,u.traits),i=true);}else n[a]=s;return i&&(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 i=await e.resolve();return this.cache.set(t,{value:i,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),i}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},mE=new Set(["cta_completed"]),uE=1440*60*1e3,cy=10080*60*1e3,pE="revturbine:interaction-state",my=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cy,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??{},a={...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);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);a.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(a.suppressedUntil=n+300*1e3),this.state.set(e,a),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),i=this.state.get(r);return i?.suppressedUntil?i.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:i.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 `${pE}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},dE="revturbine:presentation-caps";function Vo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function gE(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 uy=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(),i=this.capsByKey.get(n)??{seenAt:[]},a={...i,seenAt:i.seenAt.filter(_=>Number.isFinite(_)&&_>0)},s=oc({perPayload:{policies:e,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,a),{allowed:false,reason:s.reason};a.seenAt.push(r);let u=e.map(_=>_.cooldownMs).filter(_=>typeof _=="number"&&Number.isFinite(_)&&_>0);return u.length>0?a.cooldownUntil=r+Math.max(...u):delete a.cooldownUntil,this.capsByKey.set(n,a),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 i=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],a=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:i,cooldownUntil:a});}}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 `${dE}:${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 i=Vo(r.caps)?r.caps:void 0;if(!i)continue;let a=[],s=gE(i.max_per_period);s&&a.push(s);let u=Number(i.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:a,..._!==void 0?{cooldownMs:_}:{}});}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 py(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function dy(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 $d=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??uE,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cy;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,i){let a=i??this.defaultDismissCooldownMs,s=new Date(Date.now()+a).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,i){let a=i??this.defaultDismissCooldownMs,s=new Date(Date.now()+a).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,i){let a=i??this.defaultSuppressionMs,s=new Date(Date.now()+a).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,i){let a={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,a);}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);}},hE=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=gy(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return hy(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return fy(e)}clear(t){this.records.delete(t);}},fE="revturbine:impression-history",vu=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=gy(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return hy(e)}getSuppressedPlacements(t){let e=this.load(t);return fy(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${fE}:${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 gy(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(i=>r.has(i.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(i=>r.has(i.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(i=>new Date(i.occurredAt).getTime()>=r);}return n}function hy(t){let e=new Set;for(let n of t)mE.has(n.outcome)&&e.add(n.placementId);return e}function fy(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let i=t[r];if(e.has(i.placementId))continue;let a=i.metadata?.suppressUntil;typeof a=="string"&&new Date(a).getTime()>n&&e.set(i.placementId,a);}return e}function _E(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let i={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(i);}if(e.entitlements?.length){let i=t.defaultEntitlementPolicy??"allow",a={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},u={};for(let _ of e.entitlements??[]){s[_.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let C=t.usage?.[_.unique_handle];C&&(u[_.unique_handle]={used:C.used,limit:C.limit,remaining:Math.max(0,C.limit-C.used),unit:_.unit});}return {entries:s,usage:u,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(a);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(a=>a.handle),segmentSlugs:(e.segments??[]).map(a=>a.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:n,resolve:()=>{let a={},s=new Map;for(let _ of e.entitlements??[]){let C=_;typeof C.unique_handle=="string"&&typeof C.type=="string"&&s.set(C.unique_handle,C.type);}for(let _ of e.entitlement_rules??[]){let C=_.entitlement_id;a[C]||(a[C]=[]);let I=_,k=Array.isArray(I.segment_ids)?I.segment_ids.filter(j=>typeof j=="string"):typeof I.segment_id=="string"&&I.segment_id!=="all"?[I.segment_id]:[],O=Array.isArray(I.plan_ids)?I.plan_ids.filter(j=>typeof j=="string"):[],A={ruleId:_.id,entitlementId:C,planIds:(_.targets??[]).length>0?(_.targets??[]).filter(j=>j.kind==="plan").map(j=>j.id):O,segmentIds:k,kind:(()=>{let j=typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{};return (typeof I.kind=="string"?I.kind:void 0)??(typeof j.kind=="string"?j.kind:void 0)??s.get(C)??"feature"})(),fields:{...typeof I.type_fields=="object"&&I.type_fields!==null?I.type_fields:{},...I}};a[C].push(A);}let u={};for(let _ of e.segments??[])typeof _.dimension_id=="string"&&typeof _.handle=="string"&&(u[_.handle]=_.dimension_id);return {entitlementRules:a,segmentDimensions:u,configVersion:Wm(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:n,resolve:()=>{let a={};for(let s of e.message_blocks??[])a[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:a,personalization:{}}}};r.push(i);}if(e.theme&&Object.keys(e.theme).length>0){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}function yE(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let i=e.user_context,a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:i.plan_handle??"unknown",currentPlanName:i.plan_name,billingPeriod:i.billing_period,trialActive:i.trial_active,trialLimitType:i.trial_limit_type,trialProgressPercent:i.trial_progress_percent,trialDaysRemaining:i.trial_days_remaining,trialDaysTotal:i.trial_days_total,trialState:i.trial_state,trialUsageEntitlementHandle:i.trial_usage_entitlement_handle,trialUsageConsumed:i.trial_usage_consumed,trialUsageLimit:i.trial_usage_limit})};r.push(a);}if(e.entitlements){let i=e.entitlements,a={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[u,_]of Object.entries(i))s[u]=_;return {entries:s}}};r.push(a);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:i.segment_ids})};r.push(a);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let a={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:i.traits})};r.push(a);}}if(e.theme){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var _y=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 Oc;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new my({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new uy({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new $d({store:t.impressionStore??new hE,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new gd({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 yc(e,t)}buildTargetingState(t,e){return du(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return N_({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 i=this.registeredPlacements.get(t.slotId);if(i)return i}let e=this.exportedConfig.placement_slots??[],n=Ha(t),r=e.find(i=>t.slotId?i.id===t.slotId:n?i.surface_type===n:false);return r?{id:r.id,name:t.placementHandle??r.placement_handle,route:"",metadata:{surface_slot_id:r.id,surface_type:r.surface_type,surface_template_ids:r.template?[r.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return Io({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return fc({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},vE=["web-client"],bE=z.enum(vE),xE=["method","meta","component"],SE=z.enum(xE),PE=["ts","python","java","csharp","rust"];z.enum(PE);var TE=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:SE,appliesTo:z.array(bE).min(1),composes:z.string().min(1).optional(),perLanguage:TE.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"]}),CE=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 i of [r.canonical,...r.aliases]){let a=n.get(i);a!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${a}")`,path:["functions"]}),n.set(i,r.canonical);}});CE.parse({version:4,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:"getEligiblePlans",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public plan variations eligible for the current user, including structured display prices."},{canonical:"getEligibleAddons",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public add-on variations eligible for the current user, including structured display prices."},{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 EE=[{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 RE(){let t=[];for(let[e,n]of Object.entries(Od))for(let[r,i]of Object.entries(n.fields)){let a=i.reference;if(a){if(!a.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${a.table} has no onDelete policy`);t.push({from:e,field:r,to:a.table,by:a.by,kind:a.kind,onDelete:a.onDelete,resolution:"playbook"});}}return t}function kE(t){return [...t].sort((e,n)=>yu(e.from,n.from)||yu(e.field,n.field)||yu(e.to,n.to)||yu(e.targetKind??"",n.targetKind??""))}function yu(t,e){return t<e?-1:t>e?1:0}Object.freeze(kE([...RE(),...EE]));var yy="traits:server",qc=class{constructor(){w(this,"domain",yy);w(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 Kd={workspace_name:"Your workspace",theme:{}};function vy(t){return !!t&&Object.keys(t).length>0}var by=false;function Hd(t={}){let e=(n,r)=>({branding:{...Kd,...n,theme:{...Kd.theme,...n?.theme}},source:r});return vy(t.explicit)?e(t.explicit,"explicit"):vy(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!by&&Ls()&&(by=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 xy="[REDACTED]",AE=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,wE=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,jE=/\d(?:[ -]?\d){12,18}/g;function OE(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let i=t.charCodeAt(r)-48;if(i<0||i>9)return false;if(n){let a=i*2;a>9&&(a-=9),e+=a;}else e+=i;n=!n;}return e%10===0}function qE(t){let e=0,n=t.replace(AE,()=>(e+=1,xy));return n=n.replace(jE,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&OE(i)?(e+=1,xy):r}),{value:n,count:e}}function Gd(t){let e=0,n=r=>{if(typeof r=="string"){let i=qE(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let i={};for(let[a,s]of Object.entries(r))i[a]=n(s);return i}return r};return {value:n(t),redactions:e}}function DE(t){return wE.test(t.trim())}function ME(t){let e=t.trim().toLowerCase();return `eml_${LE(e).slice(0,16)}`}function Yd(t){return DE(t)?{value:ME(t),redacted:true}:{value:t,redacted:false}}function Sy(t){let e=Yd(t.user_id??""),n=Gd({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 UE=[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 FE(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 i=r,a=t.charCodeAt(n+1);n+=1,r=65536+((i&1023)<<10)+(a&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 ba(t,e){return t>>>e|t<<32-e}function LE(t){let e=FE(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,i=3144134277,a=1013904242,s=2773480762,u=1359893119,_=2600822924,C=528734635,I=1541459225,k=new Array(64);for(let O=0;O<e.length;O+=64){for(let J=0;J<16;J+=1){let at=O+J*4;k[J]=(e[at]<<24|e[at+1]<<16|e[at+2]<<8|e[at+3])>>>0;}for(let J=16;J<64;J+=1){let at=ba(k[J-15],7)^ba(k[J-15],18)^k[J-15]>>>3,Pn=ba(k[J-2],17)^ba(k[J-2],19)^k[J-2]>>>10;k[J]=k[J-16]+at+k[J-7]+Pn>>>0;}let A=r,j=i,M=a,oe=s,Z=u,ge=_,De=C,ne=I;for(let J=0;J<64;J+=1){let at=ba(Z,6)^ba(Z,11)^ba(Z,25),Pn=Z&ge^~Z&De,An=ne+at+Pn+UE[J]+k[J]>>>0,ve=ba(A,2)^ba(A,13)^ba(A,22),It=A&j^A&M^j&M,gn=ve+It>>>0;ne=De,De=ge,ge=Z,Z=oe+An>>>0,oe=M,M=j,j=A,A=An+gn>>>0;}r=r+A>>>0,i=i+j>>>0,a=a+M>>>0,s=s+oe>>>0,u=u+Z>>>0,_=_+ge>>>0,C=C+De>>>0,I=I+ne>>>0;}return [r,i,a,s,u,_,C,I].map(O=>O.toString(16).padStart(8,"0")).join("")}var Py={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"},Ty="control_plane_source";function Wd(t,e={}){return {eventName:t,properties:{[Ty]:Py[t],...e}}}var Dc=class{constructor(e){w(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 Dc(window.localStorage)}catch{}return new zo}function Jd(t){if(t)return t;if(Yr())try{return new Dc(window.sessionStorage)}catch{}return new zo}var NE=/^[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 Ny="x-revturbine-schema-exposure",BE="readOnly",zE="x-revturbine-decision-only",Iy={[zE]:true},Ti={[Ny]:vn.External},$E={[Ny]:vn.Internal};function Mr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[BE]===true||(e[n]=r);}return z.object(e)}function Br(t){let e=Mr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(NE)}):e}var {Unrestricted:br}=fn,{Transient:Qr,Persisted:KE}=En,{Internal:Hs,External:Ta}=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":Ta});var HE=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":Ta}),He=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":Ta}),_e=z.object({id:z.string().min(1).meta({...br,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ta}),it=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":Hs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ta});var GE=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],Cu=z.enum(GE).meta({id:"ComponentType","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ta}),Vy=Cu,YE=["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"],WE=z.enum(YE).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs});var _g={button:"button",plans_page_ctas:"in_page",plans_page_full:"full_page",inline_gate_message:"inline",tooltip:"tooltip",in_page_card:"in_page",usage_counter:"in_page",credit_counter:"in_page",trial_counter:"in_page",banner:"banner",modal_optional:"modal",modal_blocking:"modal",toast:"toast",email:"email",sms:"sms",push:"push",cli:"cli",agent_connector:"agent",custom_in_app:"custom"};var By=["allowed","limited","denied"],bu={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":Ta});var yg=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":Ta}),Gc=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Ta});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs});var ir=z.string().min(1).max(200),Yt=z.string().min(1).max(100),Gs=z.string().max(500).optional(),Zn=z.record(z.string(),z.unknown()).default({}),zc=z.number().int().min(10).max(100).multipleOf(10),rr=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":Hs}),Rn=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":Hs}),JE=_e.merge(He).merge(it).merge(Sn).extend({handle:Yt.meta({...br,readOnly:true}),active:z.boolean().default(true).meta({...br,readOnly:true})});function dr(t){return JE.meta({id:t,"x-revturbine-schema-persistence":KE,"x-revturbine-schema-exposure":Hs})}var vg=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Qr,"x-revturbine-schema-exposure":Hs}),zy=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":Ta}),Ut={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},wi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},ZE="x-revturbine-context",QE="x-revturbine-in-config",XE="x-revturbine-sdk-input",eR="x-revturbine-source",tR="x-revturbine-deprecation",nR={[Ut.Playbook]:wi.Customer,[Ut.Branding]:wi.Customer,[Ut.Billing]:wi.Stripe,[Ut.Metering]:wi.Customer,[Ut.CustomerOperations]:wi.Runtime,[Ut.EventIngestion]:wi.Runtime};function cn(t,e){return {[ZE]:t,[QE]:e.inConfig??t===Ut.Playbook,[XE]:e.sdkInput,[eR]:e.source??nR[t]}}function Zd(t){return {deprecated:true,[tR]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var $y={Named:"named",Minted:"minted"},Ky="x-revturbine-schema-identity";function zr(t="handle"){return {[Ky]:{kind:$y.Named,handleField:t}}}function $i(t="handle"){return {[Ky]:{kind:$y.Minted,handleField:t}}}var ce=t=>z.object({items:z.array(t)}),jt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),y=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:al}=fn,{Persisted:Yc,Transient:Eu}=En,{External:Qa}=vn,rR=cn(Ut.Playbook,{sdkInput:true}),iR=cn(Ut.Playbook,{sdkInput:false}),bg=cn(Ut.Billing,{sdkInput:false}),bs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Qa}),Wc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Qa}),Ru=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Qa}),Zo=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:ir.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:bs.default("public").meta(Zt),metadata:Zn.meta(Zt)}).meta({id:"Plan","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Qa,...rR,...zr()}),aR=dr("PlanAnchor"),Qo=_e.merge(He).merge(it).merge(Sn).merge(Rn).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(al),currency:Gc.meta(al),pricing_model:Wc.meta(Zt),visibility:bs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Ru.default("static").meta(Zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Qa,...bg,...$i()}),sR=dr("PlanVariationAnchor"),Xo=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Zt,readOnly:true}),name:ir.meta(Zt),handle:Yt.meta(Zt),sort_order:z.number().int().default(0).meta(Zt),visibility:bs.default("public").meta(Zt),metadata:Zn.meta(Zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Qa,...iR,...zr()}),oR=dr("AddOnAnchor"),el=_e.merge(He).merge(it).merge(Sn).merge(Rn).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(al),currency:Gc.meta(al),pricing_model:Wc.meta(Zt),visibility:bs.default("public").meta(Zt),stripe_price_id:z.string().optional().meta(Zt),price_source:Ru.default("static").meta(Zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Qa,...bg,...$i()}),lR=dr("AddOnVariationAnchor"),cR=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Eu,"x-revturbine-schema-exposure":Qa}),tl=_e.merge(He).merge(it).extend({stripe_price_id:z.string().min(1).meta(Zt),stripe_product_id:z.string().min(1).meta(Zt),billing_period:cR.meta(Zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(al),currency:Gc.meta(al),pricing_model:Wc.meta(Zt),nickname:z.string().nullable().default(null).meta(Zt),is_mock:z.boolean().default(false).meta(Zt),last_updated_from_stripe:rr.meta(Zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Qa,...bg});var mR=Mr(Zo),uR=Mr(Qo),pR=Mr(Xo),dR=Mr(el),gR=Mr(tl);({"/api/plan-anchors":{get:y({operationId:"listPlanAnchors",requestParams:{query:me},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ce(aR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:y({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Zo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:y({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:mR}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Zo}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:y({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:y({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(sR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:y({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:y({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(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:y({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:y({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:uR}}},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:y({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:y({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(oR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:y({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:y({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(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:y({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:y({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:pR}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:y({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:y({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(lR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:y({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:y({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(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:y({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:y({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:dR}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:el}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:y({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:y({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:y({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(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:y({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:y({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:gR}}},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:y({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:Te}=fn,{Persisted:xg,Transient:Ii}=En,{Internal:Hy,External:ui}=vn,Gy=cn(Ut.Playbook,{sdkInput:true}),hR=cn(Ut.Playbook,{inConfig:false,sdkInput:false}),Yy=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":Ii,"x-revturbine-schema-exposure":ui}),ku=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),fR=z.enum(By).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),_R=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Wy=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),$c=z.object({entitlement_id:z.string().min(1).meta(Te),entitlement_handle:z.string().min(1).meta(Te),status:fR.meta(Te),limit:z.number().optional().meta(Te),used:z.number().optional().meta(Te),allocation:ku.optional().meta(Te),enforcement:Wy.optional().meta(Te),source:_R.optional().meta(Te),plan_id:z.string().optional().meta(Te),segment_id:z.string().optional().meta(Te),seat_type_id:z.string().optional().meta(Te),rule_id:z.string().optional().meta(Te)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui,...fn.Operational});z.object({account:z.record(z.string(),$c).optional().meta(Te),instance:z.record(z.string(),$c).optional().meta(Te),user:z.record(z.string(),$c).optional().meta(Te)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui,...fn.Operational});var yR=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),vR=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Jy=z.object({kind:vR.meta(Te),id:z.string().min(1).meta(Te)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),bR=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),nl=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),name:ir.meta(Te),handle:Yt.meta(Te),customer_facing_description:z.string().max(500).optional().meta(Te),type:yg.meta(Te),unit:z.string().max(100).optional().meta(Te),period_scope:Yy.optional().meta(Te),allocation:ku.optional().meta(Te),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Te),sort_order:z.number().int().default(0).meta(Te),metadata:Zn.meta(Te)}).meta({id:"Entitlement","x-revturbine-schema-persistence":xg,"x-revturbine-schema-exposure":ui,...Gy,...zr()}),xR=dr("EntitlementAnchor"),sl=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),handle:Yt.meta({...Te,readOnly:true}),entitlement_id:z.string().min(1).meta(Te),targets:z.array(Jy).min(1).meta(Te),segment_ids:z.array(z.string()).default([]).meta(Te),visibility:yR.default("public").meta(Te),period_scope:Yy.optional().meta(Te),instance:z.string().max(100).optional().meta(Te),reset_period:bR.optional().meta(Te),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Te),enforcement:Wy.optional().meta(Te),warning_threshold_percent:zc.optional().meta(Te),overage_price_ref:z.string().optional().meta(Te),grace_period_hours:z.number().int().min(0).optional().meta(Te),tier_value:z.string().optional().meta(Te),rate_value:z.number().optional().meta(Te),initial_grant:z.number().optional().meta(Te),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Te),rollover_enabled:z.boolean().optional().meta(Te),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Te),seat_type_id:z.string().optional().meta(Te),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Te),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Te),stripe_metered_price_id:z.string().optional().meta(Te),enabled:z.boolean().optional().meta(Te),allocation:ku.optional().meta(Te),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Te),amount_cents:z.number().int().optional().meta(Te),currency:z.string().optional().meta(Te)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":xg,"x-revturbine-schema-exposure":Hy,...Gy,...$i()}),SR=dr("EntitlementRuleAnchor");sl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 PR=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),TR=z.object({code:PR.meta(Te),message:z.string().min(1).meta(Te),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Te)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui}),Qd=sl.extend({warnings:z.array(TR).optional().meta(Te)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ii,"x-revturbine-schema-exposure":ui});var Xd=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({handle:Yt.meta({...Te,readOnly:true}),rule_id:z.string().min(1).meta(Te),experiment_id:z.string().min(1).meta(Te),variant_name:z.string().min(1).max(200).meta(Te),is_control:z.boolean().default(false).meta(Te),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Te)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":xg,"x-revturbine-schema-exposure":Hy,...hR,...$i()}),IR=Mr(nl),CR=Mr(sl);({"/api/entitlement-anchors":{get:y({operationId:"listEntitlementAnchors",requestParams:{query:me},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ce(xR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:y({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(SR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:y({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:y({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(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:y({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:y({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:IR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:y({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:y({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(sl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:y({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:CR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:y({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:y({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:y({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(Xd)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:y({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(Xd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Je}=fn,{Persisted:Au,Transient:xs}=En,{External:Ki}=vn,Zy=cn(Ut.Playbook,{sdkInput:true});cn(Ut.Playbook,{inConfig:false,sdkInput:false});var ER=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),RR=cn(Ut.Playbook,{inConfig:false,sdkInput:false,source:wi.Runtime}),kR=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Qy=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Xy=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),AR=z.object({count:z.number().int().positive().meta(Je),period:Xy.meta(Je)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki});z.object({surface_type:z.string().min(1).meta(Je),rules:z.array(AR).meta(Je),cooldown_ms:z.number().int().nonnegative().optional().meta(Je)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ki,...fn.Operational,...ER});var wR=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":xs,"x-revturbine-schema-exposure":Ki}),rl=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Je,readOnly:true}),name:ir.meta(Je),handle:Yt.meta(Je),description:Gs.meta(Je),category:Qy.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:zc.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:kR.optional().meta(Je),activation_window_start:z.string().datetime().optional().meta(Je),activation_window_end:z.string().datetime().optional().meta(Je),metadata:Zn.meta(Je)}).meta({id:"Placement","x-revturbine-schema-persistence":Au,"x-revturbine-schema-exposure":Ki,...Zy,...zr()}),jR=dr("PlacementAnchor"),OR=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),qR=z.object({code:OR.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":xs,"x-revturbine-schema-exposure":Ki}),Cy=rl.extend({warnings:z.array(qR).optional().meta(Je)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki});var DR=z.object({label:z.string().min(1).max(200).meta(Je),cta_path_type:wR.meta(Je),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Je)}).meta({id:"CtaObject","x-revturbine-schema-persistence":xs,"x-revturbine-schema-exposure":Ki}),Vc=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Je,readOnly:true}),handle:Yt.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(DR).default([]).meta(Je),max_per_period:z.number().int().min(0).nullable().default(null).meta(Je),max_period_unit:Xy.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":Au,"x-revturbine-schema-exposure":Ki,...Zy,...$i()}),MR=dr("PlacementPayloadAnchor"),UR=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Je),surface_type:Vy.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":Au,"x-revturbine-schema-exposure":Ki,...RR,...zr("surface_slot_handle")}),FR=Mr(rl),LR=Mr(Vc);({"/api/placement-anchors":{get:y({operationId:"listPlacementAnchors",requestParams:{query:me},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ce(jR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:y({operationId:"listPlacements",requestParams:{query:me},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ce(rl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:y({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(rl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:y({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:y({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:FR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:y({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:y({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Qy,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:y({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(MR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:y({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(Vc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:y({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(Vc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:y({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:LR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:y({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:y({operationId:"listSurfaceSlots",requestParams:{query:me},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ce(UR)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Vr,Pii:ol}=fn,{Persisted:Sg,Transient:Pg}=En,{Internal:ml}=vn,NR=cn(Ut.CustomerOperations,{sdkInput:false}),VR=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(Vr)}).meta({id:"Identity","x-revturbine-schema-persistence":Sg,"x-revturbine-schema-exposure":ml}),ev=z.enum(["payment_failed","payment_method_missing"]),Ey=_e.merge(He).merge(it).extend({external_id:z.string().min(1).meta(ol),identity:VR.meta(ol),stripe_customer_id:z.string().optional().meta(Vr),current_plan_id:z.string().optional().meta(Vr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Vr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Vr),billing_health_issues:z.array(ev).default([]).meta(Vr),metadata:Zn.meta(Vr)}).meta({id:"Customer","x-revturbine-schema-persistence":Sg,"x-revturbine-schema-exposure":ml}),BR=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Pg,"x-revturbine-schema-exposure":ml}),zR=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Pg,"x-revturbine-schema-exposure":ml}),$R=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Pg,"x-revturbine-schema-exposure":ml}),_s=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({handle:Yt.meta({...Vr,readOnly:true}),customer_id:z.string().min(1).meta(ol),customer_id_list:z.array(z.string()).optional().meta(ol),override_type:zR.meta(Vr),target_id:z.string().min(1).meta(Vr),value:z.record(z.string(),z.unknown()).default({}).meta(Vr),duration_type:BR.default("permanent").meta(Vr),duration_value:z.string().optional().meta(Vr),expiry_date:rr.meta(Vr),status:$R.default("active").meta(Vr),reason:z.string().max(500).optional().meta(Vr),created_by:z.string().optional().meta(Vr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Sg,"x-revturbine-schema-exposure":ml,...NR,...$i()});({"/api/customers":{get:y({operationId:"listCustomers",requestParams:{query:me},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ce(Ey)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:y({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Ey}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:y({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:y({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:y({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:y({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:y({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:y({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:Bc,Financial:eg}=fn,{Persisted:tv,Transient:Ia}=En,{External:ul,Internal:Jc}=vn,Tg=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":Ia,"x-revturbine-schema-exposure":ul}),nv=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":Ia,"x-revturbine-schema-exposure":ul});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":ul});var rv=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":Ia,"x-revturbine-schema-exposure":ul}),KR=z.object({product_instance_id:z.string().min(1).meta(Be),user_id:z.string().min(1).meta(Bc),plan:rv.optional().meta(Be),usage:z.record(z.string(),nv).default({}).meta(Be),trial:Tg.optional().meta(Be),entitlements:z.record(z.string(),z.union([z.boolean(),$c])).default({}).meta(Be)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":tv,"x-revturbine-schema-exposure":ul}),$o=_e.merge(it).merge(He).extend({user_id:z.string().min(1).meta(Bc),account_id:z.string().min(1).nullable().optional().meta(Bc),email:z.string().email().nullable().optional().meta(Bc),email_type:z.string().optional().meta(Be),plan_handle:z.string().min(1).optional().meta(Be),plan:rv.optional().meta(Be),usage:z.record(z.string(),nv).default({}).meta(Be),trial:Tg.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(),$c])).default({}).meta(Be),instances:z.array(KR).optional().meta(Be),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Bc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Be,"x-revturbine-schema-persistence":Ia}),derived_config_version:z.string().nullable().optional().meta(Be),context_hash:z.string().nullable().optional().meta(Be),derived_computed_at:rr.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":tv,"x-revturbine-schema-exposure":ul}),HR=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Be,...Ti}),days_remaining:z.number().int().min(0).optional().meta({...Be,...Ti}),ends_at:z.string().optional().meta({...Be,...Ti})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":Jc}),GR=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Be,...Ti}),failed_payment_reason:z.string().optional().meta({...eg,...Iy}),issues:z.array(ev).optional().meta({...eg,...Iy}),provider_subscription_id:z.string().optional().meta({...eg,...$E})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":Jc}),YR=z.object({can_upgrade:z.boolean().optional().meta({...Be,...Ti}),can_manage_billing:z.boolean().optional().meta({...Be,...Ti})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":Jc}),WR=z.object({handle:z.string().min(1).optional().meta({...Be,...Ti}),name:z.string().min(1).optional().meta({...Be,...Ti})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":Jc});z.object({subject:z.string().min(1).meta({...Be,...Ti}),context_version:z.string().optional().meta({...Be,...Ti}),trial:HR.optional().meta({...Be,...Ti}),billing:GR.optional().meta({...Be,...Ti}),plan:WR.optional().meta({...Be,...Ti}),capabilities:YR.optional().meta({...Be,...Ti})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Ia,"x-revturbine-schema-exposure":Jc});({"/api/user-contexts":{get:y({operationId:"listUserContexts",requestParams:{query:me},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ce($o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:y({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:y({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:$o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:y({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:tr}=fn,{Persisted:Ig,Transient:iv}=En,{Internal:Zc}=vn,JR=cn(Ut.Playbook,{sdkInput:true}),av=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),ZR=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":iv,"x-revturbine-schema-exposure":Zc}),QR=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":iv,"x-revturbine-schema-exposure":Zc}),tg=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:ir.meta(tr),handle:Yt.optional().meta(tr),category:ZR.default("custom").meta(tr),visibility_toggle:z.boolean().default(true).meta(tr),source_type:QR.default("system").meta(tr),estimated_size:z.number().int().min(0).optional().meta(tr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":Zc,...av,...zr()}),XR=dr("SegmentDimensionAnchor"),ng=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),dimension_id:z.string().min(1).meta(tr),name:ir.meta(tr),handle:Yt.meta(tr),description:Gs.meta(tr),definition_rule:z.record(z.string(),z.unknown()).optional().meta(tr),used_in_count:z.number().int().min(0).default(0).meta({...tr,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":Zc,...av,...zr()}),ek=dr("SegmentValueAnchor");_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:ir.meta(tr),handle:Yt.meta(tr),description:Gs.meta(tr),rules:z.record(z.string(),z.unknown()).default({}).meta(tr),experiment_handle:z.string().min(1).optional().meta(tr),is_active:z.boolean().default(true).meta(tr),estimated_size:z.number().int().min(0).nullable().default(null).meta(tr),metadata:Zn.meta(tr)}).meta({id:"Segment","x-revturbine-schema-persistence":Ig,"x-revturbine-schema-exposure":Zc,...JR,...zr()});({"/api/segment-dimension-anchors":{get:y({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(XR)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:y({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(ek)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:y({operationId:"listSegmentDimensions",requestParams:{query:me},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ce(tg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:y({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:tg}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:y({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:tg}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:y({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(ng)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:y({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:ng}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:y({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:ng}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:y({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:At}=fn,{Persisted:pl,Transient:sv}=En,{External:Ss}=vn,Cg=cn(Ut.Playbook,{sdkInput:true}),tk=cn(Ut.Playbook,{inConfig:false,sdkInput:false}),nk=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),rk=cn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.CodeConstant});_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),handle:Yt.meta({...At,readOnly:true}),name:ir.meta(At),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(At),subject:z.string().max(500).optional().meta(At),body:z.string().meta(At),template_variables:z.array(z.string()).default([]).meta(At),metadata:Zn.meta(At)}).meta({id:"Message","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...tk,...$i()});var rg=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:ir.meta(At),handle:Yt.meta(At),action_type:zy.meta(At),target_url:z.string().optional().meta(At),target_plan_id:z.string().optional().meta(At),config_fields:z.record(z.string(),z.unknown()).default({}).meta(At),metadata:Zn.meta(At)}).meta({id:"CtaPath","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...Cg,...zr()}),ik=dr("CtaPathAnchor"),ak=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":Ss,...rk}),sk=z.object({name:z.string().min(1),field_type:ak,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":Ss,...nk}),ig=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:ir.meta(At),handle:Yt.meta(At),surface_type:z.union([Cu,WE]).meta(At),field_definitions:z.array(sk).default([]).meta(At),description:Gs.meta(At)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...Cg,...zr()}),ok=dr("SurfaceTemplateAnchor"),ag=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...At,readOnly:true}),name:ir.meta(At),handle:Yt.meta(At),content_fields:z.record(z.string(),z.unknown()).default({}).meta(At),variation_dimension_id:z.string().optional().meta(At),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(At),notes:z.string().max(1e3).optional().meta(At),used_in_count:z.number().int().min(0).default(0).meta({...At,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":pl,"x-revturbine-schema-exposure":Ss,...Cg,...zr()}),lk=dr("MessageBlockRecordAnchor"),ck=z.object({segment_id:z.string().min(1).meta(At),message_block_id:z.string().min(1).meta(At),ui_path_id:z.string().optional().meta(At),promotion_id:z.string().optional().meta(At)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":sv,"x-revturbine-schema-exposure":Ss});z.object({payload_id:z.string().min(1).meta(At),tenant_id:z.string().min(1).meta(At),name:ir.meta(At),surface_template_id:z.string().min(1).meta(At),default_message_block_id:z.string().min(1).meta(At),segment_content_map:z.array(ck).optional().meta(At),ui_path_id:z.string().optional().meta(At),promotion_id:z.string().optional().meta(At),status:z.enum(["draft","active","inactive"]).meta(At),created_at:z.string().datetime().optional().meta({...At,readOnly:true}),updated_at:z.string().datetime().optional().meta({...At,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":sv,"x-revturbine-schema-exposure":Ss});({"/api/surface-template-anchors":{get:y({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(ok)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:y({operationId:"listSurfaceTemplates",requestParams:{query:me},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ce(ig)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:y({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(lk)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:y({operationId:"listMessageBlocks",requestParams:{query:me},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ce(ag)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:y({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(ik)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:y({operationId:"listCtaPaths",requestParams:{query:me},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ce(rg)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:il,Pii:mk}=fn,{Persisted:ov}=En,{Internal:uk,External:pk}=vn,dk=cn(Ut.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":ov,"x-revturbine-schema-exposure":pk,...dk});var Ry=_e.merge(He).extend({user_id:z.string().min(1).meta(mk),scope:z.string().min(1).meta(il),preferences:z.record(z.string(),z.unknown()).default({}).meta(il)}).meta({id:"UiPreference","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":uk});({"/api/ui-preferences":{get:y({operationId:"listUiPreferences",requestParams:{query:me},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ce(Ry)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:y({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Mr(Ry))}}},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:Ot,Financial:Sa}=fn,{Persisted:lv,Transient:Qc}=En,{External:Xc,Internal:cv}=vn,gk=z.object({month:z.string().meta(Ot),cohort_size:z.number().int().min(0).meta(Ot),retained:z.number().int().min(0).meta(Ot),retention_rate:z.number().min(0).max(1).meta(Ot),revenue_cents:z.number().int().min(0).meta(Sa)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Qc,"x-revturbine-schema-exposure":Xc}),hk=z.object({step:z.string().meta(Ot),label:z.string().meta(Ot),count:z.number().int().min(0).meta(Ot),conversion_rate:z.number().min(0).max(1).meta(Ot),drop_off_rate:z.number().min(0).max(1).meta(Ot)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Qc,"x-revturbine-schema-exposure":Xc}),fk=z.object({placement_id:z.string().meta(Ot),placement_name:z.string().meta(Ot),impressions:z.number().int().min(0).meta(Ot),clicks:z.number().int().min(0).meta(Ot),conversions:z.number().int().min(0).meta(Ot),ctr:z.number().min(0).meta(Ot),conversion_rate:z.number().min(0).meta(Ot),revenue_cents:z.number().int().min(0).meta(Sa)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Qc,"x-revturbine-schema-exposure":Xc}),_k=z.object({date:z.string().meta(Ot),mrr_cents:z.number().int().min(0).meta(Sa),arr_cents:z.number().int().min(0).meta(Sa),new_mrr_cents:z.number().int().min(0).meta(Sa),churned_mrr_cents:z.number().int().min(0).meta(Sa),expansion_mrr_cents:z.number().int().min(0).meta(Sa),net_new_mrr_cents:z.number().int().meta(Sa)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Qc,"x-revturbine-schema-exposure":Xc}),yk=z.object({metric_key:z.string().min(1).meta(Ot),label:z.string().meta(Ot),current_value:z.number().meta(Sa),previous_value:z.number().nullable().default(null).meta(Sa),change_percent:z.number().nullable().default(null).meta(Ot),period:z.string().meta(Ot),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Ot)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Qc,"x-revturbine-schema-exposure":Xc}),ky=_e.merge(He).merge(it).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Ot),severity:vg.meta(Ot),resource_type:z.string().min(1).meta(Ot),resource_id:z.string().min(1).meta(Ot),summary:z.string().max(1e3).meta(Ot),expected_value:z.unknown().optional().meta(Ot),actual_value:z.unknown().optional().meta(Ot),affected_customer_count:z.number().int().min(0).default(0).meta(Ot),is_resolved:z.boolean().default(false).meta(Ot),resolved_at:rr.meta(Ot),metadata:Zn.meta(Ot)}).meta({id:"DriftReport","x-revturbine-schema-persistence":lv,"x-revturbine-schema-exposure":cv}),Ay=_e.merge(He).merge(it).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Ot),severity:vg.meta(Ot),title:z.string().min(1).max(300).meta(Ot),description:z.string().max(2e3).meta(Ot),resource_type:z.string().optional().meta(Ot),resource_id:z.string().optional().meta(Ot),is_acknowledged:z.boolean().default(false).meta(Ot),acknowledged_at:rr.meta(Ot),acknowledged_by:z.string().nullable().default(null).meta(Ot),metadata:Zn.meta(Ot)}).meta({id:"Alert","x-revturbine-schema-persistence":lv,"x-revturbine-schema-exposure":cv});({"/api/analytics/kpis":{get:y({operationId:"listKpiAggregates",requestParams:{query:me},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ce(yk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:y({operationId:"listPlacementPerformance",requestParams:{query:me},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ce(fk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:y({operationId:"listRevenueMetrics",requestParams:{query:me},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ce(_k)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:y({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:y({operationId:"listFunnelSteps",requestParams:{query:me},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ce(hk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:y({operationId:"listDriftReports",requestParams:{query:me},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ce(ky)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:y({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:ky}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:y({operationId:"listAlerts",requestParams:{query:me},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ce(Ay)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:y({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:Ay}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:x}=fn,{Transient:vk}=En,{Internal:bk}=vn,Ze=t=>({id:t,"x-revturbine-schema-persistence":vk,"x-revturbine-schema-exposure":bk}),xk=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,mv=/^[a-z][a-z0-9_-]{0,99}$/,tn=z.string().regex(xk).max(120),ji=z.string().regex(mv),Zr=tn.meta(Ze("AnalyticsSemanticId")),Hi=z.enum(["account","user","billing_unit","organization"]).meta(Ze("AnalyticsAnalyticalUnit")),wu=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Ze("AnalyticsQueryFamily")),Ys=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Ze("AnalyticsSourceScope")),uv=z.enum(["as_of_event","current"]).meta(Ze("AnalyticsHistoricalMode")),Sk=z.enum(["hour","day","week","month","quarter"]).meta(Ze("AnalyticsTimeGrain")),Eg=z.enum(["none","previous_period","previous_year"]).meta(Ze("AnalyticsCompareMode")),ju=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Ze("AnalyticsFilterOperator")),Rg=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Ze("AnalyticsFilterControl")),Pk=z.enum(["low","medium","high"]).meta(Ze("AnalyticsCardinalityClass")),kg=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Ze("AnalyticsFieldType")),Tk=z.enum(["increase","decrease","neutral"]).meta(Ze("AnalyticsMetricDirection")),Ik=z.enum(["binary","count","continuous","ratio","revenue"]).meta(Ze("AnalyticsMetricStatisticalType")),Ck=z.enum(["additive","semi_additive","non_additive"]).meta(Ze("AnalyticsMetricAggregationSemantics")),Ek=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Ze("AnalyticsDimensionType")),pv=z.enum(["filter","group","split","sort"]).meta(Ze("AnalyticsDimensionCapability")),dv=z.enum(["private","team","tenant"]).meta(Ze("AnalyticsViewVisibility")),wy=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(Ze("AnalyticsCustomizationCapability")),Rk=z.enum(["unrestricted","pii","financial","operational"]).meta(Ze("AnalyticsClassification")),Oi=z.strictObject({value:z.string().min(1).max(300).meta(x),key:z.string().max(120).optional().meta(x)}).meta(Ze("LocalizedText")),fg=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),Ou=z.union([fg,z.array(fg).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(x),compare:Eg.optional().meta(x)}),z.strictObject({min:z.number().optional().meta(x),max:z.number().optional().meta(x)})]).meta(Ze("AnalyticsFilterValue")),Ag=z.strictObject({dimension:tn.meta(x),operator:ju.meta(x),value:Ou.optional().meta(x)}).meta(Ze("AnalyticsSemanticFilter")),Kc=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(Ze("AnalyticsFormatSpec")),kk=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:Oi.optional().meta(x)})).max(5).optional().meta(x),x_axis_format:Kc.optional().meta(x),y_axis_format:Kc.optional().meta(x),empty_state:z.enum(["blank","message"]).optional().meta(x)}).meta(Ze("AnalyticsSafeChartOptions")),qu=z.object({deprecated:z.boolean().meta(x),replaced_by:tn.optional().meta(x)}).meta(Ze("AnalyticsCatalogDeprecation")),Ak=qu,wk=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:Ek.meta(x),operators:z.array(ju).min(1).meta(x),control:Rg.meta(x),capabilities:z.array(pv).min(1).meta(x),cardinality:Pk.meta(x),classification:Rk.default("unrestricted").meta(x),historical_mode:uv.optional().meta(x),allowed_concepts:z.array(tn).optional().meta(x),exclude_from_segment_picker:z.boolean().default(false).meta(x),deprecation:qu.optional().meta(x)}).meta(Ze("AnalyticsCatalogDimension")),jk=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:kg.meta(x),format:Kc.optional().meta(x),source_scope:Ys.optional().meta(x),direction:Tk.optional().meta(x),statistical_type:Ik.optional().meta(x),aggregation_semantics:Ck.optional().meta(x),preferred_analysis_unit:Hi.optional().meta(x),deprecation:qu.optional().meta(x)}).meta(Ze("AnalyticsCatalogMetric")),Ok=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(Hi).min(1).meta(x),primary_time_dimension:tn.meta(x),historical_mode:uv.meta(x),dimensions:z.array(tn).min(1).meta(x),metrics:z.array(tn).min(1).meta(x),query_families:z.array(wu).min(1).meta(x),source_scope:Ys.meta(x),coverage_metric:tn.optional().meta(x),deprecation:qu.optional().meta(x)}).meta(Ze("AnalyticsCatalogConcept")),gv=z.strictObject({field:tn.meta(x),direction:z.enum(["asc","desc"]).meta(x)}),hv=z.strictObject({dimension:tn.meta(x),grain:Sk.meta(x)}),fv=8,qk=z.strictObject({concept:tn.meta(x),family:wu.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(fv).optional().meta(x),time:hv.optional().meta(x),filters_from:z.array(ji).max(20).optional().meta(x),fixed_filters:z.array(Ag).max(20).optional().meta(x),compare:Eg.optional().meta(x),order_by:z.array(gv).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x)}).meta(Ze("AnalyticsViewQuery")),Dk=z.strictObject({type:z.literal("metric").meta(x),value:tn.meta(x),comparison:tn.optional().meta(x),format:Kc.optional().meta(x)}).meta(Ze("AnalyticsRenderMetric")),Mk=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:kk.optional().meta(x)}).meta(Ze("AnalyticsRenderCartesian")),Uk=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(Ze("AnalyticsRenderFunnel")),Fk=z.strictObject({type:z.literal("table").meta(x),columns:z.array(tn).min(1).max(20).meta(x)}).meta(Ze("AnalyticsRenderTable")),Lk=z.strictObject({type:z.literal("timeline").meta(x),timestamp:tn.meta(x),event_type:tn.meta(x)}).meta(Ze("AnalyticsRenderTimeline")),Nk=z.strictObject({type:z.literal("recommendations").meta(x),presentation:z.enum(["list","ranked_cards"]).meta(x)}).meta(Ze("AnalyticsRenderRecommendations")),_v=z.discriminatedUnion("type",[Dk,Mk,Uk,Fk,Lk,Nk]).meta(Ze("AnalyticsRenderSpec")),Vk=z.strictObject({id:ji.meta(x),dimension:tn.meta(x),control:Rg.meta(x),label:Oi.optional().meta(x),operators:z.array(ju).min(1).meta(x),default_value:Ou.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(ji).min(1).max(24)]).default("all").meta(x)}).meta(Ze("AnalyticsViewFilter")),yv=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:ji.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(Ze("AnalyticsViewLayout")),Bk=z.strictObject({id:ji.meta(x),title:Oi.optional().meta(x),description:Oi.optional().meta(x),query:qk.meta(x),render:_v.meta(x)}).meta(Ze("AnalyticsViewBlock")),zk=z.strictObject({id:ji.meta(x),label:Oi.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(Ze("AnalyticsViewHandoff")),$k=z.strictObject({allow:z.array(wy).default([]).meta(x),deny:z.array(wy).default([]).meta(x)}).meta(Ze("AnalyticsCustomizationPolicy"));var vv=z.string().regex(/^\d+\.\d+$/),bv=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(x),schema_version:vv.meta(x),id:ji.meta(x),revision:z.number().int().min(1).meta(x),title:Oi.meta(x),description:Oi.optional().meta(x),analytical_unit:Hi.meta(x),base_template:z.strictObject({id:ji.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(Vk).max(20).meta(x),layout:yv.meta(x),blocks:z.array(Bk).min(1).max(24).meta(x),handoffs:z.array(zk).max(10).optional().meta(x),customization_policy:$k.meta(x)}).meta(Ze("AnalyticsView")),Kk=z.strictObject({id:ji.optional().meta(x),dimension:tn.meta(x),control:Rg.optional().meta(x),label:Oi.optional().meta(x),operators:z.array(ju).min(1).optional().meta(x),default_value:Ou.optional().meta(x),required:z.boolean().optional().meta(x),pinned:z.boolean().optional().meta(x),applies_to:z.union([z.literal("all"),z.array(ji).min(1).max(24)]).optional().meta(x)}).meta(Ze("AnalyticsViewFilterDraft")),Hk=z.strictObject({id:ji.optional().meta(x),title:Oi.optional().meta(x),concept:tn.meta(x),family:wu.meta(x),metrics:z.array(tn).min(1).max(10).meta(x),group_by:z.array(tn).max(fv).optional().meta(x),time:hv.optional().meta(x),filters_from:z.array(ji).max(20).optional().meta(x),fixed_filters:z.array(Ag).max(20).optional().meta(x),compare:Eg.optional().meta(x),order_by:z.array(gv).max(3).optional().meta(x),limit:z.number().int().min(1).max(1e3).optional().meta(x),render:z.union([z.literal("auto"),_v]).optional().meta(x)}).meta(Ze("AnalyticsViewBlockDraft")),Gk=z.strictObject({id:ji.optional().meta(x),label:Oi.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(Ze("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(x),schema_version:vv.meta(x),title:Oi.meta(x),analytical_unit:Hi.optional().meta(x),filters:z.union([z.literal("recommended"),z.array(Kk).max(20)]).optional().meta(x),layout:z.union([z.literal("auto"),yv]).optional().meta(x),blocks:z.array(Hk).min(1).max(24).meta(x),handoffs:z.union([z.literal("recommended"),z.array(Gk).max(10)]).optional().meta(x),visibility:dv.optional().meta(x)}).meta(Ze("AnalyticsViewDraft"));var wg=z.string().regex(/^(\/[^/]*)*$/).max(300),Yk=z.strictObject({op:z.enum(["add","replace","remove"]).meta(x),path:wg.meta(x),value:z.unknown().optional().meta(x)}).meta(Ze("AnalyticsSuggestedPatchOp")),xv=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(Ze("AnalyticsWarning")),Wk=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(x),path:wg.meta(x),message:z.string().min(1).max(500).meta(x),actual:z.unknown().optional().meta(x),allowed:z.array(fg).max(50).optional().meta(x),suggested_patch:z.array(Yk).max(10).optional().meta(x)}).meta(Ze("AnalyticsValidationIssue"));z.object({path:wg.meta(x),rule:z.string().min(1).max(120).meta(x),value:z.unknown().optional().meta(x)}).meta(Ze("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(x),errors:z.array(Wk).default([]).meta(x),warnings:z.array(xv).default([]).meta(x),catalog_version:z.string().min(1).max(64).meta(x)}).meta(Ze("AnalyticsValidationResult"));var Jk=z.object({id:tn.meta(x),type:kg.meta(x),nullable:z.boolean().meta(x)}).meta(Ze("AnalyticsResultField")),Zk=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(Ze("AnalyticsCoverage")),Qk=z.object({query_hash:z.string().min(1).max(128).meta(x),concept:tn.meta(x),analytical_unit:Hi.meta(x),source_scope:Ys.meta(x),coverage:Zk.optional().meta(x),as_of:z.string().datetime().meta(x),freshness_seconds:z.number().int().min(0).meta(x),applied_filters:z.array(Ag).default([]).meta(x),next_cursor:z.string().max(500).optional().meta(x),warnings:z.array(xv).default([]).meta(x)}).meta(Ze("AnalyticsResultMeta")),Xk=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(x),fields:z.array(Jk).meta(x),meta:Qk.meta(x)}).meta(Ze("AnalyticsResult")),{Unrestricted:ur}=fn,{Persisted:eA,Transient:tA}=En,{Internal:Sv}=vn,nA=cn(Ut.CustomerOperations,{inConfig:false,sdkInput:false,source:wi.Customer}),jg=t=>({id:t,"x-revturbine-schema-persistence":eA,"x-revturbine-schema-exposure":Sv,...nA}),rA=t=>({id:t,"x-revturbine-schema-persistence":tA,"x-revturbine-schema-exposure":Sv}),Og=z.object({environment_id:z.string().min(1).meta({...ur,readOnly:true})}),iA=z.enum(["viewer","editor"]).meta(rA("AnalyticsViewAccessRole")),aA=_e.merge(it).merge(Og).merge(He).extend({owner_user_id:z.string().min(1).meta(ur),name:z.string().min(1).max(300).meta(ur),visibility:dv.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(jg("AnalyticsSavedView")),sA=_e.merge(it).merge(Og).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:bv.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(jg("AnalyticsViewRevision")),oA=_e.merge(it).merge(Og).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:iA.meta(ur)}).meta(jg("AnalyticsViewAccess")),{Unrestricted:Cn}=fn,{Transient:lA}=En,{Internal:cA}=vn,Ws=t=>({id:t,"x-revturbine-schema-persistence":lA,"x-revturbine-schema-exposure":cA}),mA=z.enum(["fixture","generated"]).meta(Ws("AnalyticsCatalogSource")),uA=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(Ws("AnalyticsCatalogProvenanceKind")),pA=z.object({kind:uA.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(Ws("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(Cn),source:mA.meta(Cn),generated_at:z.string().datetime().optional().meta(Cn),provenance:z.array(pA).optional().meta(Cn),concepts:z.array(Ok).min(1).meta(Cn),dimensions:z.array(wk).min(1).meta(Cn),metrics:z.array(jk).min(1).meta(Cn)}).meta(Ws("AnalyticsCatalog"));var gA=z.enum(["concept","dimension","metric","query_family"]).meta(Ws("AnalyticsAgentCatalogEntryKind")),hA=z.object({id:Zr.meta(Cn),kind:gA.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:kg.optional().meta(Cn),format:Kc.optional().meta(Cn),capabilities:z.array(pv).optional().meta(Cn),compatible_concepts:z.array(Zr).optional().meta(Cn),compatible_families:z.array(wu).optional().meta(Cn),analytical_units:z.array(Hi).optional().meta(Cn),source_scope:Ys.optional().meta(Cn),example:z.string().max(2e3).optional().meta(Cn),deprecation:Ak.optional().meta(Cn)}).meta(Ws("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(hA).max(50).meta(Cn)}).meta(Ws("AnalyticsCatalogSearchResult"));var {Unrestricted:pr}=fn,{Transient:_A}=En,{Internal:yA}=vn,dl=t=>({id:t,"x-revturbine-schema-persistence":_A,"x-revturbine-schema-exposure":yA}),Ks=z.string().regex(mv),vA=z.strictObject({filter_id:Ks.meta(pr),value:Ou.nullable().meta(pr)}).meta(dl("AnalyticsFilterState"));z.strictObject({view_id:Ks.meta(pr),revision:z.number().int().min(1).optional().meta(pr),block_ids:z.array(Ks).min(1).max(24).optional().meta(pr),filter_state:z.array(vA).max(20).optional().meta(pr)}).meta(dl("AnalyticsQueryRequest"));var xA=z.object({block_id:Ks.meta(pr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(pr),message:z.string().min(1).max(500).meta(pr)}).meta(dl("AnalyticsBlockError")),SA=z.object({block_id:Ks.meta(pr),result:Xk.meta(pr)}).meta(dl("AnalyticsBlockResult"));z.object({view_id:Ks.meta(pr),revision:z.number().int().min(1).meta(pr),catalog_version:z.string().min(1).max(64).meta(pr),results:z.array(SA).meta(pr),errors:z.array(xA).default([]).meta(pr)}).meta(dl("AnalyticsQueryResponse"));var TA=z.object({id:Ks.meta(pr),version:z.number().int().min(1).meta(pr),title:Oi.meta(pr),description:Oi.optional().meta(pr),block_count:z.number().int().min(1).meta(pr)}).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:y({operationId:"listAnalyticsViews",requestParams:{query:me},summary:"List saved analytics views",tags:["analytics-views"],responses:{200:{description:"Saved analytics views",content:{"application/json":{schema:ce(aA)}}}},"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:y({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(sA)}}}},"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:y({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(oA)}}}},"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:y({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:ce(TA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:y({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:bv}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:Za}=fn,{Transient:CA}=En,{Internal:EA}=vn,Du=t=>({id:t,"x-revturbine-schema-persistence":CA,"x-revturbine-schema-exposure":EA}),RA=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(Du("ProviderCapability")),Pv=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(Du("ProviderAvailability")),em=z.object({provider_handle:Yt.meta(Za),provider_type:z.string().min(1).max(100).meta(Za),provider_version:z.string().min(1).max(100).meta(Za),contract_version:z.number().int().min(1).meta(Za),generated_at:z.string().datetime().meta(Za),data_watermark:z.string().datetime().optional().meta(Za),source_revision:z.string().min(1).max(200).optional().meta(Za)}).meta(Du("ProviderProvenance")),sg=z.object({provider_handle:Yt.meta(Za),capability:RA.meta(Za)}).meta(Du("ProviderBindingRef")),{Unrestricted:Le}=fn,{Transient:kA}=En,{Internal:AA}=vn,Xa=t=>({id:t,"x-revturbine-schema-persistence":kA,"x-revturbine-schema-exposure":AA}),wA=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(Xa("GrowthSignalPoint")),jA=z.object({metric:Zr.meta(Le),analytical_unit:Hi.meta(Le),source_scope:Ys.meta(Le),dimensions:z.record(Zr,z.string()).meta(Le),points:z.array(wA).meta(Le),provenance:em.meta(Le)}).meta(Xa("GrowthSignalSeries"));z.object({availability:Pv.meta(Le),series:z.array(jA).meta(Le),provenance:em.meta(Le)}).meta(Xa("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(Xa("TrendFeatures"));var OA=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(Xa("EvidenceRequirement")),qA=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(Xa("OpportunityInterpretation")),Tv=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:Ys.meta(Le),interpretation:qA.meta(Le)}).meta(Xa("OpportunityEvidence"));z.object({required_metrics:z.array(Zr).min(1).meta(Le),evidence:OA.meta(Le)}).meta(Xa("DetectorRequirements"));var og=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(Tv).min(1).meta(Le),hypothesis:z.string().min(1).meta(Le),confidence:z.number().min(0).max(1).meta(Le),impact:og.optional().meta(Le),suggested_action:og.optional().meta(Le),suggested_experiment:og.optional().meta(Le)}).meta(Xa("OpportunityCandidate"));var {Unrestricted:Pa}=fn,{Transient:tm}=En,{External:nm}=vn,Iv=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":tm,"x-revturbine-schema-exposure":nm}),DA=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":tm,"x-revturbine-schema-exposure":nm}),MA=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Pa),surface:Iv.meta(Pa),purpose:z.string().min(1).max(300).meta(Pa),stability:DA.meta(Pa)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":tm,"x-revturbine-schema-exposure":nm}),UA=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Pa),surface:Iv.meta(Pa),purpose:z.string().min(1).max(300).meta(Pa)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":tm,"x-revturbine-schema-exposure":nm});z.object({version:z.number().int().min(1).meta(Pa),events:z.array(MA).min(1).meta(Pa),prefix_families:z.array(UA).meta(Pa)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":tm,"x-revturbine-schema-exposure":nm});var Cv=["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"],qg=["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"],FA=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],LA=["area_viewed","feature_gated"],jy={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 xu(t,e){return t.map(n=>({name:n,surface:e,purpose:jy[n].purpose,stability:jy[n].stability}))}var Ev=["impression"],Dg=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],Rv={events:[...xu(Cv,"control_plane"),...xu(LA,"control_plane"),...xu(qg,"sdk_client"),...xu(FA,"sdk_client")]};Rv.events.map(t=>t.name);Rv.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:L,Pii:ll}=fn,{Persisted:kv,Transient:$n}=En,{Internal:Ps,External:wr}=vn,Av=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),NA=_e.extend({event_type:z.string().min(1).meta(L),source:Av.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":Ps}),VA=NA.extend({ingested_at:z.string().datetime().meta(L)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":kv,"x-revturbine-schema-exposure":Ps});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":Ps});var BA=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:BA.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 $A=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),KA=z.enum(Cv).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});z.object({event_type:KA.meta(L),source:$A.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:Av.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":Ps});var HA=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ps}),GA=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ps}),lg=_e.merge(He).merge(it).extend({event_id:z.string().min(1).meta(L),event_type:z.string().min(1).meta(L),source:HA.meta(L),payload:z.record(z.string(),z.unknown()).default({}).meta(L),status:GA.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":kv,"x-revturbine-schema-exposure":Ps});z.object({accepted:z.number().int().min(0).meta(L)}).meta({id:"null","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":Ps});var YA=500,WA=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),JA=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:WA.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(JA).min(1).max(YA).meta(L)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});var QA=10,XA=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr}),ew=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}),tw=z.object({event_type:XA.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:ew.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(tw).min(1).max(QA).meta(L)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":$n,"x-revturbine-schema-exposure":wr});({"/api/events/search":{get:y({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:HE(VA)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:y({operationId:"listWebhookEvents",requestParams:{query:me},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ce(lg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:ht}=fn,{Persisted:rm,Transient:im}=En,{Internal:Ca}=vn,wv=cn(Ut.Playbook,{sdkInput:true}),jv=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),rw=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Ca}),Mg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Ca}),Ov=z.object({name:ir.meta(ht),handle:Yt.meta(ht),plan_id:z.string().nullable().optional().meta(ht),segment_id:z.string().nullable().optional().meta(ht),trial_limit_type:Mg.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:Zn.meta(ht)}),Ko=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(Ov).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ca,...wv,...zr()}),iw=dr("FreeTrialRuleAnchor"),aw=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Ca}),qv=z.object({name:ir.meta(ht),handle:Yt.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:Mg.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:aw.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:Zn.meta(ht)}),Ho=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ht,readOnly:true})}).merge(qv).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ca,...wv,...zr()}),sw=dr("ReverseTrialRuleAnchor"),Dv=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Ca}),Mv=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Ca}),Go=_e.merge(He).merge(it).extend({trial_limit_policy:Dv.default("1_per_lifetime").meta(ht),eligibility_scope:Mv.default("per_customer").meta(ht)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ca,...jv}),Yo=_e.merge(He).merge(it).extend({trial_limit_policy:Dv.default("1_per_lifetime").meta(ht),eligibility_scope:Mv.default("per_customer").meta(ht)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ca,...jv}),Su=_e.merge(He).merge(it).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:rw.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:Mg.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:rr.meta(ht),cancelled_at:rr.meta(ht),metadata:Zn.meta(ht)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":rm,"x-revturbine-schema-exposure":Ca});({"/api/free-trial-rule-anchors":{get:y({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(iw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:y({operationId:"listFreeTrialRules",requestParams:{query:me},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ce(Ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:y({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:Ko}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free 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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:y({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:y({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(sw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({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:y({operationId:"listTrialInstances",requestParams:{query:me},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ce(Su)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:y({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Su}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:y({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Su}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:y({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:Su}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:E,Financial:Oy}=fn,{Persisted:Ts,Transient:Ug}=En,{Internal:sa}=vn,Mu=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),Uv=cn(Ut.CustomerOperations,{sdkInput:false}),ow=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Ug,"x-revturbine-schema-exposure":sa}),lw=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Ug,"x-revturbine-schema-exposure":sa}),cw=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa}),mw=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":Ts,"x-revturbine-schema-exposure":sa,...Mu}),uw=z.object({variant_id:z.string().min(1),name:ir,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(mw).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa,...Mu}),pw=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),dw=z.object({minimum_revenue_effect:z.number().min(0)}).strict(),gw=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()})]),hw=z.object({method:z.literal("holm"),family_scope:z.literal("primary_and_guardrails_separate")}),Fv=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:Hi,sequential:pw.optional(),multiple_comparisons:hw.optional(),variance_reduction:gw.optional(),practical_significance:dw.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa,...Mu});var xr=t=>({id:t,"x-revturbine-schema-persistence":Ug,"x-revturbine-schema-exposure":sa}),Uu=z.object({variant_id:z.string().min(1).meta(E)}),fw=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(xr("ExperimentClusterAggregate")),_w=z.object({assignment_unit:Hi.meta(E),clusters:z.array(fw).min(2).meta(E)}).meta(xr("ExperimentClusteredSufficientStatistics")),Fu={clustered:_w.optional().meta(E)},yw=Uu.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),...Fu}).meta(xr("MeanVariantStatisticalSummary")),vw=Uu.extend({statistic_type:z.literal("binary").meta(E),n:z.number().int().min(0).meta(E),successes:z.number().int().min(0).meta(E),...Fu}).meta(xr("BinaryVariantStatisticalSummary")),bw=Uu.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),...Fu}).meta(xr("RatioVariantStatisticalSummary")),xw=Uu.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),...Fu}).meta(xr("CovarianceVariantStatisticalSummary")),Sw=z.discriminatedUnion("statistic_type",[yw,vw,bw,xw]).meta(xr("VariantStatisticalSummary")),Lv=z.object({start:z.string().datetime().meta(E),end:z.string().datetime().meta(E)}).meta(xr("ExperimentObservationWindow")),Pw=z.object({metric:Zr.meta(E),observation_window:Lv.meta(E)}).meta(xr("ExperimentCovariateProvenance")),Tw=z.object({schema_version:z.number().int().min(1).meta(E),experiment_handle:Yt.meta(E),experiment_version:z.number().int().min(1).meta(E),metric:Zr.meta(E),analysis_unit:Hi.meta(E),variants:z.array(Sw).min(1).meta(E),observation_window:Lv.meta(E),covariate:Pw.optional().meta(E),data_watermark:z.string().datetime().meta(E),source_scope:Ys.meta(E),provider:em.meta(E)}).meta(xr("ExperimentEvidence")),Iw=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(xr("ExperimentSampleRatioMismatch")),Cw=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(E),sample_ratio_mismatch:Iw.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(xr("ExperimentHealth")),Ew=z.object({lower:z.number().meta(E),upper:z.number().meta(E),level:z.number().min(0).max(1).meta(E)}).meta(xr("ExperimentConfidenceInterval")),Rw=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(xr("ExperimentSequentialResult")),kw=z.object({minimum_revenue_effect:z.number().min(0).meta(Oy),revenue_effect:z.number().meta(Oy),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(E)}).meta(xr("ExperimentPracticalSignificanceResult")),Aw=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(xr("ExperimentMultipleComparisonResult")),ww=z.object({metric:Zr.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:Ew.optional().meta(E),p_value:z.number().min(0).max(1).optional().meta(E),multiple_comparison:Aw.optional().meta(E),probability_positive:z.number().min(0).max(1).optional().meta(E),expected_loss:z.number().min(0).optional().meta(E),sequential:Rw.optional().meta(E),practical_significance:kw.optional().meta(E),sample_size:z.number().int().min(0).optional().meta(E)}).meta(xr("ExperimentMetricResult")),jw=z.object({metric:Zr.meta(E),summary_schema_version:z.number().int().min(1).meta(E),data_watermark:z.string().datetime().meta(E),provider:em.meta(E)}).meta(xr("ExperimentEvidenceProvenance")),Ow=z.object({provider:em.meta(E),evidence:z.array(jw).min(1).meta(E)}).meta(xr("AnalysisProvenance")),qw=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(ww).meta(E),health:Cw.meta(E),provenance:Ow.meta(E)}).meta(xr("ExperimentAnalysisResult")),Nv=_e.merge(it).extend({created_at:z.string().datetime().meta({...E,readOnly:true}),experiment_handle:Yt.meta(E),experiment_version:z.number().int().min(1).meta(E),metric_semantic_id:Zr.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:Yt.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)}),Dw=Nv.extend({analysis_unit:Hi.meta(E),evidence:Tw.meta(E)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa,...Uv}),Mw=Nv.extend({evidence_snapshot_id:z.string().min(1).meta(E),analysis_provider_handle:Yt.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:Fv.meta(E),result:qw.meta(E)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa,...Uv}),Ya=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...E,readOnly:true}),name:ir.meta(E),handle:Yt.meta(E),description:z.string().max(1e3).optional().meta(E),experiment_type:lw.meta(E),status:ow.default("draft").meta(E),target_resource_id:z.string().optional().meta(E),target_segments:z.array(z.string()).optional().meta(E),variants:z.array(uw).min(2).meta(E),primary_metric:Zr.meta(E),guardrail_metrics:z.array(Zr).optional().meta(E),assignment_unit:Hi.optional().meta(E),assignment_provider_binding:sg.extend({capability:z.literal("experiment_assignment"),allocation_mode:cw}).optional().meta(E),evidence_provider_binding:sg.extend({capability:z.literal("experiment_evidence")}).optional().meta(E),analysis_provider_binding:sg.extend({capability:z.literal("experiment_analysis")}).optional().meta(E),analysis_config:Fv.optional().meta(E),metric_threshold:z.number().default(.05).meta(E),secondary_metrics:z.array(Zr).default([]).meta(E),traffic_allocation:z.number().min(0).max(1).default(1).meta(E),started_at:rr.meta(E),ended_at:rr.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:Zn.meta(E)}).meta({id:"Experiment","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa,...Mu,...zr()}),Uw=dr("ExperimentAnchor"),Fw=vg,qy=_e.merge(He).merge(it).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:Fw.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(Tv).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:Zn.meta(E)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Ts,"x-revturbine-schema-exposure":sa});({"/api/experiment-evidence-snapshots":{get:y({operationId:"listExperimentEvidenceSnapshots",requestParams:{query:me},summary:"List immutable experiment evidence snapshots",tags:["experiments"],responses:{200:{description:"Experiment evidence snapshots",content:{"application/json":{schema:ce(Dw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-evidence-snapshots",persistence:{table:"experimentEvidenceSnapshots",mode:"list"}}})},"/api/experiment-analysis-results":{get:y({operationId:"listExperimentAnalysisResults",requestParams:{query:me},summary:"List immutable experiment analysis results",tags:["experiments"],responses:{200:{description:"Experiment analysis results",content:{"application/json":{schema:ce(Mw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-analysis-results",persistence:{table:"experimentAnalysisResults",mode:"list"}}})},"/api/experiment-anchors":{get:y({operationId:"listExperimentAnchors",requestParams:{query:me},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ce(Uw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:y({operationId:"listExperiments",requestParams:{query:me},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ce(Ya)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:y({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:y({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Ya.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:y({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:y({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:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:y({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:y({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:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:y({operationId:"listOptimizationSuggestions",requestParams:{query:me},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ce(qy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:y({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:qy}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Dr,Financial:Dy}=fn,{Persisted:Lw,Transient:Vv}=En,{Internal:Fg}=vn,Nw=cn(Ut.Playbook,{sdkInput:true}),Vw=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":Fg}),Bw=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":Fg}),ys=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Dr,readOnly:true}),name:ir.meta(Dr),handle:Yt.meta(Dr),description:z.string().max(1e3).optional().meta(Dr),rt_status:Vw.default("draft").meta(Dr),discount_type:Bw.meta(Dr),discount_value:z.number().min(0).meta(Dy),currency:z.string().length(3).default("USD").meta(Dy),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:rr.meta(Dr),ends_at:rr.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:Zn.meta(Dr)}).meta({id:"Promotion","x-revturbine-schema-persistence":Lw,"x-revturbine-schema-exposure":Fg,...Nw,...zr()}),zw=dr("PromotionAnchor");({"/api/promotion-anchors":{get:y({operationId:"listPromotionAnchors",requestParams:{query:me},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ce(zw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:y({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:y({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:y({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:y({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:y({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:y({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:d}=fn,{Persisted:gl,Transient:St}=En,{Internal:Gi,External:Ft}=vn,gt=cn(Ut.Playbook,{sdkInput:true}),My=cn(Ut.Playbook,{sdkInput:false}),cl=cn(Ut.Playbook,{inConfig:false,sdkInput:false}),Bv=cn(Ut.Playbook,{inConfig:false,sdkInput:true}),Wo=cn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.CodeConstant}),mg=cn(Ut.Playbook,{inConfig:false,sdkInput:true,source:wi.Runtime}),ug=cn(Ut.Playbook,{inConfig:false,sdkInput:false,source:wi.Runtime}),$w=cn(Ut.Billing,{sdkInput:false}),Kw=cn(Ut.Metering,{sdkInput:false}),Hw=cn(Ut.Branding,{inConfig:true,sdkInput:true}),Gw=cn(Ut.Branding,{sdkInput:false}),Yw="1.0.0",Mc=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),name:ir.meta(d),handle:Yt.meta(d),description:Gs.meta(d),is_default:z.boolean().default(false).meta(d),entitlement_ids:z.array(z.string()).default([]).meta(d),metadata:Zn.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...cl,...zr()}),Ww=dr("SeatTypeAnchor"),Uc=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.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:Zn.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...cl,...zr()}),Jw=dr("PersonalizationTokenAnchor"),Zw=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),pg=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({handle:Yt.meta({...d,readOnly:true}),stripe_account_id:z.string().min(1).meta(d),live_mode:z.boolean().default(false).meta(d),onboarding_state:Zw.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:Zn.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...$w,...$i()});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":St,"x-revturbine-schema-exposure":Ft,...Gw});var Fc=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({handle:Yt.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:Zn.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":gl,"x-revturbine-schema-exposure":Gi,...Kw,...$i()}),Uy=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),Lc=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.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:Uy.default("warn").meta(d),hard_limit_action:Uy.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":gl,"x-revturbine-schema-exposure":Gi,...Bv,...$i()}),Qw=dr("UsageEnforcementSettingsAnchor"),Xw=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":St,"x-revturbine-schema-exposure":Gi}),ej=z.object({id:z.string().min(1).meta(d),group:z.array(Xw).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":St,"x-revturbine-schema-exposure":Gi}),tj=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),zv=z.object({capRules:z.array(ej).default([]).meta(d),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(d),remindLaterMinutes:z.number().int().min(0).default(60).meta(d),testMode:tj.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Gi}),dg=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:Yt.meta({...d,readOnly:true}),global_frequency_cap:zv.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":gl,"x-revturbine-schema-exposure":Gi,...Bv,...$i()}),nj=dr("PlacementSettingsAnchor"),rj=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":St,"x-revturbine-schema-exposure":Ft}),ij=z.object({name:z.string().min(1).meta(d),handle:z.string().min(1).meta(d),predicates:z.array(rj).optional().meta(d),dimension_id:z.string().optional().meta(d),experiment_handle:z.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),aj=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:bs.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),sj=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:bs.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),oj=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),currency:Gc.meta(d),pricing_model:Wc.meta(d),visibility:bs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Ru.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),lj=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),currency:Gc.meta(d),pricing_model:Wc.meta(d),visibility:bs.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Ru.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),cj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),mj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),uj=z.object({handle:z.string().min(1).meta(d),global_frequency_cap:zv.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":St,"x-revturbine-schema-exposure":Ft,...gt}),pj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),dj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),gj=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),type:yg.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":St,"x-revturbine-schema-exposure":Ft,...gt}),hj=z.object({id:z.string().min(1).meta(d),entitlement_id:z.string().min(1).meta(d),targets:z.array(Jy).min(1).meta(d),segment_ids:z.array(z.string()).default([]).meta(d),kind:yg.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}),...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(d),allocation:ku.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),fj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),_j=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":St,"x-revturbine-schema-exposure":Ft,...gt}),yj=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":St,"x-revturbine-schema-exposure":Ft}),vj=z.object({id:z.string().min(1).meta(d),surface_type:z.string().meta(d),fields:z.array(yj).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),bj=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":St,"x-revturbine-schema-exposure":Ft}),xj=z.object({name:z.string().min(1).meta(d),action_type:bj.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":St,"x-revturbine-schema-exposure":Ft,...gt}),Sj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),Pj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),Fy=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":St,"x-revturbine-schema-exposure":Ft}),Tj=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:Fy.meta(d),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Fy})).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":St,"x-revturbine-schema-exposure":Ft,...gt}),Ij=z.object({label:z.string().meta(d),path:zy.meta(d),config:z.record(z.string(),z.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),$v=z.object({template_id:z.string().min(1).meta(d),fields:z.record(z.string(),z.string()).meta(d),ctas:z.array(Ij).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),Kv=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":St,"x-revturbine-schema-exposure":Ft}),Cj=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":St,"x-revturbine-schema-exposure":Ft}),Hv=z.object({max_per_period:Cj.optional().meta(d),cooldown_days:z.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),Ej=z.object({id:z.string().min(1).meta(d),target:Kv.meta(d),surfaces:z.array($v).meta(d),caps:Hv.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":St,"x-revturbine-schema-exposure":Ft}),Rj=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:zc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:zc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:zc}),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":St,"x-revturbine-schema-exposure":Ft}),kj=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft}),Aj=z.object({id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:kj.meta(d),trigger:Rj.meta(d),payloads:z.array(Ej).meta(d),order:z.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),wj=z.object({payload_id:z.string().min(1).meta(d),placement_id:z.string().min(1).meta(d),target:Kv.meta(d),caps:Hv.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($v).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":St,"x-revturbine-schema-exposure":Ft,...gt}),jj=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":St,"x-revturbine-schema-exposure":Ft,...gt}),Oj=_e.merge(Ov).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...cl}),qj=_e.merge(qv).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...cl}),Dj=z.object({plans:z.array(aj).meta({...d,...gt}),addons:z.array(sj).optional().meta({...d,...gt}),entitlements:z.array(gj).meta({...d,...gt}),entitlement_rules:z.array(hj).meta({...d,...gt}),segments:z.array(ij).meta({...d,...gt}),content_ui_paths:z.array(xj).meta({...d,...gt}),slot_configs:z.array(fj).optional().meta({...d,...gt,...Zd({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,...gt,...Zd({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,...Hw,...Zd({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(_j).optional().meta({...d,...gt}),message_blocks:z.array(Tj).optional().meta({...d,...gt}),placement_payloads:z.array(wj).optional().meta({...d,...gt}),placements:z.array(Aj).optional().meta({...d,...gt}),content_promotions:z.array(Sj).optional().meta({...d,...gt}),personalization_tokens:z.array(Pj).optional().meta({...d,...gt}),surface_templates:z.array(vj).optional().meta({...d,...gt}),free_trial_rules:z.array(Oj).optional().meta({...d,...My}),reverse_trial_rules:z.array(qj).optional().meta({...d,...My}),plan_variations:z.array(oj).optional().meta({...d,...gt}),addon_variations:z.array(lj).optional().meta({...d,...gt}),extension_rules:z.array(jj).optional().meta({...d,...gt}),seat_types:z.array(cj).optional().meta({...d,...gt}),enforcement_defaults:z.array(mj).optional().meta({...d,...gt}),placement_settings:z.array(uj).optional().meta({...d,...gt}),segment_dimensions:z.array(pj).optional().meta({...d,...gt}),meter_bindings:z.array(dj).optional().meta({...d,...gt}),experiments:z.array(z.unknown()).max(0).optional().meta({...d,...cl}),signal_catalog:z.object({}).strict().optional().meta({...d,...cl})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt}),Mj=z.object({artifact_type:z.literal("playbook").meta({...d,...Wo,readOnly:true}),format_version:z.literal(Yw).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,...mg,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...d,...ug,readOnly:true}),environment_id:z.string().min(1).optional().meta({...d,...ug,readOnly:true}),project_id:z.string().min(1).optional().meta({...d,...ug,readOnly:true}),exported_at:z.string().datetime().optional().meta({...d,...mg,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":St,"x-revturbine-schema-exposure":Ft,...mg}),Gv=Mj.extend(Dj.shape).meta({"x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});function Uj(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Yv(t){if(!Uj(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(Yv,Gv).meta({id:"Playbook","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});z.preprocess(Yv,Gv.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":St,"x-revturbine-schema-exposure":Ft,...gt});({"/api/seat-type-anchors":{get:y({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(Ww)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:y({operationId:"listSeatTypes",requestParams:{query:me},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ce(Mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:y({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:y({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:y({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:y({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(Jw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:y({operationId:"listPersonalizationTokens",requestParams:{query:me},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ce(Uc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:y({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:y({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:y({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:y({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(pg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:pg}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:y({operationId:"listMeteringConfigs",requestParams:{query:me},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ce(Fc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:y({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(Fc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:y({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Fc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:y({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:y({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(Qw)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:y({operationId:"listUsageEnforcementSettings",requestParams:{query:me},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ce(Lc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:y({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(Lc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Lc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:y({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Lc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Lc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:y({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:y({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(nj)}}},default:{description:"Error response",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:y({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(dg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:dg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Wa}=fn,{Persisted:Wv}=En,{Internal:Jv}=vn,Fj=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Wv,"x-revturbine-schema-exposure":Jv}),Ly=_e.merge(He).merge(it).extend({action:Fj.meta(Wa),resource_type:z.string().min(1).max(100).meta(Wa),resource_id:z.string().min(1).meta(Wa),resource_name:z.string().max(200).optional().meta(Wa),actor_id:z.string().min(1).meta(Wa),actor_email:z.string().email().optional().meta(Wa),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Wa),summary:z.string().max(1e3).optional().meta(Wa),metadata:Zn.meta(Wa)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Wv,"x-revturbine-schema-exposure":Jv});({"/api/changelog":{get:y({operationId:"listChangeLogEntries",requestParams:{query:me},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ce(Ly)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:y({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:Ly}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Pu}=fn,{Persisted:Lj,Transient:Nj}=En,{Internal:Zv}=vn,Vj=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":Nj,"x-revturbine-schema-exposure":Zv}),vs=_e.merge(He).extend({name:ir.meta(Pu),handle:Yt.meta(Pu),status:Vj.default("active").meta(Pu),metadata:Zn.meta(Pu)}).meta({id:"Tenant","x-revturbine-schema-persistence":Lj,"x-revturbine-schema-exposure":Zv});({"/api/tenants":{get:y({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:y({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:y({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:y({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:y({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:Vi}=fn,{Persisted:Bj,Transient:Qv}=En,{Internal:Lg}=vn,zj=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Qv,"x-revturbine-schema-exposure":Lg}),Jo=_e.merge(He).merge(it).extend({name:ir.meta(Vi),handle:Yt.meta(Vi),description:Gs.meta(Vi),is_production:z.boolean().default(false).meta({...Vi,readOnly:true}),status:zj.default("active").meta(Vi),cloned_from_environment_id:z.string().nullable().default(null).meta({...Vi,readOnly:true}),cloned_at:rr.meta({...Vi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Vi,readOnly:true}),requires_approval:z.boolean().default(false).meta(Vi),auto_deploy_on_approval:z.boolean().default(false).meta(Vi),created_by:z.string().optional().meta(Vi),metadata:Zn.meta(Vi)}).meta({id:"Environment","x-revturbine-schema-persistence":Bj,"x-revturbine-schema-exposure":Lg}),$j=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":Qv,"x-revturbine-schema-exposure":Lg});({"/api/environments":{get:y({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:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:y({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:y({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:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:y({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:$j}}},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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:tt,Pii:Hc}=fn,{Transient:Ea,Persisted:Kj}=En,{External:oa}=vn,Hj=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa});z.object({superseded_output_id:z.string().min(1).meta(tt),superseded_by:z.string().min(1).meta(tt),reason:Hj.meta(tt)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Kj,"x-revturbine-schema-exposure":oa,...fn.Operational});var Gj=z.enum(By).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa}),Xv=z.object({output_id:z.string().meta(tt),category:z.string().meta(tt),surface:z.object({template:z.string().optional().meta(tt),type:Vy.meta(tt),slot_id:z.string().optional().meta(tt)}).meta(tt),content:z.record(z.string(),z.unknown()).meta(tt),promotion:z.record(z.string(),z.unknown()).optional().meta(tt),cta_path:z.record(z.string(),z.unknown()).optional().meta(tt),ui_path:z.record(z.string(),z.unknown()).optional().meta(tt),rule_id:z.string().meta(tt),decision_id:z.string().meta(tt),config_version:z.string().meta(tt),present_upsell:z.boolean().meta(tt),message_block_handle:z.string().optional().meta(tt),message_block_id:z.string().optional().meta(tt),experiment_id:z.string().optional().meta(tt),variant_key:z.string().optional().meta(tt),experiment_version_id:z.string().optional().meta(tt)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa}),Yj=z.object({status:Gj.meta(tt),allowed:z.boolean().meta(tt),reason:z.string().optional().meta(tt),current_tier:z.string().optional().meta(tt),limit:z.number().optional().meta(tt),used:z.number().optional().meta(tt),remaining:z.number().optional().meta(tt),placement:Xv.optional().meta(tt)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa});z.object({id:z.string().meta(tt),name:z.string().optional().meta(tt),discount:z.string().optional().meta(tt),type:z.string().optional().meta(tt),status:z.string().optional().meta(tt)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa});var Wj=z.object({id:z.string().meta(Hc),anonymous_id:z.string().optional().meta(tt),traits:z.record(z.string(),z.unknown()).optional().meta(Hc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa}),Jj=z.object({slot_id:z.string().optional().meta(tt),entitlement_handle:z.string().optional().meta(tt),plan_handle:z.string().optional().meta(tt),placement_handle:z.string().optional().meta(tt),visible:z.boolean().meta(tt),output:Xv.optional().meta(tt),reason_codes:z.array(z.string()).optional().meta(tt)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa}),Zj=Yj,Qj=Tg.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa}),Xj=z.object({segments:z.array(z.string()).optional().meta(tt),traits:z.record(z.string(),z.unknown()).optional().meta(Hc),usage_balances:z.record(z.string(),z.number()).optional().meta(tt)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa});z.object({version:z.literal("1.0.0").meta(tt),request_id:z.string().meta(tt),tenant_id:z.string().meta(tt),evaluated_at:z.string().datetime().meta(tt),ttl_seconds:z.number().int().min(0).max(86400).meta(tt),user:Wj.meta(Hc),decisions:z.array(Jj).meta(tt),entitlements:z.record(z.string(),Zj).optional().meta(tt),theme:z.record(z.string(),z.unknown()).optional().meta(tt),trial_status:Qj.optional().meta(tt),user_context:Xj.optional().meta(Hc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Ea,"x-revturbine-schema-exposure":oa});var {Unrestricted:Jt}=fn,{Persisted:eO,Transient:Lu}=En,{Internal:am}=vn,tO=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":am}),Nc=_e.merge(He).merge(it).extend({environment_id:z.string().min(1).meta(Jt),name:ir.meta(Jt),description:z.string().max(2e3).optional().meta(Jt),status:tO.default("draft").meta(Jt),labels:z.array(z.string()).default([]).meta(Jt),created_by:z.string().min(1).meta(Jt),submitted_by:z.string().nullable().default(null).meta({...Jt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Jt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Jt,readOnly:true}),submitted_at:rr.meta({...Jt,readOnly:true}),reviewed_at:rr.meta({...Jt,readOnly:true}),deployed_at:rr.meta({...Jt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Jt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Jt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Jt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Jt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Jt),review_notes:z.string().max(2e3).optional().meta(Jt),rejection_reason:z.string().max(2e3).optional().meta(Jt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Jt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Jt,readOnly:true}),bundle_sha256:z.string().regex(/^[a-f0-9]{64}$/).nullable().default(null).meta({...Jt,readOnly:true}),metadata:Zn.meta(Jt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":eO,"x-revturbine-schema-exposure":am}),eb=z.object({handle:z.string().meta(Jt),resource_type:z.string().meta(Jt),resource_name:z.string().optional().meta(Jt),action:z.enum(["create","update","delete"]).meta(Jt),has_conflict:z.boolean().meta(Jt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":am}),nO=z.object({playbook_version_id:z.string().meta(Jt),entries:z.array(eb).meta(Jt),total_entries:z.number().int().min(0).meta(Jt),total_conflicts:z.number().int().min(0).meta(Jt),deployable:z.boolean().meta(Jt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":am}),rO=z.object({playbook_version_id:z.string().meta(Jt),deployed_count:z.number().int().min(0).meta(Jt),superseded_count:z.number().int().min(0).meta(Jt),skipped_conflicts:z.number().int().min(0).meta(Jt),deployed_at:z.string().datetime().meta(Jt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":am});({"/api/playbook-versions/{playbookVersionId}/submit":{post:y({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:Nc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:y({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:Nc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:y({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:Nc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:y({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:rO}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:y({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:Nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:y({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:nO}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:y({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(eb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:y({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:Nc}}},default:{description:"Error",content:{"application/json":{schema:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:y({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:jt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:mt}=fn,{Persisted:Ra}=En,{Internal:ka}=vn,iO=cn(Ut.CustomerOperations,{sdkInput:false,source:wi.Customer}),aO=365,zs=_e.merge(He).merge(it).extend({provider_handle:Yt.meta(mt),provider_type:Yt.meta(mt),endpoint:z.string().url().max(2048).nullable().default(null).meta(mt),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...mt,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(mt),health_state:Pv.default("unavailable").meta({...mt,readOnly:true}),last_health_check_at:rr.meta({...mt,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...mt,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(mt),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(mt),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(mt),stale_after_ms:z.number().int().min(1).default(3e5).meta(mt),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(mt)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka,...iO}),sO=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),$s=_e.merge(He).merge(it).extend({key:z.string().min(1).max(100).meta(mt),value_type:sO.default("boolean").meta(mt),value:z.string().max(4e3).default("false").meta(mt),description:Gs.meta(mt),enabled:z.boolean().default(true).meta(mt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),gg=_e.merge(He).merge(it).extend({workspace_name:z.string().min(1).max(200).meta(mt),support_email:z.string().email().nullable().default(null).meta(mt),timezone:z.string().max(50).default("UTC").meta(mt),default_currency:z.string().length(3).default("USD").meta(mt),logo_url:z.string().url().nullable().default(null).meta(mt),activity_window_days:z.number().int().min(1).default(bu.window_days).meta(mt),activity_high_min:z.number().int().min(1).default(bu.high_min).meta(mt),activity_medium_min:z.number().int().min(1).default(bu.medium_min).meta(mt),activity_low_min:z.number().int().min(1).default(bu.low_min).meta(mt),analytics_retention_days:z.number().int().min(1).default(aO).meta(mt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),hg=_e.merge(He).merge(it).extend({server_url:z.string().url().max(500).meta(mt),api_token_hint:z.string().max(50).nullable().default(null).meta(mt),allow_write_actions:z.boolean().default(false).meta(mt),enabled_tools:z.array(z.string().max(100)).default([]).meta(mt),enabled:z.boolean().default(false).meta(mt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),Tu=_e.merge(He).merge(it).extend({step_key:z.string().min(1).max(100).meta(mt),label:z.string().min(1).max(200).meta(mt),done:z.boolean().default(false).meta(mt),completed_at:rr.meta({...mt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),oO=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),lO=_e.merge(it).extend({environment_id:z.string().min(1).default("production").meta(mt),actor_type:oO.meta(mt),actor_id:z.string().nullable().default(null).meta(mt),action:z.string().min(1).max(120).meta(mt),object_type:z.string().max(120).nullable().default(null).meta(mt),object_id:z.string().max(200).nullable().default(null).meta(mt),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(mt),occurred_at:z.string().datetime().meta({...mt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),cO=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka}),Iu=_e.merge(He).merge(it).merge(Sn).merge(Rn).extend({handle:Yt.meta({...mt,readOnly:true}),identifier:z.string().min(1).max(200).meta(mt),identifier_type:cO.default("user_id").meta(mt),note:z.string().max(500).nullable().default(null).meta(mt),added_by:z.string().meta(mt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Ra,"x-revturbine-schema-exposure":ka,...$i()});({"/api/flags":{get:y({operationId:"listFeatureFlags",requestParams:{query:me},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ce($s)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:y({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Br($s)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:y({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:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:y({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr($s).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:y({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:$s}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:y({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(gg).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:gg}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:y({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(hg).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:hg}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:y({operationId:"listOnboardingSteps",requestParams:{query:me},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ce(Tu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:y({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:Tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:y({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(Tu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:y({operationId:"listAuditEvents",requestParams:{query:me},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ce(lO)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:y({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(Iu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:y({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Br(Iu)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:y({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:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})},"/api/settings/provider-connections":{get:y({operationId:"listProviderConnections",requestParams:{query:me},summary:"List provider connections for the tenant",tags:["settings"],responses:{200:{description:"Provider connections",content:{"application/json":{schema:ce(zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"list"}}}),post:y({operationId:"createProviderConnection",summary:"Create a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Br(zs)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"create",writeSchema:"ProviderConnectionSchema#writable"}}})},"/api/settings/provider-connections/{connectionId}":{get:y({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:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"get"}}}),put:y({operationId:"updateProviderConnection",requestParams:{path:z.object({connectionId:z.string()})},summary:"Update a provider connection",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mr(zs).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"update",writeSchema:"ProviderConnectionSchema#writable"}}}),delete:y({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:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:fe,Pii:Jr}=fn,{Persisted:pi,Transient:Ng}=En,{Internal:Ur}=vn,mO=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.merge(He).extend({name:ir.meta(fe),email:z.string().email().meta(Jr),email_verified:z.boolean().default(false).meta(fe),image:z.string().url().nullable().default(null).meta(Jr),role:mO.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:rr.meta({...fe,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.merge(He).extend({expires_at:z.string().datetime().meta(fe),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({...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":pi,"x-revturbine-schema-exposure":Ur});_e.merge(He).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({...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:rr.meta({...fe,readOnly:true}),refresh_token_expires_at:rr.meta({...fe,readOnly:true}),scope:z.string().nullable().default(null).meta(fe),password:z.string().nullable().default(null).meta({...Jr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.merge(He).extend({identifier:z.string().min(1).meta(Jr),value:z.string().min(1).meta({...Jr,readOnly:true}),expires_at:z.string().datetime().meta(fe)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.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({...fe,readOnly:true}),verified:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.extend({name:ir.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":pi,"x-revturbine-schema-exposure":Ur});var tb=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});var nb=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Ng,"x-revturbine-schema-exposure":Ur}),rb=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Ng,"x-revturbine-schema-exposure":Ur});z.object({resource:nb,action:rb}).meta({id:"Permission","x-revturbine-schema-persistence":Ng,"x-revturbine-schema-exposure":Ur});var uO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],pO=["plans","entitlements","placements","targeting","content","experiments"],dO=["plans","entitlements","placements","targeting","content","experiments"],gO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],hO=["read","create","update","delete","publish","approve","invite","manage_roles"];function Nu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var fO=Nu(uO,["read"]),_O=[...fO,...Nu(pO,["create","update"])];[..._O,...Nu(dO,["publish","approve","delete"])];Nu(gO,hO);var yO=nb.options.flatMap(t=>rb.options.map(e=>`${t}:${e}`));z.enum(yO).meta({id:"McpTokenScope","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),role:tb.default("viewer").meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});var vO=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Ur});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),email:z.string().email().meta(Jr),role:tb.nullable().default(null).meta(fe),status:vO.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":pi,"x-revturbine-schema-exposure":Ur});_e.extend({name:z.string().max(200).nullable().default(null).meta(fe),public_key:z.string().min(1).meta({...Jr,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":pi,"x-revturbine-schema-exposure":Ur});_e.merge(He).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({...Jr,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:rr.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:rr.meta({...fe,readOnly:true}),expires_at:rr.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":pi,"x-revturbine-schema-exposure":Ur});_e.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":pi,"x-revturbine-schema-exposure":Ur});var ib="0.7.8";var Vu=/^[a-z0-9._]{1,100}$/;var Ne={Persisted:"persisted",Transient:"transient"},Me={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 ab="x-revturbine-schema-exposure",SO="readOnly",PO="x-revturbine-decision-only",Bu={[PO]:true},Xr={[ab]:Me.External},Vg={[ab]:Me.Internal};function Kn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[SO]===true||(e[n]=r);}return z.object(e)}function ar(t){let e=Kn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(Vu)}):e}var {Unrestricted:Sr}=qe,{Transient:ei,Persisted:TO}=Ne,{Internal:Js,External:Aa}=Me;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":ei,"x-revturbine-schema-exposure":Aa});var Bg=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":ei,"x-revturbine-schema-exposure":Aa}),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":ei,"x-revturbine-schema-exposure":Aa}),W=z.object({id:z.string().min(1).meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Aa}),ue=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Aa});var EO=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],zu=z.enum(EO).meta({id:"ComponentType","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Aa}),sm=zu,RO=["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"],zg=z.enum(RO).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});var om=["allowed","limited","denied"],lm={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":ei,"x-revturbine-schema-exposure":Aa});var hl=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Aa}),Is=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Aa});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js});var nn=z.string().min(1).max(200),nt=z.string().min(1).max(100),Ci=z.string().max(500).optional(),Kt=z.record(z.string(),z.unknown()).default({}),Cs=z.number().int().min(10).max(100).multipleOf(10),mn=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":ei,"x-revturbine-schema-exposure":Js}),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":ei,"x-revturbine-schema-exposure":Js}),jO=W.merge(le).merge(ue).merge(Lt).extend({handle:nt.meta({...Sr,readOnly:true}),active:z.boolean().default(true).meta({...Sr,readOnly:true})});function bn(t){return jO.meta({id:t,"x-revturbine-schema-persistence":TO,"x-revturbine-schema-exposure":Js})}var fl=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Js}),_l=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":ei,"x-revturbine-schema-exposure":Aa});var Ge={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},jr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},OO="x-revturbine-context",qO="x-revturbine-in-config",DO="x-revturbine-sdk-input",MO="x-revturbine-source",UO="x-revturbine-deprecation",FO={[Ge.Playbook]:jr.Customer,[Ge.Branding]:jr.Customer,[Ge.Billing]:jr.Stripe,[Ge.Metering]:jr.Customer,[Ge.CustomerOperations]:jr.Runtime,[Ge.EventIngestion]:jr.Runtime};function ft(t,e){return {[OO]:t,[qO]:e.inConfig??t===Ge.Playbook,[DO]:e.sdkInput,[MO]:e.source??FO[t]}}function cm(t){return {deprecated:true,[UO]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var $g={Named:"named",Minted:"minted"},ob="x-revturbine-schema-identity";function Fn(t="handle"){return {[ob]:{kind:$g.Named,handleField:t}}}function Pr(t="handle"){return {[ob]:{kind:$g.Minted,handleField:t}}}var K=t=>z.object({items:z.array(t)}),ze=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:yl}=qe,{Persisted:mm,Transient:$u}=Ne,{External:es}=Me,LO=ft(Ge.Playbook,{sdkInput:true}),NO=ft(Ge.Playbook,{sdkInput:false}),Kg=ft(Ge.Billing,{sdkInput:false}),wa=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":$u,"x-revturbine-schema-exposure":es}),no=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":$u,"x-revturbine-schema-exposure":es}),vl=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":$u,"x-revturbine-schema-exposure":es}),Zs=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:nn.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:wa.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"Plan","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":es,...LO,...Fn()}),VO=bn("PlanAnchor"),Qs=W.merge(le).merge(ue).merge(Lt).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(yl),currency:Is.meta(yl),pricing_model:no.meta(Qt),visibility:wa.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:vl.default("static").meta(Qt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":es,...Kg,...Pr()}),BO=bn("PlanVariationAnchor"),Xs=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qt,readOnly:true}),name:nn.meta(Qt),handle:nt.meta(Qt),sort_order:z.number().int().default(0).meta(Qt),visibility:wa.default("public").meta(Qt),metadata:Kt.meta(Qt)}).meta({id:"AddOn","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":es,...NO,...Fn()}),zO=bn("AddOnAnchor"),eo=W.merge(le).merge(ue).merge(Lt).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(yl),currency:Is.meta(yl),pricing_model:no.meta(Qt),visibility:wa.default("public").meta(Qt),stripe_price_id:z.string().optional().meta(Qt),price_source:vl.default("static").meta(Qt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":es,...Kg,...Pr()}),$O=bn("AddOnVariationAnchor"),lb=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":$u,"x-revturbine-schema-exposure":es}),to=W.merge(le).merge(ue).extend({stripe_price_id:z.string().min(1).meta(Qt),stripe_product_id:z.string().min(1).meta(Qt),billing_period:lb.meta(Qt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(yl),currency:Is.meta(yl),pricing_model:no.meta(Qt),nickname:z.string().nullable().default(null).meta(Qt),is_mock:z.boolean().default(false).meta(Qt),last_updated_from_stripe:mn.meta(Qt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":es,...Kg});var KO=Kn(Zs),HO=Kn(Qs),GO=Kn(Xs),YO=Kn(eo),WO=Kn(to);({"/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:K(VO)}}},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:H},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:K(Zs)}}},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:ar(Zs)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Zs}}},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:Zs}}},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:KO}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Zs}}},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:H},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:K(BO)}}},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:H},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:K(Qs)}}}},"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:ar(Qs)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Qs}}}},"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:Qs}}}},"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:HO}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Qs}}}},"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:K(zO)}}},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:H},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:K(Xs)}}}},"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:ar(Xs)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Xs}}}},"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:Xs}}}},"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:GO}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Xs}}}},"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:K($O)}}},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:H},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:K(eo)}}}},"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:ar(eo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:eo}}}},"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:eo}}}},"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:YO}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:eo}}}},"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:K(to)}}}},"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:ar(to)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:to}}}},"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:to}}}},"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:WO}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:to}}}},"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:Gg,Transient:Ei}=Ne,{Internal:cb,External:di}=Me,mb=ft(Ge.Playbook,{sdkInput:true}),ZO=ft(Ge.Playbook,{inConfig:false,sdkInput:false}),Yg=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":Ei,"x-revturbine-schema-exposure":di}),bl=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),ub=z.enum(om).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),pb=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),Wg=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),io=z.object({entitlement_id:z.string().min(1).meta(Re),entitlement_handle:z.string().min(1).meta(Re),status:ub.meta(Re),limit:z.number().optional().meta(Re),used:z.number().optional().meta(Re),allocation:bl.optional().meta(Re),enforcement:Wg.optional().meta(Re),source:pb.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":Ei,"x-revturbine-schema-exposure":di,...qe.Operational});z.object({account:z.record(z.string(),io).optional().meta(Re),instance:z.record(z.string(),io).optional().meta(Re),user:z.record(z.string(),io).optional().meta(Re)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di,...qe.Operational});var db=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),gb=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),Hu=z.object({kind:gb.meta(Re),id:z.string().min(1).meta(Re)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),hb=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),ro=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),name:nn.meta(Re),handle:nt.meta(Re),customer_facing_description:z.string().max(500).optional().meta(Re),type:hl.meta(Re),unit:z.string().max(100).optional().meta(Re),period_scope:Yg.optional().meta(Re),allocation:bl.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":Gg,"x-revturbine-schema-exposure":di,...mb,...Fn()}),XO=bn("EntitlementAnchor"),Es=W.merge(le).merge(ue).merge(Lt).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(Hu).min(1).meta(Re),segment_ids:z.array(z.string()).default([]).meta(Re),visibility:db.default("public").meta(Re),period_scope:Yg.optional().meta(Re),instance:z.string().max(100).optional().meta(Re),reset_period:hb.optional().meta(Re),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Re),enforcement:Wg.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:bl.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":Gg,"x-revturbine-schema-exposure":cb,...mb,...Pr()}),e1=bn("EntitlementRuleAnchor");Es.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 n1=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di}),r1=z.object({code:n1.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":Ei,"x-revturbine-schema-exposure":di}),Hg=Es.extend({warnings:z.array(r1).optional().meta(Re)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":di});var Ku=W.merge(le).merge(ue).merge(Lt).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":Gg,"x-revturbine-schema-exposure":cb,...ZO,...Pr()}),i1=Kn(ro),a1=Kn(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:K(XO)}}},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:H},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:K(e1)}}},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:H},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:K(ro)}}}},"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:ar(ro)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ro}}}},"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:ro}}}},"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:i1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ro}}}},"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:H},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:K(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:ar(Es)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Hg}}}},"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:a1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Hg}}}},"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:Hg}}}},"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:K(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:ar(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:Qe}=qe,{Persisted:Gu,Transient:Rs}=Ne,{External:Wi}=Me,_b=ft(Ge.Playbook,{sdkInput:true});ft(Ge.Playbook,{inConfig:false,sdkInput:false});var o1=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),l1=ft(Ge.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),c1=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Jg=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi}),Zg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi}),yb=z.object({count:z.number().int().positive().meta(Qe),period:Zg.meta(Qe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi});z.object({surface_type:z.string().min(1).meta(Qe),rules:z.array(yb).meta(Qe),cooldown_ms:z.number().int().nonnegative().optional().meta(Qe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Gu,"x-revturbine-schema-exposure":Wi,...qe.Operational,...o1});var vb=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":Rs,"x-revturbine-schema-exposure":Wi}),ao=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qe,readOnly:true}),name:nn.meta(Qe),handle:nt.meta(Qe),description:Ci.meta(Qe),category:Jg.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:Cs.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:c1.optional().meta(Qe),activation_window_start:z.string().datetime().optional().meta(Qe),activation_window_end:z.string().datetime().optional().meta(Qe),metadata:Kt.meta(Qe)}).meta({id:"Placement","x-revturbine-schema-persistence":Gu,"x-revturbine-schema-exposure":Wi,..._b,...Fn()}),u1=bn("PlacementAnchor"),bb=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi}),xb=z.object({code:bb.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":Rs,"x-revturbine-schema-exposure":Wi}),fb=ao.extend({warnings:z.array(xb).optional().meta(Qe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi});var Sb=z.object({label:z.string().min(1).max(200).meta(Qe),cta_path_type:vb.meta(Qe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Qe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Rs,"x-revturbine-schema-exposure":Wi}),xl=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Qe,readOnly:true}),handle:nt.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(Sb).default([]).meta(Qe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Qe),max_period_unit:Zg.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":Gu,"x-revturbine-schema-exposure":Wi,..._b,...Pr()}),p1=bn("PlacementPayloadAnchor"),Pb=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({surface_slot_handle:z.string().min(1).max(200).meta(Qe),surface_type:sm.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":Gu,"x-revturbine-schema-exposure":Wi,...l1,...Fn("surface_slot_handle")}),d1=Kn(ao),g1=Kn(xl);({"/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:K(u1)}}},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:H},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:K(ao)}}}},"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:ar(ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:fb}}}},"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:ao}}}},"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:d1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fb}}}},"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:ao}}}},"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:Jg,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:K(p1)}}},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:H},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:K(xl)}}}},"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:ar(xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xl}}}},"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:g1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xl}}}},"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:K(Pb)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:$r,Pii:Sl}=qe,{Persisted:Xg,Transient:eh}=Ne,{Internal:Pl}=Me,f1=ft(Ge.CustomerOperations,{sdkInput:false}),Tb=z.object({external_id:z.string().min(1).meta(Sl),traits:z.record(z.string(),z.unknown()).default({}).meta(Sl),plan_id:z.string().optional().meta($r)}).meta({id:"Identity","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Pl}),Yu=z.enum(["payment_failed","payment_method_missing"]),Qg=W.merge(le).merge(ue).extend({external_id:z.string().min(1).meta(Sl),identity:Tb.meta(Sl),stripe_customer_id:z.string().optional().meta($r),current_plan_id:z.string().optional().meta($r),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta($r),status:z.enum(["active","churned","trial","suspended"]).default("active").meta($r),billing_health_issues:z.array(Yu).default([]).meta($r),metadata:Kt.meta($r)}).meta({id:"Customer","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Pl}),Ib=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":Pl}),Cb=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":Pl}),Eb=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":Pl}),ts=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({handle:nt.meta({...$r,readOnly:true}),customer_id:z.string().min(1).meta(Sl),customer_id_list:z.array(z.string()).optional().meta(Sl),override_type:Cb.meta($r),target_id:z.string().min(1).meta($r),value:z.record(z.string(),z.unknown()).default({}).meta($r),duration_type:Ib.default("permanent").meta($r),duration_value:z.string().optional().meta($r),expiry_date:mn.meta($r),status:Eb.default("active").meta($r),reason:z.string().max(500).optional().meta($r),created_by:z.string().optional().meta($r)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Pl,...f1,...Pr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:H},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:K(Qg)}}}},"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:Qg}}}},"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:K(ts)}}}},"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:ts}}}},"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:ts.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ts}}}},"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:ts}}}},"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:ts}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:$e,Pii:um,Financial:th}=qe,{Persisted:Rb,Transient:ja}=Ne,{External:Tl,Internal:pm}=Me,dm=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":ja,"x-revturbine-schema-exposure":Tl}),nh=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":ja,"x-revturbine-schema-exposure":Tl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ja,"x-revturbine-schema-exposure":Tl});var rh=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":ja,"x-revturbine-schema-exposure":Tl}),kb=z.object({product_instance_id:z.string().min(1).meta($e),user_id:z.string().min(1).meta(um),plan:rh.optional().meta($e),usage:z.record(z.string(),nh).default({}).meta($e),trial:dm.optional().meta($e),entitlements:z.record(z.string(),z.union([z.boolean(),io])).default({}).meta($e)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Rb,"x-revturbine-schema-exposure":Tl}),so=W.merge(ue).merge(le).extend({user_id:z.string().min(1).meta(um),account_id:z.string().min(1).nullable().optional().meta(um),email:z.string().email().nullable().optional().meta(um),email_type:z.string().optional().meta($e),plan_handle:z.string().min(1).optional().meta($e),plan:rh.optional().meta($e),usage:z.record(z.string(),nh).default({}).meta($e),trial:dm.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(),io])).default({}).meta($e),instances:z.array(kb).optional().meta($e),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(um),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...$e,"x-revturbine-schema-persistence":ja}),derived_config_version:z.string().nullable().optional().meta($e),context_hash:z.string().nullable().optional().meta($e),derived_computed_at:mn.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":Rb,"x-revturbine-schema-exposure":Tl}),v1=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":ja,"x-revturbine-schema-exposure":pm}),b1=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...$e,...Xr}),failed_payment_reason:z.string().optional().meta({...th,...Bu}),issues:z.array(Yu).optional().meta({...th,...Bu}),provider_subscription_id:z.string().optional().meta({...th,...Vg})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ja,"x-revturbine-schema-exposure":pm}),x1=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":ja,"x-revturbine-schema-exposure":pm}),S1=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":ja,"x-revturbine-schema-exposure":pm});z.object({subject:z.string().min(1).meta({...$e,...Xr}),context_version:z.string().optional().meta({...$e,...Xr}),trial:v1.optional().meta({...$e,...Xr}),billing:b1.optional().meta({...$e,...Xr}),plan:S1.optional().meta({...$e,...Xr}),capabilities:x1.optional().meta({...$e,...Xr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ja,"x-revturbine-schema-exposure":pm});({"/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:K(so)}}}},"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:so}}}},"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:so.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:so}}}},"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:sr}=qe,{Persisted:ih,Transient:Ab}=Ne,{Internal:gm}=Me,I1=ft(Ge.Playbook,{sdkInput:true}),wb=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),jb=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Ab,"x-revturbine-schema-exposure":gm}),Ob=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Ab,"x-revturbine-schema-exposure":gm}),Wu=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),name:nn.meta(sr),handle:nt.optional().meta(sr),category:jb.default("custom").meta(sr),visibility_toggle:z.boolean().default(true).meta(sr),source_type:Ob.default("system").meta(sr),estimated_size:z.number().int().min(0).optional().meta(sr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":ih,"x-revturbine-schema-exposure":gm,...wb,...Fn()}),C1=bn("SegmentDimensionAnchor"),Ju=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),dimension_id:z.string().min(1).meta(sr),name:nn.meta(sr),handle:nt.meta(sr),description:Ci.meta(sr),definition_rule:z.record(z.string(),z.unknown()).optional().meta(sr),used_in_count:z.number().int().min(0).default(0).meta({...sr,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":ih,"x-revturbine-schema-exposure":gm,...wb,...Fn()}),E1=bn("SegmentValueAnchor");W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...sr,readOnly:true}),name:nn.meta(sr),handle:nt.meta(sr),description:Ci.meta(sr),rules:z.record(z.string(),z.unknown()).default({}).meta(sr),experiment_handle:z.string().min(1).optional().meta(sr),is_active:z.boolean().default(true).meta(sr),estimated_size:z.number().int().min(0).nullable().default(null).meta(sr),metadata:Kt.meta(sr)}).meta({id:"Segment","x-revturbine-schema-persistence":ih,"x-revturbine-schema-exposure":gm,...I1,...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:K(C1)}}},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:H},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:K(E1)}}},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:H},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:K(Wu)}}}},"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:Wu}}}},"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:Wu}}}},"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:K(Ju)}}}},"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:Ju}}}},"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:Ju}}}},"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:wt}=qe,{Persisted:Il,Transient:qb}=Ne,{External:ks}=Me,ah=ft(Ge.Playbook,{sdkInput:true}),A1=ft(Ge.Playbook,{inConfig:false,sdkInput:false}),w1=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),j1=ft(Ge.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant});W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),handle:nt.meta({...wt,readOnly:true}),name:nn.meta(wt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(wt),subject:z.string().max(500).optional().meta(wt),body:z.string().meta(wt),template_variables:z.array(z.string()).default([]).meta(wt),metadata:Kt.meta(wt)}).meta({id:"Message","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":ks,...A1,...Pr()});var Zu=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:nn.meta(wt),handle:nt.meta(wt),action_type:_l.meta(wt),target_url:z.string().optional().meta(wt),target_plan_id:z.string().optional().meta(wt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(wt),metadata:Kt.meta(wt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":ks,...ah,...Fn()}),q1=bn("CtaPathAnchor"),Db=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":ks,...j1}),Mb=z.object({name:z.string().min(1),field_type:Db,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":ks,...w1}),Qu=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:nn.meta(wt),handle:nt.meta(wt),surface_type:z.union([zu,zg]).meta(wt),field_definitions:z.array(Mb).default([]).meta(wt),description:Ci.meta(wt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":ks,...ah,...Fn()}),D1=bn("SurfaceTemplateAnchor"),Xu=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...wt,readOnly:true}),name:nn.meta(wt),handle:nt.meta(wt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(wt),variation_dimension_id:z.string().optional().meta(wt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(wt),notes:z.string().max(1e3).optional().meta(wt),used_in_count:z.number().int().min(0).default(0).meta({...wt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Il,"x-revturbine-schema-exposure":ks,...ah,...Fn()}),M1=bn("MessageBlockRecordAnchor"),Ub=z.object({segment_id:z.string().min(1).meta(wt),message_block_id:z.string().min(1).meta(wt),ui_path_id:z.string().optional().meta(wt),promotion_id:z.string().optional().meta(wt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":qb,"x-revturbine-schema-exposure":ks});z.object({payload_id:z.string().min(1).meta(wt),tenant_id:z.string().min(1).meta(wt),name:nn.meta(wt),surface_template_id:z.string().min(1).meta(wt),default_message_block_id:z.string().min(1).meta(wt),segment_content_map:z.array(Ub).optional().meta(wt),ui_path_id:z.string().optional().meta(wt),promotion_id:z.string().optional().meta(wt),status:z.enum(["draft","active","inactive"]).meta(wt),created_at:z.string().datetime().optional().meta({...wt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...wt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":qb,"x-revturbine-schema-exposure":ks});({"/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:K(D1)}}},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:H},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:K(Qu)}}}},"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:K(M1)}}},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:H},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:K(Xu)}}}},"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:K(q1)}}},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:H},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:K(Zu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Cl,Pii:L1}=qe,{Persisted:Fb}=Ne,{Internal:N1,External:V1}=Me,B1=ft(Ge.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Cl,readOnly:true}),name:z.string().min(1).max(120).meta(Cl),mode:z.enum(["light","dark","system"]).default("system").meta(Cl),tokens:z.record(z.string(),z.string()).default({}).meta(Cl)}).meta({id:"Theme","x-revturbine-schema-persistence":Fb,"x-revturbine-schema-exposure":V1,...B1});var sh=W.merge(le).extend({user_id:z.string().min(1).meta(L1),scope:z.string().min(1).meta(Cl),preferences:z.record(z.string(),z.unknown()).default({}).meta(Cl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Fb,"x-revturbine-schema-exposure":N1});({"/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:K(sh)}}}},"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(Kn(sh))}}},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:qt,Financial:Oa}=qe,{Persisted:Lb,Transient:hm}=Ne,{External:fm,Internal:Nb}=Me,Vb=z.object({month:z.string().meta(qt),cohort_size:z.number().int().min(0).meta(qt),retained:z.number().int().min(0).meta(qt),retention_rate:z.number().min(0).max(1).meta(qt),revenue_cents:z.number().int().min(0).meta(Oa)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":hm,"x-revturbine-schema-exposure":fm}),Bb=z.object({step:z.string().meta(qt),label:z.string().meta(qt),count:z.number().int().min(0).meta(qt),conversion_rate:z.number().min(0).max(1).meta(qt),drop_off_rate:z.number().min(0).max(1).meta(qt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":hm,"x-revturbine-schema-exposure":fm}),zb=z.object({placement_id:z.string().meta(qt),placement_name:z.string().meta(qt),impressions:z.number().int().min(0).meta(qt),clicks:z.number().int().min(0).meta(qt),conversions:z.number().int().min(0).meta(qt),ctr:z.number().min(0).meta(qt),conversion_rate:z.number().min(0).meta(qt),revenue_cents:z.number().int().min(0).meta(Oa)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":hm,"x-revturbine-schema-exposure":fm}),$b=z.object({date:z.string().meta(qt),mrr_cents:z.number().int().min(0).meta(Oa),arr_cents:z.number().int().min(0).meta(Oa),new_mrr_cents:z.number().int().min(0).meta(Oa),churned_mrr_cents:z.number().int().min(0).meta(Oa),expansion_mrr_cents:z.number().int().min(0).meta(Oa),net_new_mrr_cents:z.number().int().meta(Oa)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":hm,"x-revturbine-schema-exposure":fm}),Kb=z.object({metric_key:z.string().min(1).meta(qt),label:z.string().meta(qt),current_value:z.number().meta(Oa),previous_value:z.number().nullable().default(null).meta(Oa),change_percent:z.number().nullable().default(null).meta(qt),period:z.string().meta(qt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(qt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":hm,"x-revturbine-schema-exposure":fm}),oh=W.merge(le).merge(ue).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(qt),severity:fl.meta(qt),resource_type:z.string().min(1).meta(qt),resource_id:z.string().min(1).meta(qt),summary:z.string().max(1e3).meta(qt),expected_value:z.unknown().optional().meta(qt),actual_value:z.unknown().optional().meta(qt),affected_customer_count:z.number().int().min(0).default(0).meta(qt),is_resolved:z.boolean().default(false).meta(qt),resolved_at:mn.meta(qt),metadata:Kt.meta(qt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Lb,"x-revturbine-schema-exposure":Nb}),lh=W.merge(le).merge(ue).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(qt),severity:fl.meta(qt),title:z.string().min(1).max(300).meta(qt),description:z.string().max(2e3).meta(qt),resource_type:z.string().optional().meta(qt),resource_id:z.string().optional().meta(qt),is_acknowledged:z.boolean().default(false).meta(qt),acknowledged_at:mn.meta(qt),acknowledged_by:z.string().nullable().default(null).meta(qt),metadata:Kt.meta(qt)}).meta({id:"Alert","x-revturbine-schema-persistence":Lb,"x-revturbine-schema-exposure":Nb});({"/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:K(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:K(zb)}}}},"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:K($b)}}}},"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:K(Vb)}}}},"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:K(Bb)}}}},"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:K(oh)}}}},"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:oh}}}},"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:K(lh)}}}},"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:lh}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:S}=qe,{Transient:H1}=Ne,{Internal:G1}=Me,Xe=t=>({id:t,"x-revturbine-schema-persistence":H1,"x-revturbine-schema-exposure":G1}),Hb=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,ep=/^[a-z][a-z0-9_-]{0,99}$/,rn=z.string().regex(Hb).max(120),qi=z.string().regex(ep),Tr=rn.meta(Xe("AnalyticsSemanticId")),ti=z.enum(["account","user","billing_unit","organization"]).meta(Xe("AnalyticsAnalyticalUnit")),El=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Xe("AnalyticsQueryFamily")),la=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Xe("AnalyticsSourceScope")),uh=z.enum(["as_of_event","current"]).meta(Xe("AnalyticsHistoricalMode")),Gb=z.enum(["hour","day","week","month","quarter"]).meta(Xe("AnalyticsTimeGrain")),tp=z.enum(["none","previous_period","previous_year"]).meta(Xe("AnalyticsCompareMode")),_m=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Xe("AnalyticsFilterOperator")),np=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Xe("AnalyticsFilterControl")),Yb=z.enum(["low","medium","high"]).meta(Xe("AnalyticsCardinalityClass")),ym=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Xe("AnalyticsFieldType")),Wb=z.enum(["increase","decrease","neutral"]).meta(Xe("AnalyticsMetricDirection")),Jb=z.enum(["binary","count","continuous","ratio","revenue"]).meta(Xe("AnalyticsMetricStatisticalType")),Zb=z.enum(["additive","semi_additive","non_additive"]).meta(Xe("AnalyticsMetricAggregationSemantics")),Qb=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Xe("AnalyticsDimensionType")),rp=z.enum(["filter","group","split","sort"]).meta(Xe("AnalyticsDimensionCapability")),ip=z.enum(["private","team","tenant"]).meta(Xe("AnalyticsViewVisibility")),ch=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")),Xb=z.enum(["unrestricted","pii","financial","operational"]).meta(Xe("AnalyticsClassification")),hi=z.strictObject({value:z.string().min(1).max(300).meta(S),key:z.string().max(120).optional().meta(S)}).meta(Xe("LocalizedText")),mh=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),Rl=z.union([mh,z.array(mh).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(S),compare:tp.optional().meta(S)}),z.strictObject({min:z.number().optional().meta(S),max:z.number().optional().meta(S)})]).meta(Xe("AnalyticsFilterValue")),ap=z.strictObject({dimension:rn.meta(S),operator:_m.meta(S),value:Rl.optional().meta(S)}).meta(Xe("AnalyticsSemanticFilter")),oo=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(Xe("AnalyticsFormatSpec")),ex=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:hi.optional().meta(S)})).max(5).optional().meta(S),x_axis_format:oo.optional().meta(S),y_axis_format:oo.optional().meta(S),empty_state:z.enum(["blank","message"]).optional().meta(S)}).meta(Xe("AnalyticsSafeChartOptions")),sp=z.object({deprecated:z.boolean().meta(S),replaced_by:rn.optional().meta(S)}).meta(Xe("AnalyticsCatalogDeprecation")),ph=sp,dh=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:Qb.meta(S),operators:z.array(_m).min(1).meta(S),control:np.meta(S),capabilities:z.array(rp).min(1).meta(S),cardinality:Yb.meta(S),classification:Xb.default("unrestricted").meta(S),historical_mode:uh.optional().meta(S),allowed_concepts:z.array(rn).optional().meta(S),exclude_from_segment_picker:z.boolean().default(false).meta(S),deprecation:sp.optional().meta(S)}).meta(Xe("AnalyticsCatalogDimension")),gh=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:ym.meta(S),format:oo.optional().meta(S),source_scope:la.optional().meta(S),direction:Wb.optional().meta(S),statistical_type:Jb.optional().meta(S),aggregation_semantics:Zb.optional().meta(S),preferred_analysis_unit:ti.optional().meta(S),deprecation:sp.optional().meta(S)}).meta(Xe("AnalyticsCatalogMetric")),hh=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(ti).min(1).meta(S),primary_time_dimension:rn.meta(S),historical_mode:uh.meta(S),dimensions:z.array(rn).min(1).meta(S),metrics:z.array(rn).min(1).meta(S),query_families:z.array(El).min(1).meta(S),source_scope:la.meta(S),coverage_metric:rn.optional().meta(S),deprecation:sp.optional().meta(S)}).meta(Xe("AnalyticsCatalogConcept")),tx=z.strictObject({field:rn.meta(S),direction:z.enum(["asc","desc"]).meta(S)}),nx=z.strictObject({dimension:rn.meta(S),grain:Gb.meta(S)}),rx=8,ix=z.strictObject({concept:rn.meta(S),family:El.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(rx).optional().meta(S),time:nx.optional().meta(S),filters_from:z.array(qi).max(20).optional().meta(S),fixed_filters:z.array(ap).max(20).optional().meta(S),compare:tp.optional().meta(S),order_by:z.array(tx).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S)}).meta(Xe("AnalyticsViewQuery")),ax=z.strictObject({type:z.literal("metric").meta(S),value:rn.meta(S),comparison:rn.optional().meta(S),format:oo.optional().meta(S)}).meta(Xe("AnalyticsRenderMetric")),sx=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:ex.optional().meta(S)}).meta(Xe("AnalyticsRenderCartesian")),ox=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(Xe("AnalyticsRenderFunnel")),lx=z.strictObject({type:z.literal("table").meta(S),columns:z.array(rn).min(1).max(20).meta(S)}).meta(Xe("AnalyticsRenderTable")),cx=z.strictObject({type:z.literal("timeline").meta(S),timestamp:rn.meta(S),event_type:rn.meta(S)}).meta(Xe("AnalyticsRenderTimeline")),mx=z.strictObject({type:z.literal("recommendations").meta(S),presentation:z.enum(["list","ranked_cards"]).meta(S)}).meta(Xe("AnalyticsRenderRecommendations")),fh=z.discriminatedUnion("type",[ax,sx,ox,lx,cx,mx]).meta(Xe("AnalyticsRenderSpec")),ux=z.strictObject({id:qi.meta(S),dimension:rn.meta(S),control:np.meta(S),label:hi.optional().meta(S),operators:z.array(_m).min(1).meta(S),default_value:Rl.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(qi).min(1).max(24)]).default("all").meta(S)}).meta(Xe("AnalyticsViewFilter")),_h=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:qi.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(Xe("AnalyticsViewLayout")),px=z.strictObject({id:qi.meta(S),title:hi.optional().meta(S),description:hi.optional().meta(S),query:ix.meta(S),render:fh.meta(S)}).meta(Xe("AnalyticsViewBlock")),dx=z.strictObject({id:qi.meta(S),label:hi.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(Xe("AnalyticsViewHandoff")),gx=z.strictObject({allow:z.array(ch).default([]).meta(S),deny:z.array(ch).default([]).meta(S)}).meta(Xe("AnalyticsCustomizationPolicy"));var hx=z.string().regex(/^\d+\.\d+$/),kl=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(S),schema_version:hx.meta(S),id:qi.meta(S),revision:z.number().int().min(1).meta(S),title:hi.meta(S),description:hi.optional().meta(S),analytical_unit:ti.meta(S),base_template:z.strictObject({id:qi.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(ux).max(20).meta(S),layout:_h.meta(S),blocks:z.array(px).min(1).max(24).meta(S),handoffs:z.array(dx).max(10).optional().meta(S),customization_policy:gx.meta(S)}).meta(Xe("AnalyticsView")),fx=z.strictObject({id:qi.optional().meta(S),dimension:rn.meta(S),control:np.optional().meta(S),label:hi.optional().meta(S),operators:z.array(_m).min(1).optional().meta(S),default_value:Rl.optional().meta(S),required:z.boolean().optional().meta(S),pinned:z.boolean().optional().meta(S),applies_to:z.union([z.literal("all"),z.array(qi).min(1).max(24)]).optional().meta(S)}).meta(Xe("AnalyticsViewFilterDraft")),_x=z.strictObject({id:qi.optional().meta(S),title:hi.optional().meta(S),concept:rn.meta(S),family:El.meta(S),metrics:z.array(rn).min(1).max(10).meta(S),group_by:z.array(rn).max(rx).optional().meta(S),time:nx.optional().meta(S),filters_from:z.array(qi).max(20).optional().meta(S),fixed_filters:z.array(ap).max(20).optional().meta(S),compare:tp.optional().meta(S),order_by:z.array(tx).max(3).optional().meta(S),limit:z.number().int().min(1).max(1e3).optional().meta(S),render:z.union([z.literal("auto"),fh]).optional().meta(S)}).meta(Xe("AnalyticsViewBlockDraft")),yx=z.strictObject({id:qi.optional().meta(S),label:hi.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(Xe("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(S),schema_version:hx.meta(S),title:hi.meta(S),analytical_unit:ti.optional().meta(S),filters:z.union([z.literal("recommended"),z.array(fx).max(20)]).optional().meta(S),layout:z.union([z.literal("auto"),_h]).optional().meta(S),blocks:z.array(_x).min(1).max(24).meta(S),handoffs:z.union([z.literal("recommended"),z.array(yx).max(10)]).optional().meta(S),visibility:ip.optional().meta(S)}).meta(Xe("AnalyticsViewDraft"));var yh=z.string().regex(/^(\/[^/]*)*$/).max(300),vx=z.strictObject({op:z.enum(["add","replace","remove"]).meta(S),path:yh.meta(S),value:z.unknown().optional().meta(S)}).meta(Xe("AnalyticsSuggestedPatchOp")),vh=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(Xe("AnalyticsWarning")),bx=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(S),path:yh.meta(S),message:z.string().min(1).max(500).meta(S),actual:z.unknown().optional().meta(S),allowed:z.array(mh).max(50).optional().meta(S),suggested_patch:z.array(vx).max(10).optional().meta(S)}).meta(Xe("AnalyticsValidationIssue"));z.object({path:yh.meta(S),rule:z.string().min(1).max(120).meta(S),value:z.unknown().optional().meta(S)}).meta(Xe("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(S),errors:z.array(bx).default([]).meta(S),warnings:z.array(vh).default([]).meta(S),catalog_version:z.string().min(1).max(64).meta(S)}).meta(Xe("AnalyticsValidationResult"));var xx=z.object({id:rn.meta(S),type:ym.meta(S),nullable:z.boolean().meta(S)}).meta(Xe("AnalyticsResultField")),Sx=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(Xe("AnalyticsCoverage")),Px=z.object({query_hash:z.string().min(1).max(128).meta(S),concept:rn.meta(S),analytical_unit:ti.meta(S),source_scope:la.meta(S),coverage:Sx.optional().meta(S),as_of:z.string().datetime().meta(S),freshness_seconds:z.number().int().min(0).meta(S),applied_filters:z.array(ap).default([]).meta(S),next_cursor:z.string().max(500).optional().meta(S),warnings:z.array(vh).default([]).meta(S)}).meta(Xe("AnalyticsResultMeta")),bh=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(S),fields:z.array(xx).meta(S),meta:Px.meta(S)}).meta(Xe("AnalyticsResult"));var{Unrestricted:gr}=qe,{Persisted:Z1,Transient:Q1}=Ne,{Internal:Tx}=Me,X1=ft(Ge.CustomerOperations,{inConfig:false,sdkInput:false,source:jr.Customer}),xh=t=>({id:t,"x-revturbine-schema-persistence":Z1,"x-revturbine-schema-exposure":Tx,...X1}),eq=t=>({id:t,"x-revturbine-schema-persistence":Q1,"x-revturbine-schema-exposure":Tx}),Sh=z.object({environment_id:z.string().min(1).meta({...gr,readOnly:true})}),Ix=z.enum(["viewer","editor"]).meta(eq("AnalyticsViewAccessRole")),Ph=W.merge(ue).merge(Sh).merge(le).extend({owner_user_id:z.string().min(1).meta(gr),name:z.string().min(1).max(300).meta(gr),visibility:ip.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(xh("AnalyticsSavedView")),Th=W.merge(ue).merge(Sh).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:kl.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(xh("AnalyticsViewRevision")),Ih=W.merge(ue).merge(Sh).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:Ix.meta(gr)}).meta(xh("AnalyticsViewAccess"));var {Unrestricted:kn}=qe,{Transient:tq}=Ne,{Internal:nq}=Me,lo=t=>({id:t,"x-revturbine-schema-persistence":tq,"x-revturbine-schema-exposure":nq}),Cx=z.enum(["fixture","generated"]).meta(lo("AnalyticsCatalogSource")),Ex=z.enum(["event_taxonomy","openapi_identity","tinybird_project"]).meta(lo("AnalyticsCatalogProvenanceKind")),Rx=z.object({kind:Ex.meta(kn),location:z.string().min(1).max(240).meta(kn),version:z.string().min(1).max(64).optional().meta(kn),entry_count:z.number().int().nonnegative().meta(kn)}).meta(lo("AnalyticsCatalogProvenance"));z.object({catalog_version:z.string().min(1).max(64).meta(kn),source:Cx.meta(kn),generated_at:z.string().datetime().optional().meta(kn),provenance:z.array(Rx).optional().meta(kn),concepts:z.array(hh).min(1).meta(kn),dimensions:z.array(dh).min(1).meta(kn),metrics:z.array(gh).min(1).meta(kn)}).meta(lo("AnalyticsCatalog"));var kx=z.enum(["concept","dimension","metric","query_family"]).meta(lo("AnalyticsAgentCatalogEntryKind")),Ax=z.object({id:Tr.meta(kn),kind:kx.meta(kn),label:z.string().min(1).max(120).meta(kn),description:z.string().min(1).max(500).meta(kn),when_to_use:z.string().max(500).optional().meta(kn),do_not_use_for:z.string().max(500).optional().meta(kn),value_type:ym.optional().meta(kn),format:oo.optional().meta(kn),capabilities:z.array(rp).optional().meta(kn),compatible_concepts:z.array(Tr).optional().meta(kn),compatible_families:z.array(El).optional().meta(kn),analytical_units:z.array(ti).optional().meta(kn),source_scope:la.optional().meta(kn),example:z.string().max(2e3).optional().meta(kn),deprecation:ph.optional().meta(kn)}).meta(lo("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(kn),query:z.string().min(1).max(200).meta(kn),entries:z.array(Ax).max(50).meta(kn)}).meta(lo("AnalyticsCatalogSearchResult"));var {Unrestricted:hr}=qe,{Transient:oq}=Ne,{Internal:lq}=Me,Al=t=>({id:t,"x-revturbine-schema-persistence":oq,"x-revturbine-schema-exposure":lq}),co=z.string().regex(ep),jx=z.strictObject({filter_id:co.meta(hr),value:Rl.nullable().meta(hr)}).meta(Al("AnalyticsFilterState"));z.strictObject({view_id:co.meta(hr),revision:z.number().int().min(1).optional().meta(hr),block_ids:z.array(co).min(1).max(24).optional().meta(hr),filter_state:z.array(jx).max(20).optional().meta(hr)}).meta(Al("AnalyticsQueryRequest"));var qx=z.object({block_id:co.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(Al("AnalyticsBlockError")),Dx=z.object({block_id:co.meta(hr),result:bh.meta(hr)}).meta(Al("AnalyticsBlockResult"));z.object({view_id:co.meta(hr),revision:z.number().int().min(1).meta(hr),catalog_version:z.string().min(1).max(64).meta(hr),results:z.array(Dx).meta(hr),errors:z.array(qx).default([]).meta(hr)}).meta(Al("AnalyticsQueryResponse"));var Ux=z.object({id:co.meta(hr),version:z.number().int().min(1).meta(hr),title:hi.meta(hr),description:hi.optional().meta(hr),block_count:z.number().int().min(1).meta(hr)}).meta(Al("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:K(Ph)}}}},"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:K(Th)}}}},"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:K(Ih)}}}},"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:K(Ux)}}}},"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:kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var{Unrestricted:ns}=qe,{Transient:uq}=Ne,{Internal:pq}=Me,lp=t=>({id:t,"x-revturbine-schema-persistence":uq,"x-revturbine-schema-exposure":pq}),Fx=z.enum(["analytics_execution","experiment_assignment","experiment_evidence","experiment_analysis","growth_signal","growth_benchmark","optimization"]).meta(lp("ProviderCapability")),vm=z.enum(["available","stale","unavailable","unsupported","partial"]).meta(lp("ProviderAvailability")),As=z.object({provider_handle:nt.meta(ns),provider_type:z.string().min(1).max(100).meta(ns),provider_version:z.string().min(1).max(100).meta(ns),contract_version:z.number().int().min(1).meta(ns),generated_at:z.string().datetime().meta(ns),data_watermark:z.string().datetime().optional().meta(ns),source_revision:z.string().min(1).max(200).optional().meta(ns)}).meta(lp("ProviderProvenance")),bm=z.object({provider_handle:nt.meta(ns),capability:Fx.meta(ns)}).meta(lp("ProviderBindingRef"));var {Unrestricted:Ve}=qe,{Transient:dq}=Ne,{Internal:gq}=Me,rs=t=>({id:t,"x-revturbine-schema-persistence":dq,"x-revturbine-schema-exposure":gq}),Lx=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(rs("GrowthSignalPoint")),Nx=z.object({metric:Tr.meta(Ve),analytical_unit:ti.meta(Ve),source_scope:la.meta(Ve),dimensions:z.record(Tr,z.string()).meta(Ve),points:z.array(Lx).meta(Ve),provenance:As.meta(Ve)}).meta(rs("GrowthSignalSeries"));z.object({availability:vm.meta(Ve),series:z.array(Nx).meta(Ve),provenance:As.meta(Ve)}).meta(rs("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(rs("TrendFeatures"));var Vx=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(rs("EvidenceRequirement")),Bx=z.enum(["increase","decrease","level_shift","threshold","peer_gap","correlation"]).meta(rs("OpportunityInterpretation")),cp=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:la.meta(Ve),interpretation:Bx.meta(Ve)}).meta(rs("OpportunityEvidence"));z.object({required_metrics:z.array(Tr).min(1).meta(Ve),evidence:Vx.meta(Ve)}).meta(rs("DetectorRequirements"));var Eh=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(cp).min(1).meta(Ve),hypothesis:z.string().min(1).meta(Ve),confidence:z.number().min(0).max(1).meta(Ve),impact:Eh.optional().meta(Ve),suggested_action:Eh.optional().meta(Ve),suggested_experiment:Eh.optional().meta(Ve)}).meta(rs("OpportunityCandidate"));var {Unrestricted:Da}=qe,{Transient:xm}=Ne,{External:Sm}=Me,Rh=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":xm,"x-revturbine-schema-exposure":Sm}),$x=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":xm,"x-revturbine-schema-exposure":Sm}),Kx=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(Da),surface:Rh.meta(Da),purpose:z.string().min(1).max(300).meta(Da),stability:$x.meta(Da)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":xm,"x-revturbine-schema-exposure":Sm}),Hx=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(Da),surface:Rh.meta(Da),purpose:z.string().min(1).max(300).meta(Da)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":xm,"x-revturbine-schema-exposure":Sm});z.object({version:z.number().int().min(1).meta(Da),events:z.array(Kx).min(1).meta(Da),prefix_families:z.array(Hx).meta(Da)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":xm,"x-revturbine-schema-exposure":Sm});var up=["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"],Gx=["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"],Yx=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],Wx=["area_viewed","feature_gated"],zx={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 mp(t,e){return t.map(n=>({name:n,surface:e,purpose:zx[n].purpose,stability:zx[n].stability}))}var kh={events:[...mp(up,"control_plane"),...mp(Wx,"control_plane"),...mp(Gx,"sdk_client"),...mp(Yx,"sdk_client")]};kh.events.map(t=>t.name);kh.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:N,Pii:wl}=qe,{Persisted:Zx,Transient:Hn}=Ne,{Internal:ws,External:Or}=Me,wh=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or}),Qx=W.extend({event_type:z.string().min(1).meta(N),source:wh.default("sdk").meta(N),tenant_id:z.string().min(1).optional().meta(N),user_id:z.string().min(1).optional().meta(wl),session_id:z.string().min(1).optional().meta(wl),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":Hn,"x-revturbine-schema-exposure":ws}),Xx=Qx.extend({ingested_at:z.string().datetime().meta(N)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":Zx,"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(wl),session_id:z.string().min(1).optional().meta(wl),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":Hn,"x-revturbine-schema-exposure":ws});var eS=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or});z.object({user_id:z.string().min(1).meta(wl),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:eS.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":Hn,"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":Hn,"x-revturbine-schema-exposure":Or});z.object({days_remaining:z.number().int().min(0).optional().meta(N)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Hn,"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":Hn,"x-revturbine-schema-exposure":Or});z.object({feature:z.string().min(1).meta(N)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Hn,"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":Hn,"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":Hn,"x-revturbine-schema-exposure":Or});var nS=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or}),rS=z.enum(up).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or});z.object({event_type:rS.meta(N),source:nS.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or});z.object({q:z.string().optional().meta(N),source:wh.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":Hn,"x-revturbine-schema-exposure":ws});var iS=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":ws}),aS=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":ws}),pp=W.merge(le).merge(ue).extend({event_id:z.string().min(1).meta(N),event_type:z.string().min(1).meta(N),source:iS.meta(N),payload:z.record(z.string(),z.unknown()).default({}).meta(N),status:aS.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":Zx,"x-revturbine-schema-exposure":ws});z.object({accepted:z.number().int().min(0).meta(N)}).meta({id:"null","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":ws});var wq=500,jq=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or}),sS=z.object({environment_id:z.string().min(1).meta(N),user_id:z.string().min(1).meta(wl),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:jq.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":Hn,"x-revturbine-schema-exposure":Or});z.object({events:z.array(sS).min(1).max(wq).meta(N)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or});var Oq=10,lS=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":Or}),cS=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":Hn,"x-revturbine-schema-exposure":Or}),mS=z.object({event_type:lS.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:cS.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":Hn,"x-revturbine-schema-exposure":Or});z.object({events:z.array(mS).min(1).max(Oq).meta(N)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Hn,"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:Bg(Xx)}}},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:H},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:K(pp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:_t}=qe,{Persisted:Tm,Transient:Im}=Ne,{Internal:Ma}=Me,pS=ft(Ge.Playbook,{sdkInput:true}),dS=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),gS=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Im,"x-revturbine-schema-exposure":Ma}),jh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Im,"x-revturbine-schema-exposure":Ma}),Oh=z.object({name:nn.meta(_t),handle:nt.meta(_t),plan_id:z.string().nullable().optional().meta(_t),segment_id:z.string().nullable().optional().meta(_t),trial_limit_type:jh.default("time").meta(_t),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(_t),grace_period_days:z.number().int().min(0).default(0).meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),require_payment_method:z.boolean().default(false).meta(_t),auto_convert:z.boolean().default(true).meta(_t),convert_to_plan_id:z.string().optional().meta(_t),fallback_plan_id:z.string().optional().meta(_t),limit_per_customer:z.number().int().min(1).default(1).meta(_t),is_active:z.boolean().default(true).meta(_t),metadata:Kt.meta(_t)}),mo=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({..._t,readOnly:true})}).merge(Oh).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ma,...pS,...Fn()}),Dq=bn("FreeTrialRuleAnchor"),hS=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Im,"x-revturbine-schema-exposure":Ma}),qh=z.object({name:nn.meta(_t),handle:nt.meta(_t),premium_plan_id:z.string().min(1).meta(_t),fallback_plan_id:z.string().min(1).meta(_t),segment_id:z.string().nullable().optional().meta(_t),trial_limit_type:jh.default("time").meta(_t),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),start_policy:hS.default("signup").meta(_t),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(_t),entitlements_during_trial:z.array(z.string()).default([]).meta(_t),is_active:z.boolean().default(true).meta(_t),metadata:Kt.meta(_t)}),uo=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({..._t,readOnly:true})}).merge(qh).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ma,...pS,...Fn()}),Mq=bn("ReverseTrialRuleAnchor"),Dh=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Im,"x-revturbine-schema-exposure":Ma}),Mh=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Im,"x-revturbine-schema-exposure":Ma}),po=W.merge(le).merge(ue).extend({trial_limit_policy:Dh.default("1_per_lifetime").meta(_t),eligibility_scope:Mh.default("per_customer").meta(_t)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ma,...dS}),go=W.merge(le).merge(ue).extend({trial_limit_policy:Dh.default("1_per_lifetime").meta(_t),eligibility_scope:Mh.default("per_customer").meta(_t)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ma,...dS}),Pm=W.merge(le).merge(ue).extend({customer_id:z.string().min(1).meta(_t),rule_id:z.string().min(1).meta(_t),rule_type:z.enum(["free_trial","reverse_trial"]).meta(_t),plan_id:z.string().min(1).meta(_t),status:gS.default("active").meta(_t),started_at:z.string().datetime().meta({..._t,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(_t),trial_limit_type:jh.default("time").meta(_t),usage_entitlement_handle:z.string().min(1).optional().meta(_t),usage_limit_value:z.number().int().min(1).optional().meta(_t),converted_at:mn.meta(_t),cancelled_at:mn.meta(_t),metadata:Kt.meta(_t)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Tm,"x-revturbine-schema-exposure":Ma});({"/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:K(Dq)}}},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:H},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:K(mo)}}}},"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:mo}}}},"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:mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mo}}}},"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:K(Mq)}}},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:H},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:K(uo)}}}},"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:uo}}}},"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:uo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uo}}}},"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:K(po)}}}},"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:po}}}},"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: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: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:K(go)}}}},"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:go}}}},"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:go.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:go}}}},"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:K(Pm)}}}},"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:Pm}}}},"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:Pm}}}},"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:Pm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var{Unrestricted:R,Financial:fS}=qe,{Persisted:js,Transient:Fh}=Ne,{Internal:ca}=Me,dp=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),_S=ft(Ge.CustomerOperations,{sdkInput:false}),yS=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":ca}),vS=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":ca}),Fq=z.enum(["managed","observed"]).meta({id:"ExperimentAllocationMode","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca}),bS=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":ca,...dp}),xS=z.object({variant_id:z.string().min(1),name:nn,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),targets:z.array(bS).min(1).optional(),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca,...dp}),Lq=z.object({method:z.literal("always_valid"),look_count:z.number().int().positive(),alpha:z.number().positive().lt(1).default(.05)}).strict(),Nq=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")}),Lh=z.object({methodology:z.enum(["frequentist","bayesian"]),analysis_unit:ti,sequential:Lq.optional(),multiple_comparisons:Bq.optional(),variance_reduction:Vq.optional(),practical_significance:Nq.optional()}).meta({id:"ExperimentAnalysisConfig","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca,...dp});var Cr=t=>({id:t,"x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":ca}),gp=z.object({variant_id:z.string().min(1).meta(R)}),zq=z.object({n:z.number().int().positive().meta(R),sum_numerator:z.number().meta(R),sum_denominator:z.number().positive().meta(R),sum_covariate:z.number().optional().meta(R)}).meta(Cr("ExperimentClusterAggregate")),$q=z.object({assignment_unit:ti.meta(R),clusters:z.array(zq).min(2).meta(R)}).meta(Cr("ExperimentClusteredSufficientStatistics")),hp={clustered:$q.optional().meta(R)},Kq=gp.extend({statistic_type:z.literal("mean").meta(R),n:z.number().int().min(0).meta(R),sum_y:z.number().meta(R),sum_y2:z.number().min(0).meta(R),...hp}).meta(Cr("MeanVariantStatisticalSummary")),Hq=gp.extend({statistic_type:z.literal("binary").meta(R),n:z.number().int().min(0).meta(R),successes:z.number().int().min(0).meta(R),...hp}).meta(Cr("BinaryVariantStatisticalSummary")),Gq=gp.extend({statistic_type:z.literal("ratio").meta(R),n:z.number().int().min(0).meta(R),sum_numerator:z.number().meta(R),sum_denominator:z.number().meta(R),sum_numerator2:z.number().min(0).meta(R),sum_denominator2:z.number().min(0).meta(R),sum_cross:z.number().meta(R),...hp}).meta(Cr("RatioVariantStatisticalSummary")),Yq=gp.extend({statistic_type:z.literal("covariance").meta(R),n:z.number().int().min(0).meta(R),sum_x:z.number().meta(R),sum_y:z.number().meta(R),sum_x2:z.number().min(0).meta(R),sum_y2:z.number().min(0).meta(R),sum_xy:z.number().meta(R),...hp}).meta(Cr("CovarianceVariantStatisticalSummary")),SS=z.discriminatedUnion("statistic_type",[Kq,Hq,Gq,Yq]).meta(Cr("VariantStatisticalSummary")),PS=z.object({start:z.string().datetime().meta(R),end:z.string().datetime().meta(R)}).meta(Cr("ExperimentObservationWindow")),Wq=z.object({metric:Tr.meta(R),observation_window:PS.meta(R)}).meta(Cr("ExperimentCovariateProvenance")),TS=z.object({schema_version:z.number().int().min(1).meta(R),experiment_handle:nt.meta(R),experiment_version:z.number().int().min(1).meta(R),metric:Tr.meta(R),analysis_unit:ti.meta(R),variants:z.array(SS).min(1).meta(R),observation_window:PS.meta(R),covariate:Wq.optional().meta(R),data_watermark:z.string().datetime().meta(R),source_scope:la.meta(R),provider:As.meta(R)}).meta(Cr("ExperimentEvidence")),Jq=z.object({status:z.enum(["not_evaluated","pass","fail"]).meta(R),p_value:z.number().min(0).max(1).optional().meta(R),chi_squared:z.number().min(0).optional().meta(R),variants:z.array(z.object({variant_id:z.string().min(1).meta(R),observed_count:z.number().int().min(0).meta(R),expected_count:z.number().min(0).meta(R)})).default([]).meta(R),reason:z.string().min(1).max(500).optional().meta(R)}).meta(Cr("ExperimentSampleRatioMismatch")),IS=z.object({status:z.enum(["healthy","warning","unhealthy","insufficient_data"]).meta(R),sample_ratio_mismatch:Jq.optional().meta(R),issues:z.array(z.object({code:z.string().min(1).max(100).meta(R),message:z.string().min(1).max(500).meta(R)})).default([]).meta(R)}).meta(Cr("ExperimentHealth")),Zq=z.object({lower:z.number().meta(R),upper:z.number().meta(R),level:z.number().min(0).max(1).meta(R)}).meta(Cr("ExperimentConfidenceInterval")),Qq=z.object({method:z.literal("always_valid").meta(R),status:z.enum(["continue","significant_positive","significant_negative"]).meta(R),look_count:z.number().int().min(1).meta(R),spending_state:z.object({alpha:z.number().positive().lt(1).meta(R),look_alpha:z.number().positive().lt(1).meta(R),cumulative_alpha_spent:z.number().positive().lt(1).meta(R),alpha_remaining:z.number().positive().lt(1).meta(R),unadjusted_p_value:z.number().min(0).max(1).optional().meta(R)}).meta(R)}).meta(Cr("ExperimentSequentialResult")),Xq=z.object({minimum_revenue_effect:z.number().min(0).meta(fS),revenue_effect:z.number().meta(fS),status:z.enum(["meaningful_positive","meaningful_negative","not_demonstrated"]).meta(R)}).meta(Cr("ExperimentPracticalSignificanceResult")),eD=z.object({method:z.literal("holm").meta(R),family:z.enum(["primary","guardrails"]).meta(R),family_size:z.number().int().positive().meta(R),unadjusted_p_value:z.number().min(0).max(1).meta(R)}).meta(Cr("ExperimentMultipleComparisonResult")),CS=z.object({metric:Tr.meta(R),control_variant_id:z.string().min(1).meta(R),variant_id:z.string().min(1).meta(R),estimator:z.string().min(1).max(100).meta(R),estimator_version:z.string().min(1).max(100).meta(R),estimate:z.number().meta(R),control_estimate:z.number().meta(R),absolute_effect:z.number().meta(R),relative_effect:z.number().optional().meta(R),standard_error:z.number().min(0).optional().meta(R),confidence_interval:Zq.optional().meta(R),p_value:z.number().min(0).max(1).optional().meta(R),multiple_comparison:eD.optional().meta(R),probability_positive:z.number().min(0).max(1).optional().meta(R),expected_loss:z.number().min(0).optional().meta(R),sequential:Qq.optional().meta(R),practical_significance:Xq.optional().meta(R),sample_size:z.number().int().min(0).optional().meta(R)}).meta(Cr("ExperimentMetricResult")),tD=z.object({metric:Tr.meta(R),summary_schema_version:z.number().int().min(1).meta(R),data_watermark:z.string().datetime().meta(R),provider:As.meta(R)}).meta(Cr("ExperimentEvidenceProvenance")),ES=z.object({provider:As.meta(R),evidence:z.array(tD).min(1).meta(R)}).meta(Cr("AnalysisProvenance")),RS=z.object({schema_version:z.number().int().min(1).meta(R),engine:z.string().min(1).max(100).meta(R),engine_version:z.string().min(1).max(100).meta(R),methodology:z.string().min(1).max(100).meta(R),metrics:z.array(CS).meta(R),health:IS.meta(R),provenance:ES.meta(R)}).meta(Cr("ExperimentAnalysisResult")),kS=W.merge(ue).extend({created_at:z.string().datetime().meta({...R,readOnly:true}),experiment_handle:nt.meta(R),experiment_version:z.number().int().min(1).meta(R),metric_semantic_id:Tr.meta(R),metric_catalog_version:z.string().min(1).max(64).meta(R),endpoint_version:z.string().min(1).max(100).meta(R),query_hash:z.string().min(1).max(128).meta(R),evidence_provider_handle:nt.meta(R),evidence_provider_type:z.string().min(1).max(100).meta(R),evidence_provider_version:z.string().min(1).max(100).meta(R),evidence_provider_contract_version:z.number().int().min(1).meta(R),summary_schema_version:z.number().int().min(1).meta(R),observation_window_start:z.string().datetime().meta(R),observation_window_end:z.string().datetime().meta(R),data_watermark:z.string().datetime().meta(R)}),AS=kS.extend({analysis_unit:ti.meta(R),evidence:TS.meta(R)}).meta({id:"ExperimentEvidenceSnapshot","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca,..._S}),wS=kS.extend({evidence_snapshot_id:z.string().min(1).meta(R),analysis_provider_handle:nt.meta(R),analysis_provider_type:z.string().min(1).max(100).meta(R),analysis_provider_version:z.string().min(1).max(100).meta(R),analysis_provider_contract_version:z.number().int().min(1).meta(R),engine:z.string().min(1).max(100).meta(R),engine_version:z.string().min(1).max(100).meta(R),estimator:z.string().min(1).max(100).meta(R),estimator_version:z.string().min(1).max(100).meta(R),analysis_config:Lh.meta(R),result:RS.meta(R)}).meta({id:"ExperimentAnalysisResultRecord","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca,..._S}),Ua=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...R,readOnly:true}),name:nn.meta(R),handle:nt.meta(R),description:z.string().max(1e3).optional().meta(R),experiment_type:vS.meta(R),status:yS.default("draft").meta(R),target_resource_id:z.string().optional().meta(R),target_segments:z.array(z.string()).optional().meta(R),variants:z.array(xS).min(2).meta(R),primary_metric:Tr.meta(R),guardrail_metrics:z.array(Tr).optional().meta(R),assignment_unit:ti.optional().meta(R),assignment_provider_binding:bm.extend({capability:z.literal("experiment_assignment"),allocation_mode:Fq}).optional().meta(R),evidence_provider_binding:bm.extend({capability:z.literal("experiment_evidence")}).optional().meta(R),analysis_provider_binding:bm.extend({capability:z.literal("experiment_analysis")}).optional().meta(R),analysis_config:Lh.optional().meta(R),metric_threshold:z.number().default(.05).meta(R),secondary_metrics:z.array(Tr).default([]).meta(R),traffic_allocation:z.number().min(0).max(1).default(1).meta(R),started_at:mn.meta(R),ended_at:mn.meta(R),confidence_threshold:z.number().min(0).max(1).default(.95).meta(R),winning_variant_id:z.string().nullable().default(null).meta(R),metadata:Kt.meta(R)}).meta({id:"Experiment","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca,...dp,...Fn()}),nD=bn("ExperimentAnchor"),jS=fl,Uh=W.merge(le).merge(ue).extend({experiment_id:z.string().optional().meta(R),resource_type:z.string().min(1).meta(R),resource_id:z.string().min(1).meta(R),severity:jS.default("info").meta(R),title:z.string().min(1).max(300).meta(R),description:z.string().max(2e3).meta(R),suggested_action:z.string().max(1e3).optional().meta(R),estimated_impact:z.number().optional().meta(R),detector_id:z.string().min(1).nullable().optional().meta(R),detector_version:z.number().int().min(1).nullable().optional().meta(R),opportunity_type:z.string().min(1).nullable().optional().meta(R),evidence:z.array(cp).nullable().optional().meta(R),hypothesis:z.string().min(1).nullable().optional().meta(R),confidence:z.number().min(0).max(1).nullable().optional().meta(R),is_dismissed:z.boolean().default(false).meta(R),metadata:Kt.meta(R)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":js,"x-revturbine-schema-exposure":ca});({"/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:K(AS)}}}},"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:K(wS)}}}},"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:K(nD)}}},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:H},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:K(Ua)}}}},"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:Ua}}}},"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:Ua.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ua}}}},"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:Ua}}}},"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:Ua}}}},"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:Ua}}}},"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:K(Uh)}}}},"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:Uh}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Fr,Financial:OS}=qe,{Persisted:iD,Transient:qS}=Ne,{Internal:Nh}=Me,aD=ft(Ge.Playbook,{sdkInput:true}),DS=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":qS,"x-revturbine-schema-exposure":Nh}),MS=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":qS,"x-revturbine-schema-exposure":Nh}),is=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...Fr,readOnly:true}),name:nn.meta(Fr),handle:nt.meta(Fr),description:z.string().max(1e3).optional().meta(Fr),rt_status:DS.default("draft").meta(Fr),discount_type:MS.meta(Fr),discount_value:z.number().min(0).meta(OS),currency:z.string().length(3).default("USD").meta(OS),applicable_plan_ids:z.array(z.string()).default([]).meta(Fr),applicable_addon_ids:z.array(z.string()).default([]).meta(Fr),target_segment_ids:z.array(z.string()).default([]).meta(Fr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(Fr),current_redemptions:z.number().int().min(0).default(0).meta({...Fr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(Fr),starts_at:mn.meta(Fr),ends_at:mn.meta(Fr),stripe_coupon_id:z.string().nullable().default(null).meta(Fr),stripe_promotion_code_id:z.string().nullable().default(null).meta(Fr),auto_sync_stripe:z.boolean().default(false).meta(Fr),metadata:Kt.meta(Fr)}).meta({id:"Promotion","x-revturbine-schema-persistence":iD,"x-revturbine-schema-exposure":Nh,...aD,...Fn()}),sD=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:K(sD)}}},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:H},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:K(is)}}}},"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:is}}}},"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:is.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:is}}}},"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:is}}}},"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:is}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:g}=qe,{Persisted:Fl,Transient:Pt}=Ne,{Internal:Zi,External:Nt}=Me,yt=ft(Ge.Playbook,{sdkInput:true}),US=ft(Ge.Playbook,{sdkInput:false}),Ul=ft(Ge.Playbook,{inConfig:false,sdkInput:false}),FS=ft(Ge.Playbook,{inConfig:false,sdkInput:true}),jl=ft(Ge.Playbook,{inConfig:false,sdkInput:true,source:jr.CodeConstant}),Vh=ft(Ge.Playbook,{inConfig:false,sdkInput:true,source:jr.Runtime}),Bh=ft(Ge.Playbook,{inConfig:false,sdkInput:false,source:jr.Runtime}),lD=ft(Ge.Billing,{sdkInput:false}),cD=ft(Ge.Metering,{sdkInput:false}),mD=ft(Ge.Branding,{inConfig:true,sdkInput:true}),uD=ft(Ge.Branding,{sdkInput:false}),LS="1.0.0",Ol=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:nn.meta(g),handle:nt.meta(g),description:Ci.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":Fl,"x-revturbine-schema-exposure":Zi,...Ul,...Fn()}),pD=bn("SeatTypeAnchor"),ql=W.merge(le).merge(ue).merge(Lt).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":Fl,"x-revturbine-schema-exposure":Zi,...Ul,...Fn()}),dD=bn("PersonalizationTokenAnchor"),NS=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Zi}),fp=W.merge(le).merge(ue).merge(Lt).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:NS.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":Fl,"x-revturbine-schema-exposure":Zi,...lD,...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":Pt,"x-revturbine-schema-exposure":Nt,...uD});var Dl=W.merge(le).merge(ue).merge(Lt).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":Fl,"x-revturbine-schema-exposure":Zi,...cD,...Pr()}),zh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Zi}),Ml=W.merge(le).merge(ue).merge(Lt).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:zh.default("warn").meta(g),hard_limit_action:zh.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":Fl,"x-revturbine-schema-exposure":Zi,...FS,...Pr()}),hD=bn("UsageEnforcementSettingsAnchor"),VS=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":Pt,"x-revturbine-schema-exposure":Zi}),BS=z.object({id:z.string().min(1).meta(g),group:z.array(VS).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":Pt,"x-revturbine-schema-exposure":Zi}),zS=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Zi}),Kh=z.object({capRules:z.array(BS).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:zS.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Zi}),_p=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:nt.meta({...g,readOnly:true}),global_frequency_cap:Kh.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":Fl,"x-revturbine-schema-exposure":Zi,...FS,...Pr()}),fD=bn("PlacementSettingsAnchor"),Hh=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":Pt,"x-revturbine-schema-exposure":Nt}),Gh=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Hh).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_handle:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),$S=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:wa.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),KS=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:wa.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),HS=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),currency:Is.meta(g),pricing_model:no.meta(g),visibility:wa.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:vl.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),GS=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),currency:Is.meta(g),pricing_model:no.meta(g),visibility:wa.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:vl.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),YS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),JS=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Kh.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),ZS=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),XS=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:hl.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),eP=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(Hu).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:hl.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:bl.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),tP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),nP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),rP=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":Pt,"x-revturbine-schema-exposure":Nt}),iP=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(rP).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),Yh=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":Pt,"x-revturbine-schema-exposure":Nt}),aP=z.object({name:z.string().min(1).meta(g),action_type:Yh.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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),sP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),oP=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),$h=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":Pt,"x-revturbine-schema-exposure":Nt}),lP=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:$h.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:$h})).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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),cP=z.object({label:z.string().meta(g),path:_l.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),Wh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(cP).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),Jh=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":Pt,"x-revturbine-schema-exposure":Nt}),mP=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":Pt,"x-revturbine-schema-exposure":Nt}),Zh=z.object({max_per_period:mP.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),uP=z.object({id:z.string().min(1).meta(g),target:Jh.meta(g),surfaces:z.array(Wh).meta(g),caps:Zh.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":Pt,"x-revturbine-schema-exposure":Nt}),pP=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":Pt,"x-revturbine-schema-exposure":Nt}),dP=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt}),Qh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:dP.meta(g),trigger:pP.meta(g),payloads:z.array(uP).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),gP=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:Jh.meta(g),caps:Zh.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(Wh).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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),_D=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":Pt,"x-revturbine-schema-exposure":Nt,...yt}),yD=W.merge(Oh).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...Ul}),vD=W.merge(qh).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...Ul}),hP=z.object({plans:z.array($S).meta({...g,...yt}),addons:z.array(KS).optional().meta({...g,...yt}),entitlements:z.array(XS).meta({...g,...yt}),entitlement_rules:z.array(eP).meta({...g,...yt}),segments:z.array(Gh).meta({...g,...yt}),content_ui_paths:z.array(aP).meta({...g,...yt}),slot_configs:z.array(tP).optional().meta({...g,...yt,...cm({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,...yt,...cm({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,...mD,...cm({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(nP).optional().meta({...g,...yt}),message_blocks:z.array(lP).optional().meta({...g,...yt}),placement_payloads:z.array(gP).optional().meta({...g,...yt}),placements:z.array(Qh).optional().meta({...g,...yt}),content_promotions:z.array(sP).optional().meta({...g,...yt}),personalization_tokens:z.array(oP).optional().meta({...g,...yt}),surface_templates:z.array(iP).optional().meta({...g,...yt}),free_trial_rules:z.array(yD).optional().meta({...g,...US}),reverse_trial_rules:z.array(vD).optional().meta({...g,...US}),plan_variations:z.array(HS).optional().meta({...g,...yt}),addon_variations:z.array(GS).optional().meta({...g,...yt}),extension_rules:z.array(_D).optional().meta({...g,...yt}),seat_types:z.array(YS).optional().meta({...g,...yt}),enforcement_defaults:z.array(WS).optional().meta({...g,...yt}),placement_settings:z.array(JS).optional().meta({...g,...yt}),segment_dimensions:z.array(ZS).optional().meta({...g,...yt}),meter_bindings:z.array(QS).optional().meta({...g,...yt}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...Ul}),signal_catalog:z.object({}).strict().optional().meta({...g,...Ul})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt}),fP=z.object({artifact_type:z.literal("playbook").meta({...g,...jl,readOnly:true}),format_version:z.literal(LS).meta({...g,...jl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...jl}),playbook_version_id:z.string().nullable().default(null).meta({...g,...Vh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...Bh,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...Bh,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...Bh,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...Vh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...jl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...jl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...jl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...Vh}),yp=fP.extend(hP.shape).meta({"x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});function bD(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _P(t){if(!bD(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(_P,yp).meta({id:"Playbook","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});z.preprocess(_P,yp.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Pt,"x-revturbine-schema-exposure":Nt,...yt});({"/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:K(pD)}}},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:H},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:K(Ol)}}}},"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:ar(Ol)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ol}}}},"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:Ol.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ol}}}},"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:K(dD)}}},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:H},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:K(ql)}}}},"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:ar(ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ql}}}},"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:ql.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ql}}}},"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:Kn(fp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:fp}}}},"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:K(Dl)}}}},"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:ar(Dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Dl}}}},"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:Dl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Dl}}}},"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:K(hD)}}},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:H},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:K(Ml)}}}},"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:ar(Ml)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ml}}}},"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:Ml.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ml}}}},"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:K(fD)}}},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:Kn(_p)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:as}=qe,{Persisted:yP}=Ne,{Internal:vP}=Me,bP=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":yP,"x-revturbine-schema-exposure":vP}),Xh=W.merge(le).merge(ue).extend({action:bP.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:Kt.meta(as)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":yP,"x-revturbine-schema-exposure":vP});({"/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:K(Xh)}}}},"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:Xh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:vp}=qe,{Persisted:ID,Transient:CD}=Ne,{Internal:xP}=Me,SP=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":CD,"x-revturbine-schema-exposure":xP}),os=W.merge(le).extend({name:nn.meta(vp),handle:nt.meta(vp),status:SP.default("active").meta(vp),metadata:Kt.meta(vp)}).meta({id:"Tenant","x-revturbine-schema-persistence":ID,"x-revturbine-schema-exposure":xP});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:H},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:K(os)}}}},"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:os}}}},"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:os.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:os}}}},"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:os}}}},"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:os}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Qi}=qe,{Persisted:RD,Transient:PP}=Ne,{Internal:ef}=Me,TP=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":PP,"x-revturbine-schema-exposure":ef}),ho=W.merge(le).merge(ue).extend({name:nn.meta(Qi),handle:nt.meta(Qi),description:Ci.meta(Qi),is_production:z.boolean().default(false).meta({...Qi,readOnly:true}),status:TP.default("active").meta(Qi),cloned_from_environment_id:z.string().nullable().default(null).meta({...Qi,readOnly:true}),cloned_at:mn.meta({...Qi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Qi,readOnly:true}),requires_approval:z.boolean().default(false).meta(Qi),auto_deploy_on_approval:z.boolean().default(false).meta(Qi),created_by:z.string().optional().meta(Qi),metadata:Kt.meta(Qi)}).meta({id:"Environment","x-revturbine-schema-persistence":RD,"x-revturbine-schema-exposure":ef}),IP=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":PP,"x-revturbine-schema-exposure":ef});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:H},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:K(ho)}}}},"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:ho}}},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:ho}}}},"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:ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ho}}}},"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:ho}}},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:IP}}},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:rt,Pii:Cm}=qe,{Transient:Fa,Persisted:AD}=Ne,{External:ma}=Me,CP=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma});z.object({superseded_output_id:z.string().min(1).meta(rt),superseded_by:z.string().min(1).meta(rt),reason:CP.meta(rt)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":AD,"x-revturbine-schema-exposure":ma,...qe.Operational});var EP=z.enum(om).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma}),tf=z.object({output_id:z.string().meta(rt),category:z.string().meta(rt),surface:z.object({template:z.string().optional().meta(rt),type:sm.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":Fa,"x-revturbine-schema-exposure":ma}),RP=z.object({status:EP.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:tf.optional().meta(rt)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma});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":Fa,"x-revturbine-schema-exposure":ma});var kP=z.object({id:z.string().meta(Cm),anonymous_id:z.string().optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Cm)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma}),AP=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:tf.optional().meta(rt),reason_codes:z.array(z.string()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma}),wP=RP,jP=dm.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma}),OP=z.object({segments:z.array(z.string()).optional().meta(rt),traits:z.record(z.string(),z.unknown()).optional().meta(Cm),usage_balances:z.record(z.string(),z.number()).optional().meta(rt)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma});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:kP.meta(Cm),decisions:z.array(AP).meta(rt),entitlements:z.record(z.string(),wP).optional().meta(rt),theme:z.record(z.string(),z.unknown()).optional().meta(rt),trial_status:jP.optional().meta(rt),user_context:OP.optional().meta(Cm)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Fa,"x-revturbine-schema-exposure":ma});var {Unrestricted:Xt}=qe,{Persisted:qD,Transient:bp}=Ne,{Internal:Em}=Me,qP=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":bp,"x-revturbine-schema-exposure":Em}),Ll=W.merge(le).merge(ue).extend({environment_id:z.string().min(1).meta(Xt),name:nn.meta(Xt),description:z.string().max(2e3).optional().meta(Xt),status:qP.default("draft").meta(Xt),labels:z.array(z.string()).default([]).meta(Xt),created_by:z.string().min(1).meta(Xt),submitted_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),submitted_at:mn.meta({...Xt,readOnly:true}),reviewed_at:mn.meta({...Xt,readOnly:true}),deployed_at:mn.meta({...Xt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Xt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Xt),review_notes:z.string().max(2e3).optional().meta(Xt),rejection_reason:z.string().max(2e3).optional().meta(Xt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Xt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Xt,readOnly:true}),bundle_sha256:z.string().regex(/^[a-f0-9]{64}$/).nullable().default(null).meta({...Xt,readOnly:true}),metadata:Kt.meta(Xt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":qD,"x-revturbine-schema-exposure":Em}),nf=z.object({handle:z.string().meta(Xt),resource_type:z.string().meta(Xt),resource_name:z.string().optional().meta(Xt),action:z.enum(["create","update","delete"]).meta(Xt),has_conflict:z.boolean().meta(Xt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":bp,"x-revturbine-schema-exposure":Em}),DP=z.object({playbook_version_id:z.string().meta(Xt),entries:z.array(nf).meta(Xt),total_entries:z.number().int().min(0).meta(Xt),total_conflicts:z.number().int().min(0).meta(Xt),deployable:z.boolean().meta(Xt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":bp,"x-revturbine-schema-exposure":Em}),MP=z.object({playbook_version_id:z.string().meta(Xt),deployed_count:z.number().int().min(0).meta(Xt),superseded_count:z.number().int().min(0).meta(Xt),skipped_conflicts:z.number().int().min(0).meta(Xt),deployed_at:z.string().datetime().meta(Xt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":bp,"x-revturbine-schema-exposure":Em});({"/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:Ll}}},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:Ll}}},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:Ll}}},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:MP}}},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:Ll}}}},"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:DP}}}},"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:K(nf)}}}},"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:Ll}}},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:ut}=qe,{Persisted:La}=Ne,{Internal:Na}=Me,MD=ft(Ge.CustomerOperations,{sdkInput:false,source:jr.Customer}),UP=365,Os=W.merge(le).merge(ue).extend({provider_handle:nt.meta(ut),provider_type:nt.meta(ut),endpoint:z.string().url().max(2048).nullable().default(null).meta(ut),credential_reference:z.string().min(1).max(255).nullable().default(null).meta({...ut,readOnly:true}),environment_id:z.string().min(1).max(200).default("production").meta(ut),health_state:vm.default("unavailable").meta({...ut,readOnly:true}),last_health_check_at:mn.meta({...ut,readOnly:true}),supported_capability_versions:z.record(z.string().min(1).max(100),z.array(z.number().int().min(1)).min(1)).default({}).meta({...ut,readOnly:true}),external_project_id:z.string().min(1).max(255).nullable().default(null).meta(ut),external_workspace_id:z.string().min(1).max(255).nullable().default(null).meta(ut),timeout_ms:z.number().int().min(1).max(12e4).default(1e4).meta(ut),stale_after_ms:z.number().int().min(1).default(3e5).meta(ut),unavailable_after_failures:z.number().int().min(1).max(100).default(3).meta(ut)}).meta({id:"ProviderConnection","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na,...MD}),FP=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),qs=W.merge(le).merge(ue).extend({key:z.string().min(1).max(100).meta(ut),value_type:FP.default("boolean").meta(ut),value:z.string().max(4e3).default("false").meta(ut),description:Ci.meta(ut),enabled:z.boolean().default(true).meta(ut)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),xp=W.merge(le).merge(ue).extend({workspace_name:z.string().min(1).max(200).meta(ut),support_email:z.string().email().nullable().default(null).meta(ut),timezone:z.string().max(50).default("UTC").meta(ut),default_currency:z.string().length(3).default("USD").meta(ut),logo_url:z.string().url().nullable().default(null).meta(ut),activity_window_days:z.number().int().min(1).default(lm.window_days).meta(ut),activity_high_min:z.number().int().min(1).default(lm.high_min).meta(ut),activity_medium_min:z.number().int().min(1).default(lm.medium_min).meta(ut),activity_low_min:z.number().int().min(1).default(lm.low_min).meta(ut),analytics_retention_days:z.number().int().min(1).default(UP).meta(ut)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),Sp=W.merge(le).merge(ue).extend({server_url:z.string().url().max(500).meta(ut),api_token_hint:z.string().max(50).nullable().default(null).meta(ut),allow_write_actions:z.boolean().default(false).meta(ut),enabled_tools:z.array(z.string().max(100)).default([]).meta(ut),enabled:z.boolean().default(false).meta(ut)}).meta({id:"McpConfig","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),Rm=W.merge(le).merge(ue).extend({step_key:z.string().min(1).max(100).meta(ut),label:z.string().min(1).max(200).meta(ut),done:z.boolean().default(false).meta(ut),completed_at:mn.meta({...ut,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),LP=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),NP=W.merge(ue).extend({environment_id:z.string().min(1).default("production").meta(ut),actor_type:LP.meta(ut),actor_id:z.string().nullable().default(null).meta(ut),action:z.string().min(1).max(120).meta(ut),object_type:z.string().max(120).nullable().default(null).meta(ut),object_id:z.string().max(200).nullable().default(null).meta(ut),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(ut),occurred_at:z.string().datetime().meta({...ut,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),VP=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na}),km=W.merge(le).merge(ue).merge(Lt).merge(Bt).extend({handle:nt.meta({...ut,readOnly:true}),identifier:z.string().min(1).max(200).meta(ut),identifier_type:VP.default("user_id").meta(ut),note:z.string().max(500).nullable().default(null).meta(ut),added_by:z.string().meta(ut)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":La,"x-revturbine-schema-exposure":Na,...Pr()});({"/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:K(qs)}}}},"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:ar(qs)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:qs}}}},"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:qs}}}},"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:Kn(qs).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:qs}}}},"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:qs}}}},"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:Kn(xp).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:xp}}}},"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:Kn(Sp).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Sp}}}},"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:K(Rm)}}}},"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:Rm}}}},"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:Kn(Rm).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Rm}}}},"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:K(NP)}}}},"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:K(km)}}}},"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:ar(km)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:km}}}},"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:km}}}},"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:K(Os)}}}},"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:ar(Os)}}},responses:{201:{description:"Provider connection created",content:{"application/json":{schema:Os}}}},"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:Os}}}},"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:Kn(Os).partial()}}},responses:{200:{description:"Provider connection updated",content:{"application/json":{schema:Os}}}},"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:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"provider-connections",persistence:{table:"providerConnections",mode:"delete"}}})}});var {Unrestricted:ye,Pii:ri}=qe,{Persisted:fi,Transient:rf}=Ne,{Internal:Lr}=Me,BP=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.merge(le).extend({name:nn.meta(ye),email:z.string().email().meta(ri),email_verified:z.boolean().default(false).meta(ye),image:z.string().url().nullable().default(null).meta(ri),role:BP.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:mn.meta({...ye,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ye,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.merge(le).extend({expires_at:z.string().datetime().meta(ye),token:z.string().min(1).meta({...ri,readOnly:true}),ip_address:z.string().nullable().default(null).meta(ri),user_agent:z.string().nullable().default(null).meta(ri),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":fi,"x-revturbine-schema-exposure":Lr});W.merge(le).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({...ri,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...ri,readOnly:true}),id_token:z.string().nullable().default(null).meta({...ri,readOnly:true}),access_token_expires_at:mn.meta({...ye,readOnly:true}),refresh_token_expires_at:mn.meta({...ye,readOnly:true}),scope:z.string().nullable().default(null).meta(ye),password:z.string().nullable().default(null).meta({...ri,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.merge(le).extend({identifier:z.string().min(1).meta(ri),value:z.string().min(1).meta({...ri,readOnly:true}),expires_at:z.string().datetime().meta(ye)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.extend({secret:z.string().min(1).meta({...ri,readOnly:true}),backup_codes:z.string().min(1).meta({...ri,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":fi,"x-revturbine-schema-exposure":Lr});W.extend({name:nn.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":fi,"x-revturbine-schema-exposure":Lr});var af=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});var sf=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":rf,"x-revturbine-schema-exposure":Lr}),of=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":rf,"x-revturbine-schema-exposure":Lr});z.object({resource:sf,action:of}).meta({id:"Permission","x-revturbine-schema-persistence":rf,"x-revturbine-schema-exposure":Lr});var KD=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],HD=["plans","entitlements","placements","targeting","content","experiments"],GD=["plans","entitlements","placements","targeting","content","experiments"],YD=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],WD=["read","create","update","delete","publish","approve","invite","manage_roles"];function Pp(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var JD=Pp(KD,["read"]),ZD=[...JD,...Pp(HD,["create","update"])];[...ZD,...Pp(GD,["publish","approve","delete"])];Pp(YD,WD);var QD=sf.options.flatMap(t=>of.options.map(e=>`${t}:${e}`));z.enum(QD).meta({id:"McpTokenScope","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),user_id:z.string().min(1).meta({...ye,readOnly:true}),role:af.default("viewer").meta(ye),created_at:z.string().datetime().meta({...ye,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});var zP=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":Lr});W.extend({organization_id:z.string().min(1).meta({...ye,readOnly:true}),email:z.string().email().meta(ri),role:af.nullable().default(null).meta(ye),status:zP.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":fi,"x-revturbine-schema-exposure":Lr});W.extend({name:z.string().max(200).nullable().default(null).meta(ye),public_key:z.string().min(1).meta({...ri,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":fi,"x-revturbine-schema-exposure":Lr});W.merge(le).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({...ri,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:mn.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:mn.meta({...ye,readOnly:true}),expires_at:mn.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":fi,"x-revturbine-schema-exposure":Lr});W.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":fi,"x-revturbine-schema-exposure":Lr});var sM=16,oM=11;async function cf(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 $P(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var Nl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function lM(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new Nl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!$P(n))throw new Nl("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(!$P(r)||r>n)throw new Nl("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 mf(t,e){let n=sM,r=oM,i=lM(t);if(i.minReadableSchemaVersion>n)throw new Nl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${i.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(i.schemaVersion>n)throw new Nl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);if(i.schemaVersion<r)throw new Nl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);return i}var HP=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),KP=z.string().datetime({offset:true}),cM=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),lf=z.object({url:z.string().min(1),sha256:HP,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),GP=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:cM}).strict(),mM=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH"),YP=z.object({manifest_version:mM,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:lf,standby:lf.optional(),previous:lf.optional(),not_before:KP,expires_at:KP,rollback_to:HP.optional(),signature:GP.optional()}).strict().refine(t=>Date.parse(t.not_before)<=Date.parse(t.expires_at),{message:"not_before must be <= expires_at",path:["expires_at"]});function uM(t){let{signature:e,...n}=t;return n}async function WP(t,e){let n=t.signature;if(!n)return {ok:false,reason:"missing_signature"};if(!GP.safeParse(n).success)return {ok:false,reason:"malformed"};let i=e.find(_=>_.key_id===n.key_id);if(!i)return {ok:false,reason:"unknown_key_id"};let a;try{a=pM(n.sig);}catch{return {ok:false,reason:"malformed"}}let s=new TextEncoder().encode(bc(uM(t)));return await crypto.subtle.verify("Ed25519",i.publicKey,a,s)?{ok:true}:{ok:false,reason:"bad_signature"}}function uf(t,e=new Date){let n=e.getTime();return n<Date.parse(t.not_before)?{ok:false,reason:"not_yet_valid"}:n>Date.parse(t.expires_at)?{ok:false,reason:"expired"}:{ok:true}}function pM(t){let e="===".slice((t.length+3)%4),n=t.replace(/-/g,"+").replace(/_/g,"/")+e;if(typeof atob=="function"){let r=atob(n),i=new Uint8Array(r.length);for(let a=0;a<r.length;a++)i[a]=r.charCodeAt(a);return i}return dM(n)}function dM(t){let e=globalThis.Buffer;if(!e)throw new Error("No atob or Buffer available for base64 decoding");return new Uint8Array(e.from(t,"base64"))}var gM=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]);function hM(t){let e=t.componentType??t.surfaceType;if(!e)throw new Error("[RevTurbine] Placement component registration requires componentType.");return e}var Vl=class{constructor(){w(this,"types",new Map);w(this,"componentIndex",new Map);}register(e){let n=hM(e),r=this.types.get(e.id);r&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousComponentType:r.componentType,nextComponentType:n});let i={...e,componentType:n,priority:e.priority??0,renderedFields:e.renderedFields??[],accepts:e.accepts??(s=>s.surface.type===n)};this.types.set(i.id,i);let a=this.componentIndex.get(i.componentType)??[];a.includes(i.id)||(a.push(i.id),this.componentIndex.set(i.componentType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.componentIndex.get(n.componentType);if(r){let i=r.filter(a=>a!==e);i.length>0?this.componentIndex.set(n.componentType,i):this.componentIndex.delete(n.componentType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let i=this.types.get(e.surface.template);if(i)return i;let a=_g[e.surface.template];if(a&&a!==e.surface.type)return}let r=(this.componentIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,a)=>a.priority-i.priority);for(let i of r)if(i.accepts?.(e))return i;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listByComponentType(e){return (this.componentIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}listBySurfaceType(e){return this.listByComponentType(e)}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=a=>{if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"&&a.trim().length>0){let s=Number(a);if(Number.isFinite(s))return s}},i=a=>{let s="_usage_remaining";if(a==="usage_remaining"){let I=r(e.usage_current??e.current_usage),k=r(e.usage_limit);return I!==void 0&&k!==void 0?Math.max(0,k-I):void 0}if(!a.endsWith(s))return;let u=a.slice(0,-s.length);if(!u)return;let _=r(e[`${u}_usage_current`]),C=r(e[`${u}_usage_limit`]);if(!(_===void 0||C===void 0))return Math.max(0,C-_)};return t.replace(/\{\{(\w+)\}\}/g,(a,s)=>{let u=n[s]??s,_=e[u];if(_!=null)return String(_);let C=i(u);return C!=null?String(C):`{{${s}}}`})}function fM(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=JP(i,e):n[r]=i;return n}function _M(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,i]of Object.entries(t))gM.has(r)||(n[r]=i);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 yM(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 Am=null,pf=null;function QP(t){}function vM(){return Am||(Am=new Vl,pf),Am}function bM(){Am=null;}var gf=class{constructor(){w(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();}},df=null;function hf(){return df||(df=new gf),df}function XP(t,e=hf()){let n=new Map;for(let[r,i]of Object.entries(t)){if(e.has(r))continue;let a=(s,u)=>{let _=u.placement.cta_path??u.placement.ui_path??{};Promise.resolve().then(()=>i(_)).catch(C=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,C);});};e.register(r,a),n.set(r,a);}return ()=>{for(let[r,i]of n)e.get(r)===i&&e.unregister(r);}}function eT(t,e=hf()){if(e.has("snooze"))return ()=>{};let n=(r,i)=>{let a=i.placement,s=typeof a.remind_later_minutes=="number"?a.remind_later_minutes:void 0;t(i.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}function tT(t,e,n=hf()){let r=new Map;for(let[i,a]of Object.entries(t)){if(n.has(i))continue;let s=(u,_)=>{let C={placement:_.placement,actionType:i,params:u.params??{}},I=async(k,O)=>{try{await e.trackResult(C,k,O);}catch(A){console.error(`[RevTurbine] serverActions.${i} telemetry failed:`,A);}};(async()=>{let k;try{k=await a(C);}catch(O){let A=O instanceof Error?O:new Error(String(O));console.error(`[RevTurbine] serverActions.${i} failed:`,A),await I(false,A);return}if(!k||k.success!==true){console.error(`[RevTurbine] serverActions.${i} reported failure.`),await I(false);return}k.userContext&&e.applyUserContext(k.userContext),await I(true);})();};n.register(i,s),r.set(i,s);}return ()=>{for(let[i,a]of r)n.get(i)===a&&n.unregister(i);}}var wm={recommended_plan_handle:"",recommended_plan_name:""};function nT(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:i}=t;if(i.length===0)return wm;if(e==="custom"){let u=n??"";if(u===""||u===r)return wm;let _=i.find(C=>C.unique_handle===u);return _?{recommended_plan_handle:_.unique_handle,recommended_plan_name:_.name}:wm}if(r==="")return wm;let a=id(r,i);if(a===null)return wm;let s=i.find(u=>u.unique_handle===a);return {recommended_plan_handle:a,recommended_plan_name:s?.name??a}}var ff="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Ip=ff.length,xM=Ip-1,SM=10,Tp=16;function PM(t){let e=t,n="";for(let r=0;r<SM;r+=1){let i=e%Ip;n=ff[i]+n,e=Math.floor(e/Ip);}return n}function rT(){let t=new Uint8Array(Tp);crypto.getRandomValues(t);let e=new Array(Tp);for(let n=0;n<Tp;n+=1)e[n]=t[n]%Ip;return e}function TM(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<xM)return t[e]+=1,true;t[e]=0;}return false}function iT(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Tp?TM(e)||(t+=1,e=rT()):(t=n,e=rT());let r=PM(t);for(let i=0;i<e.length;i+=1)r+=ff[e[i]];return r}}}var _f=iT();var IM=new Set([408,429,500,502,503,504]);function CM(t){return new Promise(e=>setTimeout(e,t))}async function yf(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??CM,a;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(!IM.has(u.status))return {delivered:!1,status:u.status,attempts:s+1};a=new Error(`ingest_status_${u.status}`);}catch(u){a=u instanceof Error?u:new Error(String(u));}s<n&&await i(r*(s+1));}return {delivered:false,error:a,attempts:n+1}}function vf(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function aT(){let t=typeof IntersectionObserver<"u",e=new Map;function n(i,a,s,u){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),i.io.unobserve(a),i.tracked.delete(a),s.onExposed(u));}function r(i,a){let s=`${i}|${a}`,u=e.get(s);if(u)return u;let _=new Map,I={io:new IntersectionObserver(k=>{let O=e.get(s);if(O)for(let A of k){let j=_.get(A.target);!j||j.fired||(A.isIntersecting?j.minVisibleMs<=0?n(O,A.target,j,"viewport"):j.timer===null&&(j.timer=setTimeout(()=>n(O,A.target,j,"viewport"),j.minVisibleMs)):j.timer!==null&&(clearTimeout(j.timer),j.timer=null));}},{threshold:i,rootMargin:a}),tracked:_};return e.set(s,I),I}return {supported:t,observe(i,a,s){if(!t){let k=false;return Promise.resolve().then(()=>{k||s("render_fallback");}),()=>{k=true;}}let u=a.threshold??.5,_=a.rootMargin??"0px",C=r(u,_),I={onExposed:s,minVisibleMs:a.minVisibleMs??0,timer:null,fired:false};return C.tracked.set(i,I),C.io.observe(i),()=>{I.fired||(I.timer!==null&&(clearTimeout(I.timer),I.timer=null),C.io.unobserve(i),C.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var bf=aT();function EM(t,e,n){let r=e.toUpperCase();try{let i=new Intl.NumberFormat(n,{style:"currency",currency:r}),a=i.resolvedOptions().maximumFractionDigits??2;return i.format(t/10**a)}catch{return `${r} ${t}`}}var uT=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],RM=new Set(uT),kM=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,AM=Ls();function wM(t){AM&&console.warn(t);}var pT=new Set(Cu.options),dT=["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"],sT=new Set(dT);function xW(t,e){return Rp(e,"defineUiPathResolvers(resolvers)")}function Rp(t,e){if(!t)return {};let n={};for(let[r,i]of Object.entries(t)){let a=String(r||"").trim();if(!a)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof i!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${a}'.`);n[a]=i;}return n}function jM(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t)){let i=String(n||"").trim();if(!i)throw new Error("[RevTurbine] RevTurbineInitOptions.serverActions contains an empty action type key.");if(typeof r!="function")throw new Error(`[RevTurbine] RevTurbineInitOptions.serverActions contains a non-function handler for action type '${i}'.`);e[i]=r;}return e}var jm={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function Ap(t){return t?.playbook??t?.exportedConfig}function SW(t){return {...t,runtimeMode:"revturbine_server"}}function PW(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function OM(t){let e=Rp(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function TW(t){return OM(t)}function IW(t,e,n={}){return {slotId:t,componentType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function CW(t,e={}){return {entitlementHandle:t,slotId:e.slotId,componentType:Ha(e),planHandle:e.planHandle,placementHandle:e.placementHandle}}function EW(t,e={}){return {placementHandle:t,slotId:e.slotId,componentType:Ha(e),entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function Ds(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function RW(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function kW(t,e,n){return {eventType:t,payload:e,options:n}}var oT="revturbine:sdk-route-change",ls="sdk_validation_warning",qM="revturbine:decision-cache",DM="revturbine:interaction-state",MM="revturbine:presentation-caps",UM="/api/track",FM="/api/sdk/meta",LM="/api/events/interactions",NM="/api/placements/interactions",VM="revturbine-web-sdk",lT="user_context_observed",BM=20,zM=5e3;function gT(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=hT(t);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function hT(t){return he(t.payload)?t.payload:null}var $M=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function KM(t){let e={};for(let n of $M)e[n]=gT(t,n);return e}var HM=Dg.map(t=>t.prefix),GM=new Set([...qg,...Ev]);function YM(t){let e=pc(t);return e===ls?"derived":GM.has(e)||HM.some(n=>e.startsWith(n))?"automatic":"explicit"}var WM=["decision_id"];function JM(t){let e={};for(let n of WM)e[n]=gT(t,n);return e}function ZM(t){return ed(t,Ef(8))}async function cT(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return au(new Uint8Array(e))}function Ef(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let i=0;i<n.length;i+=1){let a=n[i].toString(16).padStart(2,"0");r+=a;}return r.slice(0,t)}function Nr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Ef(16)}`}function Cp(){return Bo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function mT(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function QM(t,e){let n={};for(let[r,i]of Object.entries(e))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(n[r]=i);return hd(t,n)}function XM(t,e,n){if(t.length===0)return true;let r=new Map;for(let i of t){let a=n.get(i)??"__no_dim__",s=r.get(a)??[];s.push(i),r.set(a,s);}for(let i of r.values())if(!i.some(a=>e.has(a)))return false;return true}var Sf=class{constructor(e){w(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},kp=class kp{constructor(e,n,r,i,a){w(this,"endpoint",e);w(this,"tenantId",n);w(this,"token",r);w(this,"legacyTargetDefaults",i);w(this,"trustedManifestKeys",a);w(this,"cached");w(this,"etag");w(this,"lastFetchedAt",0);w(this,"inFlight");}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<kp.REFRESH_TTL_MS)return this.cached;if(this.inFlight)return this.inFlight;this.lastFetchedAt=e;let n=this.refreshOnce(e);this.inFlight=n;try{return await n}finally{this.inFlight===n&&(this.inFlight=void 0);}}async refreshOnce(e){try{let n=await this.fetchCdnConfig(e);return n?(this.cached=n,this.cached):await this.fetchLegacyConfig()}catch{return this.cached}}async fetchCdnConfig(e){try{let n=await fetch(`${this.endpoint}/api/sdk/bootstrap`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`}});if(!n.ok)return;let r=await n.json();if(!he(r)||typeof r.manifest_url!="string")return;let i=await this.acceptManifest(r.manifest,e);if(!i){let C=await fetch(this.resolveDeliveryUrl(r.manifest_url),{method:"GET",headers:{accept:"application/json"}});if(!C.ok)return;let I=await C.json();i=await this.acceptManifest(I,e);}if(!i)return;let a=await fetch(this.resolveDeliveryUrl(i.active.url),{method:"GET",headers:{accept:"application/json"}});if(!a.ok)return;let s=new Uint8Array(await a.arrayBuffer());if(await cf(s)!==i.active.sha256||!uf(i,new Date(Date.now())).ok)return;let u=new TextDecoder().decode(s),_=JSON.parse(u);return mf(_),ha(_,"signed Playbook bundle",this.legacyTargetDefaults)}catch{return}}async acceptManifest(e,n){let r=YP.safeParse(e);if(!(!r.success||r.data.tenant_id!==this.tenantId)&&uf(r.data,new Date(n)).ok&&!(this.trustedManifestKeys.length>0&&!(await WP(r.data,this.trustedManifestKeys)).ok))return r.data}resolveDeliveryUrl(e){return new URL(e,`${this.endpoint}/`).toString()}async fetchLegacyConfig(){try{let e=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(e.status===304||!e.ok)return this.cached;let n=await e.text(),r=e.headers.get("x-bundle-sha256");if(r&&await cf(new TextEncoder().encode(n))!==r)return this.cached;let i=JSON.parse(n);mf(i);let a=ha(i,"GET /api/sdk/config",this.legacyTargetDefaults);return a&&(this.cached=a,this.etag=e.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};w(kp,"REFRESH_TTL_MS",6e4);var Pf=kp,Tf=class{constructor(e,n,r){w(this,"cached");w(this,"resolver");w(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=ha(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},If=class{constructor(e,n){w(this,"source");w(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return ha(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return ha(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Om=class Om{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"ingestPublicKey");w(this,"environmentId");w(this,"locale");w(this,"testTraffic");w(this,"analyticsEnabled");w(this,"anonymousTelemetryEnabled");w(this,"previewMode");w(this,"telemetryConsent");w(this,"telemetryCounters",vf());w(this,"maxBatchSize");w(this,"flushIntervalMs");w(this,"flushTimer");w(this,"batchingTeardown",[]);w(this,"anonTelemetryNoticeShown",false);w(this,"piiRedactionWarned",false);w(this,"endpoint");w(this,"runtimeMode");w(this,"endpointOverrides");w(this,"localRuntime");w(this,"localStorageKey");w(this,"mode");w(this,"policy");w(this,"extensionEnabled");w(this,"placementBehaviorOverrides");w(this,"derivedPlacementBehaviorMemo",null);w(this,"providerFailureSlotBehavior");w(this,"uiPathResolvers");w(this,"serverActions");w(this,"unbridgeUiPathCtaResolvers",()=>{});w(this,"unregisterBuiltinSnoozeResolver",()=>{});w(this,"unregisterServerActionResolvers",()=>{});w(this,"persistentStore");w(this,"sessionStore");w(this,"anonymousId");w(this,"sessionId");w(this,"decisionCache",new Map);w(this,"interactionState",new Map);w(this,"interactionQueue",[]);w(this,"defaultDecisionTtlMs",6e4);w(this,"defaultDismissCooldownMs",1440*60*1e3);w(this,"dismissCooldownDefaultMs",10080*60*1e3);w(this,"defaultRemindLaterMs",3600*1e3);w(this,"defaultUsageWarningPercent",80);w(this,"defaultTrialExpiringDays",3);w(this,"events",[]);w(this,"placements",new Map);w(this,"syncedSurfaceSlotIds",new Set);w(this,"userContext");w(this,"pageContext");w(this,"clientContextToken");w(this,"clientSessionProvider");w(this,"retriedClientContextAfterMint",false);w(this,"serverUserContextProvider");w(this,"lastServerContextHash");w(this,"usageBalances",{});w(this,"localDecisionsByPlacementId",new Map);w(this,"localPlacementsByLookupKey",new Map);w(this,"localEntitlementsByHandle",new Map);w(this,"localUserContextsByUserId",new Map);w(this,"localTrialStatus",{in_trial:false});w(this,"presentationCapsByKey",new Map);w(this,"usageLimitByEntitlement",new Map);w(this,"usageTokenPrefixByEntitlement",new Map);w(this,"segmentIdsByPredicateField",new Map);w(this,"configuredSegmentsById",new Map);w(this,"dirtySegmentIds",new Set);w(this,"segmentMembershipBySegmentId",new Map);w(this,"segmentMembershipUserId");w(this,"lastTrialTriggerStage","none");w(this,"configProvider");w(this,"branding");w(this,"apiBranding");w(this,"cachedPlacementResolver");w(this,"cachedPlacementResolverConfig");w(this,"sdkDisabledByProviderFailure",false);w(this,"sdkDisabledReason");w(this,"providerRegistry");w(this,"placementTypeRegistry");w(this,"impressionHistory");w(this,"emittedResolutionDiagnostics",new Set);w(this,"emittedSdkErrors",new Set);w(this,"reportedUnrecognizedContextKeys",new Set);w(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.locale=e.locale?.trim()||void 0,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??BM),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??zM),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??jm.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=Rp(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.serverActions=jM(e.serverActions),this.persistentStore=fs(e.persistentStorage),this.sessionStore=Jd(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?mT():{},...e.user||{}},this.pageContext={...this.policy.inferPage?Cp():{},...e.page||{},tags:uc(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),he(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(ls,{reason:"init received a blank user id"});}catch{}}if(this.sessionId=Nr(),this.providerRegistry=new Oc,this.placementTypeRegistry=new Vl,this.impressionHistory=new $d({store:new vu({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=XP(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=eT((n,r)=>{this.snooze(n,r);}),this.unregisterServerActionResolvers=tT(this.serverActions,{applyUserContext:n=>this.setUserContext(n),trackResult:(n,r,i)=>this.emitSemantic("placement_interaction",{interaction_type:"cta_clicked",action_type:n.actionType,action_success:r,payload_id:n.placement.output_id,placement_id:n.placement.surface?.slot_id??null,decision_id:n.placement.decision_id??null,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),action_outcome:i?"rejected":r?"success":"failure"},{immediate:false})}),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===jm.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new If(e.configProvider,n);let r=ha(Ap(e.localRuntime),"localRuntime.playbook",n),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new Tf(i,n,r);if(r)return new Sf(r);let a=e.runtimeMode??jm.Server,s=e.ingestPublicKey??e.apiKey;if(a!==jm.LocalOnly&&e.endpoint&&s)return new Pf(e.endpoint,e.tenantId,s,n,e.trustedManifestKeys??[])}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??[],a={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:a},a}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 i of r.predicates){let a=String(i.field||"").trim();if(!a)continue;let s=this.segmentIdsByPredicateField.get(a)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(a,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=Io({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,i=this.localTrialStatus,a=this.userContext.payment_failed,s=this.userContext.payment_at_risk,u=this.userContext.tiers,_=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&&!_&&!I)return;let k={};if(r&&typeof r=="object"){let A=_a(r);for(let[j,M]of Object.entries(r)){if(!M||typeof M!="object")continue;let oe=typeof M.amount=="number"?M.amount:A[j]??0,Z=typeof M.limit=="number"?M.limit:0,ge=Z>0?Math.max(0,Z-oe):0;k[j]={used:oe,limit:Z,remaining:ge,unit:typeof M.unit=="string"?M.unit:void 0,reset_date:typeof M.reset_date=="string"?M.reset_date:void 0};}}let O={...i.in_trial!==void 0?{trialActive:i.in_trial}:{},...i.trial_limit_type!==void 0?{trialLimitType:i.trial_limit_type}:{},...i.progress_percent!==void 0?{trialProgressPercent:i.progress_percent}:{},...i.days_remaining!==void 0?{trialDaysRemaining:i.days_remaining}:{},...i.day_number!==void 0&&i.days_remaining!==void 0?{trialDaysTotal:i.day_number+i.days_remaining}:{},...i.state!==void 0?{trialState:i.state}:{},...i.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{trialUsageConsumed:i.usage_consumed}:{},...i.usage_limit!==void 0?{trialUsageLimit:i.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...O,...a!==void 0?{paymentFailed:a}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(k).length>0||_?{entitlements:{entries:{},usage:k,..._?{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 i of r)this.dirtySegmentIds.add(i);}}toSegmentEvaluationTraits(e,n,r){return pu(e,n,r)}buildTargetingState(e){return du(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,i=n.id||this.anonymousId;if(r!==i){this.segmentMembershipUserId=i,this.markAllSegmentsDirty();return}let a=this.buildTargetingState(e),s=this.buildTargetingState(n),u=new Set,_=new Set([...Object.keys(a.segmentTraits),...Object.keys(s.segmentTraits)]);for(let C of _)a.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 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",i=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,a=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:Nr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:Ds(i,a,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${Nr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:Ha(e)??"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 vd(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId)return false;let r=Ha(n);if(r&&e.surfaceType&&e.surfaceType!==r)return false;let i=(a,s)=>!a||!s?true:a===s;return i(n.entitlementHandle,e.entitlementHandle)&&i(n.planHandle,e.planHandle)&&i(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return rd(e,n.planHandle)}applyCategoryConflictSuppression(e){return ou(e)}resolveLocalPlacementFromCandidates(e,n){return xd(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[i,a]of this.localPlacementsByLookupKey.entries()){if(!a)continue;let s=nd(i);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(a,e)&&r.push(a);}return n&&!r.some(i=>i.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,i]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,i);if(e?.placementsByLookupKey)for(let[r,i]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,i);if(e?.entitlementByHandle)for(let[r,i]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,i);if(e?.userContextByUserId)for(let[r,i]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,i);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 i of r.placements||[])this.placements.set(i.id,i);for(let[i,a]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,a);for(let[i,a]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,a);for(let[i,a]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,a);for(let[i,a]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,a);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 `${qM}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${DM}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${MM}:${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(([i,a])=>{!a||typeof a!="object"||!Number.isFinite(a.expiresAt)||a.expiresAt<=r||this.decisionCache.set(i,a);});}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,i])=>{!i||typeof i!="object"||this.interactionState.set(r,i);});}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,i]of Object.entries(n)){if(!i||typeof i!="object")continue;let a=Array.isArray(i.seenAt)?i.seenAt.filter(u=>Number.isFinite(u)&&u>0):[],s=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:a,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 he(n)&&typeof n.handle=="string"&&n.handle.trim()?n.handle.trim():""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),i=new Set;if(!r)return i;i.add(r);for(let a of e.plans??[]){let s=typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"";s===r&&i.add(s);}return i}ruleTargetsActivePlan(e,n){let i=(Array.isArray(e.targets)?e.targets:[]).filter(a=>he(a)&&a.kind==="plan");return i.length===0?true:i.some(a=>typeof a.id=="string"&&n.has(a.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,i=e.entitlements??[];for(let s of i){let u=typeof s.unique_handle=="string"?s.unique_handle:"";u&&r.set(u,u);}let a=e.entitlement_rules??[];for(let s of a){if(!he(s))continue;let u=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!u)continue;let _=typeof s.kind=="string"?s.kind:"";if(!(_==="usage_limit"||_==="credits"||_==="seat"))continue;let I=r.get(u)??"",k=typeof s.unit=="string"?s.unit:"",O=ad(k),A=O&&!sd(O)?O:xo(I||u);A&&(this.usageTokenPrefixByEntitlement.set(u,A),I&&this.usageTokenPrefixByEntitlement.set(I,A));let j=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(j)||j<=0||!this.ruleTargetsActivePlan(s,n))continue;let M=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(u,{limit:j,warningPercent:M}),I&&this.usageLimitByEntitlement.set(I,{limit:j,warningPercent:M});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=Ad({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:i=>this.usageThresholdForEntitlement(i)}),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 i=this.resolveContextPlanRaw(),a=String(i||"").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 nT({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:a,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,s]of Object.entries(r))a!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(n[a]=s);if(n.plan_name===void 0){let a=Ns(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;}let i=this.priceTokensForProviders();return n.plan_price===void 0&&(n.plan_price=i.plan_price),n.upgrade_plan_price===void 0&&(n.upgrade_plan_price=i.upgrade_plan_price),n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={..._a(this.userContext.usage),...this.usageBalances},n={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let a=this.usageTokenPrefixByEntitlement.get(r)??xo(r)??r,s=this.usageThresholdForEntitlement(r);n[a]={current:i,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}catalogEligibilityContext(e){let n=this.getConfiguredExportedConfig(),r={};for(let i of n?.segments??[])i.dimension_id&&(r[i.handle]=i.dimension_id);return {segmentIds:e??this.getTargeting().segmentIds,segmentDimensions:r}}eligiblePlansForSegments(e){let n=this.getConfiguredExportedConfig();return n?ru(n.plans??[],n.plan_variations??[],this.catalogEligibilityContext(e)):[]}eligibleAddonsForSegments(e){let n=this.getConfiguredExportedConfig();return n?iu(n.addons??[],n.addon_variations??[],this.catalogEligibilityContext(e)):[]}async getEligiblePlans(){!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode()&&await this.refreshExportedConfigSnapshot();let e=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():void 0;return this.eligiblePlansForSegments(e?.segments?.segmentIds)}async getEligibleAddons(){!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode()&&await this.refreshExportedConfigSnapshot();let e=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():void 0;return this.eligibleAddonsForSegments(e?.segments?.segmentIds)}formatEligiblePrice(e){return EM(e.price.price,e.price.currency,this.locale)}priceTokensForProviders(e){let n=this.eligiblePlansForSegments(e?.segments?.segmentIds),r=e?.plan?.currentPlanHandle||this.resolveContextPlanRaw(),i=e?.plan?.billingPeriod,a=C=>{let I=n.filter(k=>k.handle===C);return I.find(k=>k.price.billingPeriod===i)??I[0]},s=a(r||void 0),u=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig()),_=a(u.recommended_plan_handle||void 0);return {plan_price:s?this.formatEligiblePrice(s):e?.plan?.currentPlanPrice??"",upgrade_plan_price:_?this.formatEligiblePrice(_):""}}applyPriceTokens(e,n){let r=this.priceTokensForProviders(n),i=a=>typeof a=="string"?a.replace(/\{\{\s*(plan_price|upgrade_plan_price)\s*\}\}/g,(s,u)=>r[u]):"";return {...e,content:{...e.content,header:i(e.content.header),body:i(e.content.body),cta_label:i(e.content.cta_label),title:i(e.content.title),cta:i(e.content.cta)},...e.output?{output:{...e.output,content:Object.fromEntries(Object.entries(e.output.content).map(([a,s])=>[a,typeof s=="string"?i(s):s]))}}:{}}}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 Hd({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 i=this.resolveContextPlanRaw(),a=String(i||"").toLowerCase(),s=this.getTargeting(),u=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:_,effectivePlanHandle:C}=this.resolveReverseTrialGrants(r);return fc({handle:e,context:n,currentPlanHandle:a,segmentIds:u,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,..._!==void 0?{trialGrantedEntitlementHandles:_}:{},...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 a=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !a||a.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(a.entitlements_during_trial),effectivePlanHandle:a.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=Ns(r,this.userContext.plan),a=i??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],u=Array.from(new Set(s.flatMap(O=>(O.predicates??[]).map(A=>A.field)))).sort(),_={...n?.traits??{},...this.userContext.custom??{}};for(let[O,A]of Object.entries(this.userContext.entitlements??{}))_[O]===void 0&&(_[O]=A);i&&_.plan_name===void 0&&(_.plan_name=i),a&&_.plan===void 0&&(_.plan=a);let C={...n?.usage??{},..._a(this.userContext.usage),...this.usageBalances};for(let[O,A]of Object.entries(C))_[O]===void 0&&(_[O]=A);let I={};for(let[O,A]of Object.entries(_))(typeof A=="string"||typeof A=="number"||typeof A=="boolean")&&(I[O]=A);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 A=this.configuredSegmentsById.get(O)??s.find(M=>M.handle===O);if(!A){this.segmentMembershipBySegmentId.delete(O);continue}let j=yc([A],I).length>0;this.segmentMembershipBySegmentId.set(O,j);}this.dirtySegmentIds.clear();}let k=s.length>0?s.filter(O=>this.segmentMembershipBySegmentId.get(O.handle)===true).map(O=>O.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:k,traits:_,...a?{plan:a}:{},...Object.keys(C).length>0?{usage:C}:{},configuredSegments:s,configuredTraitFields:u}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),a=this.getPolicy(),s=this.getConfiguredExportedConfig(),u=new Set(r.segmentIds),_=r.configuredSegments.map(ve=>{let It=Array.isArray(ve.predicates)?ve.predicates.map(wn=>QM(wn,r.traits)):[],gn=It.length>0?It.every(wn=>wn.matched):u.has(ve.handle);return {segmentId:ve.handle,...ve.name?{segmentName:ve.name}:{},matched:gn,predicates:It}}),C=new Map,I=new Map;if(Array.isArray(s?.entitlements))for(let ve of s.entitlements){let It=Xn(ve.unique_handle),gn=It;gn&&It&&C.set(gn,It);let wn=Xn(ve.type);gn&&wn&&I.set(gn,wn);}let k=new Map;if(Array.isArray(s?.plans))for(let ve of s.plans){let It=Xn(ve.unique_handle),gn=It;gn&&It&&k.set(gn,It);}let A=(Xn(r.traits.plan_handle,r.plan)??"").toLowerCase(),j=new Map;if(Array.isArray(s?.segments))for(let ve of s.segments){let It=Xn(ve.handle),gn=Xn(ve.dimension_id);It&&gn&&j.set(It,gn);}let M=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((ve,It)=>{let gn=Xn(ve.id)??`entitlement_rule_${It}`,wn=Xn(ve.entitlement_id),lt=wn?C.get(wn):void 0,Nn=Array.isArray(ve.targets)?ve.targets.filter(ct=>ct.kind==="plan").map(ct=>ct.id):[],kr=Nn.map(ct=>k.get(ct)??ct),Wn=Array.isArray(ve.segment_ids)?ve.segment_ids.filter(ct=>typeof ct=="string"):[],_n=Xn(ve.kind),un=!A||Nn.some(ct=>ct.toLowerCase()===A),Vn=XM(Wn,u,j),Tn=un&&Vn,bi=lt?i[lt]:wn?i[wn]:void 0,Dt=Tn?bi?.status??"unknown":"unknown",jn;if(Tn)switch(_n){case "feature":jn=ve.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let ct=Xn(ve.tier_name);jn=ct?`unlocks ${ct} tier`:"unlocks capability tier";break}case "usage_limit":{let ct=typeof ve.limit_value=="number"?ve.limit_value:void 0,cr=Xn(ve.unit)??"",Mi=Xn(ve.period_scope)??"",xi=Mi?` / ${Mi.replace("per_","")}`:"";jn=ct!=null?`sets limit to ${ct.toLocaleString()}${cr?` ${cr}`:""}${xi}`:"sets usage limit";break}case "credits":{let ct=ve.allowance_value,cr=typeof ct=="number"?ct:void 0,Mi=Xn(ve.unit)??"credits",xi=Xn(ve.reset_period)??"",hn=xi?` / ${xi.replace("per_","")}`:"";jn=cr!=null?`grants ${cr.toLocaleString()} ${Mi}${hn}`:"grants credit allowance";break}case "seat":{let ct=ve.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:kr,planIds:Nn,...Wn.length>0?{segmentIds:Wn}:{},matchesPlan:un,matchesSegment:Vn,matched:Tn,outcome:Dt,...jn?{outcomeDescription:jn}:{},...bi?.reason?{reason:bi.reason}:{}}}):[],oe=Xn(n.output?.output_id),Z=this.placements.get(e.placementId),ge=Xn(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 ve of s.placements){if(!ve||typeof ve!="object")continue;let It=Xn(ve.id)??"",gn=Xn(ve.name)??"";if(J.has(It))continue;let wn=Xn(n.output?.rule_id);if(wn&&It===wn){J.add(It),ne.push(ve);continue}if(ge&&(It===ge||gn===ge||It===`pl_${ge}`||gn===`pl_${ge}`)){J.add(It),ne.push(ve);continue}De.length>0&&(ve.payloads??[]).some(kr=>(kr.surfaces??[]).some(_n=>{let un=Xn(_n.template_id);return un?De.includes(un):false}))&&(J.add(It),ne.push(ve));}let at=ne.flatMap(ve=>(ve.payloads??[]).map(gn=>{let wn=gn.target,lt=wn?.plan_ids??[],Nn=lt.map(Dt=>k.get(Dt)??Dt),kr=wn?.segment_chips??[],_n=(gn.surfaces??[]).map(Dt=>Xn(Dt.template_id)).filter(Dt=>typeof Dt=="string"),un=lt.length===0||!A||lt.some(Dt=>Dt.toLowerCase()===A),Vn=kr.length===0||kr.some(Dt=>u.has(Dt)),Tn="active",bi=Tn==="active"&&un&&Vn;return {payloadId:String(gn.id??""),placementId:String(ve.id??""),placementName:String(ve.name??""),status:Tn,planIds:lt,planScopes:Nn,segmentChips:kr,surfaceTemplateIds:_n,matchesPlan:un,matchesSegment:Vn,eligible:bi,selected:!!oe&&oe===String(gn.id??"")}})),Pn=n.output?this.extractPlacementCapPolicies(n.output).flatMap(ve=>ve.rules.length===0&&ve.cooldownMs===void 0?[]:ve.rules.length===0?[{count:0,period:"session",cooldownMs:ve.cooldownMs}]:ve.rules.map(It=>({count:It.count,period:It.period,...ve.cooldownMs!==void 0?{cooldownMs:ve.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:a,entitlements:i,segments:_,entitlementRules:M,eligiblePayloads:at,placementRules:An}}usageThresholdForEntitlement(e){return dd(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return wd(e,n,i=>this.usageThresholdForEntitlement(i)).map(i=>this.emitTrigger(i.type,{entitlement_handle:i.entitlement_handle,current_usage:i.current_usage,usage_limit:i.usage_limit,usage_percent:i.usage_percent,threshold:i.threshold}))}deriveTrialTriggerStage(e){return jd(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=Nr();return this.persistentStore.setItem(e,r),r}catch{return Nr()}}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(oT,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...a)=>{r(...a),n();});let i=e.replaceState.bind(e);e.replaceState=((...a)=>{i(...a),n();}),window.addEventListener("popstate",n),window.addEventListener(oT,a=>{let s=a.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 Rd(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:uc(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?Cp():{},...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(!he(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=hT(e),i=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof i=="string"&&i.trim()&&(this.placements.has(i)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:i}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(ls,{source_event_type:e,warning_count:n.length,warning_codes:n.map(i=>i.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:he(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?Cp():{},...this.pageContext},i=r.url||(Yr()?window.location.href:""),a=(()=>{try{return new URL(i).pathname}catch{return Yr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:a,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:uc(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===lT?{}:{...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>=Om.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>=Om.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((i,a)=>i+(a.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(),i=r?.format_version!=null?String(r.format_version):void 0,a=i?`${this.tenantId}:${i}`:this.tenantId,s=(await cT(a)).slice(0,64),_={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Nr(),config_hash_id:s,sdk_version:ib,runtime_mode:this.runtimeMode,...i?{bundle_version:i}:{},...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",FM),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(_),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(k=>{let O=Sy(k);return n+=O.redactions,O.value}),i=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&i&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let a=Nr(),s=this.getConfiguredExportedConfig()?.playbook_version_id,u=r.map(k=>{let O=k.user_id||k.anonymous_id,A=Yd(this.userContext.account_id||O),j=Gd({level:k.level,message:k.message,path:k.path,url:k.url,page_title:k.page_title,session_id:k.session_id,anonymous_id:k.anonymous_id,tags:k.tags,traits:k.identity.traits??null,payload:k.properties,source:VM});return n+=j.redactions+(A.redacted?1:0),{environment_id:this.environmentId,user_id:O,account_id:A.value,event_name:pc(k.type).slice(0,120),event_ts:k.event_time,properties:JSON.stringify(j.value),...KM(k.properties),...JM(k.properties),origin:YM(k.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:_f.next(),request_id:Nr(),tenant_id:k.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let _=this.endpointFor("ingestEvents",UM),C={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":a},body:JSON.stringify({events:u}),keepalive:true};(await yf(()=>fetch(_,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 i of r)try{Promise.resolve(i.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 i=pc(e),a=this.toEventEnvelope(i,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],u=[a];if(s.length>0&&u.push(this.buildValidationWarningEvent(i,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:i,properties:a}=Wd(e,n);await this.capture(i,a,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.unregisterServerActionResolvers(),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 i=he(n)?n:{};await this.capture(e,{semantic:true,payload:i},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),i={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},a=await this.fetchUserContext(i.id||""),s=new Set(r.segmentIds||[]),u=new Set(a.segmentIds||[]),_=Array.from(u).filter(I=>!s.has(I)),C=Array.from(s).filter(I=>!u.has(I));for(let I of _)await this.emitSemantic("segment_enrolled",{segment_id:I,user_id:i.id??null});for(let I of C)await this.emitSemantic("segment_unenrolled",{segment_id:I,user_id:i.id??null});if(n){let I=r.usage||{},k={...I,...this.usageBalances},O=this.evaluateUsageThresholdCrossings(I,k);await Promise.all(O);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(lT,{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(Cp());}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,i=Date.now()+r;for(let a of e.decisions??[]){if(!a.output)continue;let s=[this.tenantId,a.slot_id??a.entitlement_handle??a.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),u=he(a.output?.content)?a.output.content:{};this.decisionCache.set(s,{value:{placementId:a.slot_id??a.entitlement_handle??a.placement_handle??"unknown",requestId:e.request_id,visible:a.visible,decisionSource:"cache",reasonCodes:a.reason_codes??[],content:Ds(String(u.header??""),String(u.body??""),String(u.cta_label??"")),output:a.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[a,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(a,{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 yd({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:cT,randomHex:Ef})}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:he(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=Nr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),i=ZM(e.placementScopeKey||e.id||e.name),a={...he(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},s={name:e.name,slug:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:a},u={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},_=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:u,body:JSON.stringify(s)});if(_.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(_.status!==404)throw new Error(`surface_slot_upsert_failed:${_.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=bo(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),a=[];r||a.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||a.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!he(e.metadata)&&a.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),u={id:s,route:n,name:i||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...he(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},_=this.placements.get(s),C=_?this.stableStringify(_):null,I=this.stableStringify(u);return (!_||C!==I)&&(this.placements.set(s,u),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(u),a.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",a,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:i||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;if(!this.hasEndpointOverride("placementTypes")){Ls()&&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(a=>tU(a)).filter(a=>a!==null);if(n.length===0)return;let r=Nr(),i=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(!i.ok)throw new Error(`persist_placement_types_failed:${i.status}`)}stableStringify(e){return mc(e)}decisionCacheKey(e,n){return bd({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 py({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 i=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:i,value:n}),this.persistDecisionCache();}suppressionForState(e){return dy(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return lu(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,i=this.placementCapKey(e),a=this.presentationCapsByKey.get(i),s=Pd(e,i,a,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(i,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 i=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],i],suppressionReason:i}}normalizeDecisionFromResponse(e,n,r,i){return Sd(e,n,r,i)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=Nr();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:Ds("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),a=this.suppressionForState(this.interactionState.get(i));if(a.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:a.reason?[a.reason]:[],suppressionReason:a.reason,content:Ds(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,u=await this.localRuntime?.getContext?.(),_=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(u||_)&&(s=this.stableStringify({legacyCtx:u??{},providerCtx:_??{}}));let C=this.decisionCacheKey(e,s),I=this.readDecisionCache(C);if(I)return this.gateDecisionByCaps(I,{tick:false});{let O=this.getOrBuildPlacementResolver();if(O){let j={...u,..._?{__providers:_}:{}},M=this.applyPriceTokens(this.gateDecisionByCaps(await O(e,n,j)),_);return this.localDecisionsByPlacementId.set(e.placementId,M),this.writeDecisionCache(C,M,e.ttlMs),this.persistLocalRuntimeState(),M}let A=this.localDecisionsByPlacementId.get(e.placementId);if(A){let j=this.gateDecisionByCaps({...A,decisionSource:"fallback"});return this.writeDecisionCache(C,j,e.ttlMs),this.persistLocalRuntimeState(),j}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let k={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:Ds(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),k}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 i=await this.getPlacementDecision(r),a=this.decisionCacheKey(r);this.writeDecisionCache(a,i,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let a=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(a);if(s){s.placementIds.push(r.placementId);continue}n.set(a,{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 i=e.filter(a=>r.placementIds.includes(a.placementId)&&a.userId===r.userId);await Promise.allSettled(i.map(a=>this.getPlacementDecision(a)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=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(i.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let u=Number(i.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let u=Number(i.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(i.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",LM),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Nr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",NM),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Nr()},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,i=n.treatmentId,a=n.metadata??{},s=Number(a.cooldown_ms),u=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,u);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,i);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,i,void 0,void 0,u);else if(n.interactionType==="suppress"){let I=Number(a.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,a,Number.isFinite(I)&&I>0?I:void 0);}let _=n.metadata??{},C=typeof _.decision_id=="string"?_.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:_},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),i=Nr();if(this.isDisabledByProviderFailure()){let u=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:u.content}}if(this.isLocalOnlyMode()){let u=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:u?"remote":"fallback",content:Ds(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:i,decisionSource:"fallback",content:Ds("Placement not found","Register the placement before requesting content.","Register placement")};let a=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:a});return {placementId:e,requestId:i,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??Ds(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}rejectLegacyPlanId(e,n){if(!he(n)||!("id"in n))return n;let{id:r,...i}=n,a=typeof i.handle=="string"&&i.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). `+(a?"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(ls,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:a?"1":"0"});}catch{}}return i}reportUnrecognizedContextKeys(e,n,r,i){if(n.length===0)return;let a=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(a))return;this.reportedUnrecognizedContextKeys.add(a);let s=i?` ${i}`:"";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(ls,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=tu(e,Nr);return n&&he(e)&&typeof e.decision_id!="string"&&this.capture(ls,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return ud(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=Ha(e);if(r&&!pT.has(r))return this.capture(ls,{reason:`getPlacement called with unknown componentType: ${String(r)}`,slot_id:n??null}),null;Nr();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 a=this.localPlacementForConfig(e);return a&&this.applyPlacementCapsIfNeeded(a).allowed?a: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 a=this.localRuntime?.resolvers?.checkEntitlement;if(a){let s=await a(e,n);return this.localEntitlementsByHandle.set(e,s),this.persistLocalRuntimeState(),s}}else await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let i=this.localEntitlementsByHandle.get(e);return i||(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=_a(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(a=>!(a in n));if(r.length===0)return;let i=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(i)){this.reportedUnrecognizedContextKeys.add(i),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(ls,{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 i=new Set(r.map(u=>he(u)&&typeof u.unique_handle=="string"?u.unique_handle:null).filter(u=>u!==null));if(i.size===0)return;let a=e.filter(u=>!i.has(u));if(a.length===0)return;let s=`usage:unmatched:${[...a].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: ${a.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: ${[...i].sort().join(", ")}.`);try{this.capture(ls,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:a.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=Nr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let a=await r(e);return this.localUserContextsByUserId.set(e,a),this.persistLocalRuntimeState(),a}let i=this.localUserContextsByUserId.get(e);return i||{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 i=await r.json(),a={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(s=>typeof s=="string"):[],traits:he(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:he(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,a),this.persistLocalRuntimeState(),a}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new qc,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 _=await this.mintClientSessionToken();if(_){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(_);}finally{this.retriedClientContextAfterMint=!1;}}}return}let i=await r.json(),a=this.mapClientSafeContext(i);if(Object.keys(a).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:a.trial?{in_trial:a.trial.in_trial,state:a.trial.state,days_remaining:a.trial.days_remaining}:void 0,payment_at_risk:a.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:a.trial??null,plan_handle:a.plan_handle??null,plan:a.plan??null})),u=await kd(s)+`:${a.payment_at_risk===!0?1:0}`;if(u===this.lastServerContextHash)return;this.lastServerContextHash=u,this.applyServerContextPatch(a);}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={},i=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);i&&(n.trial={in_trial:i==="active"||i==="running_out",state:i,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let a=e.plan?.handle;return typeof a=="string"&&a.length>0&&(n.plan_handle=a,n.plan={handle:a,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:a}),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,i){await this.impressionHistory.recordImpression(e,n,r,i);}async recordDismissal(e,n,r,i,a){await this.impressionHistory.recordDismissal(e,n,r,i,a);}async recordClickThru(e,n,r,i,a){await this.impressionHistory.recordClickThru(e,n,r,i,a);}async recordConversion(e,n,r,i){await this.impressionHistory.recordConversion(e,n,r,i);}async getTrialStatus(){let e=Nr();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(),i=this.validateTrialStatusShape(r);return this.localTrialStatus=i,await this.evaluateTrialLifecycleTriggers(i),this.persistLocalRuntimeState(),i}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),i=n?.nowIso??new Date().toISOString(),{trial:a}=Gm({...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:i,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=a??{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:he(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],i=e.includeProviderHandlers??true,a=Rp(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...a};if(i&&this.providerRegistry.has("cta"))try{let I=await this.providerRegistry.resolveAll();he(I.cta)&&he(I.cta.handlers)&&Object.assign(s,I.cta.handlers);}catch{}let u=[],_=0;for(let I of r){let k=he(I)?I:{},O=typeof k.action_type=="string"?k.action_type.trim():"";if(!O){u.push({actionType:"unknown",reason:"missing_action_type",...typeof k.id=="string"?{uiPathId:k.id}:{},...typeof k.name=="string"?{name:k.name}:{}});continue}if(typeof s[O]=="function"){_+=1;continue}u.push({actionType:O,reason:"missing_resolver",...typeof k.id=="string"?{uiPathId:k.id}:{},...typeof k.name=="string"?{name:k.name}:{}});}let C={valid:u.length===0,totalUiPaths:r.length,resolvedUiPaths:_,issues:u};if(!C.valid&&e.throwOnMissing){let I=C.issues.filter(O=>O.reason==="missing_resolver").map(O=>O.actionType),k=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).${k}`)}return C}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=he(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],i=0;for(let u of n){let C=(he(u)?u:{}).action_type,I=typeof C=="string"?C.trim():"";if(!I){i+=1;continue}typeof this.uiPathResolvers[I]!="function"&&r.push(I);}if(i===0&&r.length===0)return;let a=Array.from(new Set(r)),s=[];a.length>0&&s.push(`missing resolvers for action_type: ${a.join(", ")}`),i>0&&s.push(`content_ui_paths with missing action_type: ${i}`),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}kM.test(e)&&wM(`[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,i=he(n)?n:{};he(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(a=>!RM.has(a)),uT),i.usage&&(this.usageBalances={...this.usageBalances,..._a(i.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:i.account_id,email:i.email,plan_handle:typeof i.plan_handle=="string"&&i.plan_handle.trim()!==""?i.plan_handle.trim():void 0,plan:i.plan,usage:i.usage,entitlements:i.entitlements,custom:i.custom,personalization:i.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(i.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?mT():{},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 i=await this.checkEntitlement(e,r);return i.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:i}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:i.reason??null},{immediate:false}),{ran:false,entitlement:i})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},i=Object.entries(r).filter(([a])=>sT.has(a));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(a=>!sT.has(a)),dT,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),i.length>0&&this.setUserContext(Object.fromEntries(i)),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});}};w(Om,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var Cf=Om;function Rf(t){let e=eU(t),n=new Cf(e);if(!e.provider)return n;let r=(I,k)=>{try{return typeof I=="function"?I(e):I}catch(O){return console.warn(`[RevTurbine] Provider factory failed at chain index ${k}.`,O),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((I,k)=>r(I,k+1))].filter(I=>I!==null);if(i.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let a=async(I,k,O)=>{let A=[];for(let j=0;j<i.length;j+=1){let oe=i[j][I];if(oe){A.push(j);try{return await oe(...k)}catch(Z){let ge=i.slice(j+1).some(De=>typeof De[I]=="function");console.warn(j===0&&ge?`[RevTurbine] Primary provider ${I} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${I} failed at chain index ${j}.`,Z);}}}return A.length===0||n.disableForProviderFailure(`provider_${I}_chain_failed`),O()},s=n.getPlacement.bind(n),u=n.checkEntitlement.bind(n),_=n.persistPlacementTypes.bind(n),C=n.identify.bind(n);return n.getPlacement=async I=>a("getPlacement",[I],()=>s(I)),n.checkEntitlement=async(I,k)=>a("checkEntitlement",[I,k],()=>u(I,k)),n.persistPlacementTypes=async I=>a("persistPlacementTypes",[I],()=>_(I)),n.identify=(I,k)=>{let O=0;for(let A=0;A<i.length;A+=1){let j=i[A];if(j.identify){O+=1;try{j.identify(I,k);return}catch(M){let oe=i.slice(A+1).some(Z=>typeof Z.identify=="function");console.warn(A===0&&oe?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${A}.`,M);}}}if(O>0){n.disableForProviderFailure("provider_identify_chain_failed"),C(I,k);return}C(I,k);},n}var Ep={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function xf(t){return typeof t=="string"&&t.trim().length>0}function eU(t){return Ap(t.localRuntime)!==void 0?{...t,tenantId:xf(t.tenantId)?t.tenantId:Ep.tenantId,apiKey:xf(t.apiKey)?t.apiKey:Ep.apiKey,endpoint:xf(t.endpoint)?t.endpoint:Ep.endpoint,mode:t.mode??Ep.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function tU(t){if(!he(t))return null;let e=(_,C)=>String(_??"").trim().slice(0,C),n=e(t.id,256),r=e(t.label,256),i=e(t.description,1024),a=e(t.surfaceType,64);if(!n||!r||!i||!pT.has(a))return null;let s=Number(t.priority),u=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:i,surfaceType:a,priority:u}}typeof window<"u"&&(window.RevTurbine={init:Rf});var ua=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 Bl(t){return t?{id:t.id??ua.id,name:t.name??ua.name,version:t.version??ua.version,colors:{...ua.colors,...t.colors},typography:{...ua.typography,...t.typography},shape:{...ua.shape,...t.shape},shadows:{...ua.shadows,...t.shadows}}:{...ua}}var nU="revturbine:theme";function kf(t){return `${nU}:${t}`}function rU(t,e){try{let n=e.getItem(kf(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function iU(t,e,n){try{n.setItem(kf(t),JSON.stringify(e));}catch{}}function aU(t,e){let n=e??fs();try{n.removeItem(kf(t));}catch{}}async function Af(t,e){let{tenantId:n,endpoint:r,apiKey:i,base:a}=t,s=t.storage??fs(),u=rU(n,s),_=Bl({...a,...u});return t.onOverride?.(u),sU(r,n,i).then(C=>{C&&(u?.version&&C.version===u.version||(iU(n,C,s),t.onOverride?.(C),e?.(Bl({...a,...C}))));}).catch(()=>{}),_}async function sU(t,e,n){let r=t.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,a=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":i}});if(!a.ok)return null;let s=await a.json();return typeof s!="object"||s===null?null:s}var wp=class{constructor(e,n){w(this,"sdk");w(this,"options");w(this,"listeners",new Set);w(this,"_placementId","");w(this,"_decision",null);w(this,"_isLoading",false);w(this,"_error","");w(this,"_impressionTracked",false);w(this,"_loadSeq",0);w(this,"_rendered",false);w(this,"_exposed",false);w(this,"_exposureBasis",null);w(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 i=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:i?.message_block_handle,messageBlockId:i?.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 i=this.slotContext();this.emitSlotEvent("slot_evaluated",i),this.emitSlotEvent(n,i);}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 i=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=i,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let a=this.exposureMode;return a==="legacy_resolution"?this.fireImpression("legacy_resolution"):a==="viewport"&&!bf.supported&&this.fireImpression("render_fallback"),i}catch(i){return r===this._loadSeq&&(this._error=i instanceof Error?i.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 i=this._decision?.output?.decision_id??null,a=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:a?.message_block_handle,messageBlockId:a?.message_block_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:i?{...n,decision_id:i}: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 qm(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var jp=class{constructor(e,n){w(this,"sdk");w(this,"options");w(this,"listeners",new Set);w(this,"_isLoading",false);w(this,"_error",null);w(this,"_result",null);w(this,"_gatedPlacement",null);w(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:qm(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return qm(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:i}=this.options;this._isLoading=true,this._error=null,this.notify();try{let a=await this.sdk.checkEntitlement(e,n);if(this._result=a,this.emitGateEvaluated(e,a),!r||!qm(a))this._gatedPlacement=null;else if(a.placement)this._gatedPlacement=a.placement;else {let s=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=s;}return a}catch(a){return this._error=a instanceof Error?a.message:String(a),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:qm(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();}},Op=class{constructor(e,n){w(this,"sdk");w(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 wp(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 jp(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 oU(t){let{bootstrapPlacements:e,...n}=t,r=n,i=Rf(r),a=r.user;a&&typeof a=="object"&&a.id&&i.identify(a.id,a);let s=ua,_=Ap(r.localRuntime)?.theme;if(_&&typeof _=="object"?s=Bl(_):s=await Af({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let C=i.getUserContext().user_id,I=[];for(let k of e){let O=await i.registerPlacement(k.placement),A=k.userId||C;A&&I.push({placementId:O,userId:A,contextMode:k.contextMode,overrides:k.overrides,traits:k.traits,ttlMs:k.ttlMs});}I.length>0&&await i.bootstrapPlacementDecisions(I);}return new Op(i,s)}var lU=/\{[^{}]+\}/g,cU=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function mU(){return Math.random().toString(36).slice(2,11)}function vT(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:s,headers:u,requestInitExt:_=void 0,...C}={...t};_=cU()?_:void 0,e=yT(e);let I=[];async function k(O,A){let{baseUrl:j,fetch:M=r,Request:oe=n,headers:Z,params:ge={},parseAs:De="json",querySerializer:ne,bodySerializer:J=a??pU,pathSerializer:at,body:Pn,middleware:An=[],...ve}=A||{},It=e;j&&(It=yT(j)??e);let gn=typeof i=="function"?i:fT(i);ne&&(gn=typeof ne=="function"?ne:fT({...typeof i=="object"?i:{},...ne}));let wn=at||s||uU,lt=Pn===void 0?void 0:J(Pn,_T(u,Z,ge.header)),Nn=_T(lt===void 0||lt instanceof FormData?{}:{"Content-Type":"application/json"},u,Z,ge.header),kr=[...I,...An],Wn={redirect:"follow",...C,...ve,body:lt,headers:Nn},_n,un,Vn=new oe(dU(O,{baseUrl:It,params:ge,querySerializer:gn,pathSerializer:wn}),Wn),Tn;for(let jn in ve)jn in Vn||(Vn[jn]=ve[jn]);if(kr.length){_n=mU(),un=Object.freeze({baseUrl:It,fetch:M,parseAs:De,querySerializer:gn,bodySerializer:J,pathSerializer:wn});for(let jn of kr)if(jn&&typeof jn=="object"&&typeof jn.onRequest=="function"){let ct=await jn.onRequest({request:Vn,schemaPath:O,params:ge,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 M(Vn,_);}catch(jn){let ct=jn;if(kr.length)for(let cr=kr.length-1;cr>=0;cr--){let Mi=kr[cr];if(Mi&&typeof Mi=="object"&&typeof Mi.onError=="function"){let xi=await Mi.onError({request:Vn,error:ct,schemaPath:O,params:ge,options:un,id:_n});if(xi){if(xi instanceof Response){ct=void 0,Tn=xi;break}if(xi instanceof Error){ct=xi;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(ct)throw ct}if(kr.length)for(let jn=kr.length-1;jn>=0;jn--){let ct=kr[jn];if(ct&&typeof ct=="object"&&typeof ct.onResponse=="function"){let cr=await ct.onResponse({request:Vn,response:Tn,schemaPath:O,params:ge,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 bi=Tn.headers.get("Content-Length");if(Tn.status===204||Vn.method==="HEAD"||bi==="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"&&!bi){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,A,j){return k(A,{...j,method:O.toUpperCase()})},GET(O,A){return k(O,{...A,method:"GET"})},PUT(O,A){return k(O,{...A,method:"PUT"})},POST(O,A){return k(O,{...A,method:"POST"})},DELETE(O,A){return k(O,{...A,method:"DELETE"})},OPTIONS(O,A){return k(O,{...A,method:"OPTIONS"})},HEAD(O,A){return k(O,{...A,method:"HEAD"})},PATCH(O,A){return k(O,{...A,method:"PATCH"})},TRACE(O,A){return k(O,{...A,method:"TRACE"})},use(...O){for(let A of O)if(A){if(typeof A!="object"||!("onRequest"in A||"onResponse"in A||"onError"in A))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");I.push(A);}},eject(...O){for(let A of O){let j=I.indexOf(A);j!==-1&&I.splice(j,1);}}}}function qp(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 bT(t,e,n){if(!e||typeof e!="object")return "";let r=[],i={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(qp(u,e[s],n));}let a=r.join(i);return n.style==="label"||n.style==="matrix"?`${i}${a}`:a}function xT(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let a={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(u=>encodeURIComponent(u))).join(a);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]||"&",i=[];for(let a of e)n.style==="simple"||n.style==="label"?i.push(n.allowReserved===true?a:encodeURIComponent(a)):i.push(qp(t,a,n));return n.style==="label"||n.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function fT(t){return function(n){let r=[];if(n&&typeof n=="object")for(let i in n){let a=n[i];if(a!=null){if(Array.isArray(a)){if(a.length===0)continue;r.push(xT(i,a,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof a=="object"){r.push(bT(i,a,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(qp(i,a,t));}}return r.join("&")}}function uU(t,e){let n=t;for(let r of t.match(lU)??[]){let i=r.substring(1,r.length-1),a=false,s="simple";if(i.endsWith("*")&&(a=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(s="label",i=i.substring(1)):i.startsWith(";")&&(s="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let u=e[i];if(Array.isArray(u)){n=n.replace(r,xT(i,u,{style:s,explode:a}));continue}if(typeof u=="object"){n=n.replace(r,bT(i,u,{style:s,explode:a}));continue}if(s==="matrix"){n=n.replace(r,`;${qp(i,u)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(u)}`:encodeURIComponent(u));}return n}function pU(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 dU(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 _T(...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[i,a]of r)if(a===null)e.delete(i);else if(Array.isArray(a))for(let s of a)e.append(i,s);else a!==void 0&&e.set(i,a);}return e}function yT(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function gU(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),vT({baseUrl:t.baseUrl,headers:e})}var wf=class extends Error{constructor(n,r){super(r);w(this,"status",n);this.name="ApiError";}};var jf=class extends _y{constructor(n){let{exportedConfig:r,environmentId:i,...a}=n,s=ha(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:i??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let u=fs(n.storage),_=new vu({storage:u,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...a,exportedConfig:s,storage:u,impressionStore:_});w(this,"_hydratePromise");let C=n.autoHydrate??true;this._hydratePromise=C?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};var Dp=class extends Error{constructor(n,r,i){super(`Experiment "${n}" requests assignment unit "${r}", but this native provider is configured for "${i}"; refuse launch instead of substituting an assignment unit.`);w(this,"experimentHandle");w(this,"requestedUnit");w(this,"subjectUnit");this.name="UnsupportedExperimentAssignmentUnitError",this.experimentHandle=n,this.requestedUnit=r,this.subjectUnit=i;}};function hU(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 ST(t){return hU(t)/4294967296}function fU(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 PT(t,e,n){if(!t)return;let r=fU(n.variants);if(r.length===0)return;let{exposure:i}=n;if(i!==void 0&&(!(i>0)||i<1&&ST(`${t}:${e}:exposure`)>=i))return;let a=r.reduce((u,[,_])=>u+_,0),s=ST(`${t}:${e}:variant`)*a;for(let[u,_]of r)if(s-=_,s<0)return u;return r[r.length-1][0]}function TT(t){let e={};for(let i of t.variants)!Number.isFinite(i.weight)||i.weight<=0||(e[i.variant_id]=(e[i.variant_id]??0)+i.weight);let n=Object.values(e).reduce((i,a)=>i+a,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 i=r.assignment_unit??"user";if(i!==e)throw new Dp(r.handle,i,e);n[r.handle]=TT(r);}return IT({experiments:n,subject:t.subject})}function IT(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let i={};for(let[a,s]of Object.entries(e)){let u=PT(r,a,s);u!==void 0&&(i[a]=u);}return {assignments:i}}}}var yU=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function vU(t){let e={};for(let[n,r]of Object.entries(t.properties))e[yU.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 Of=class{constructor(e){w(this,"name");w(this,"handler");w(this,"transform");w(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,i=vU(n);if(this.transform){let a=this.transform(r,i);if(a===null)continue;r=a.eventName,i=a.properties;}try{this.handler(r,i);}catch{}}}};function CT(t){let e=new Of(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function ET(t){let{posthog:e,filter:n,transform:r,name:i}=t;return CT({name:i??"posthog",filter:n,transform:r,handler:(a,s)=>{e.capture(a,s);}})}function bU(t){let{posthog:e,filter:n,transform:r,name:i,syncIdentity:a=false,syncAccountGroup:s=false,mirrorNavigation:u=false}=t,_=i??"posthog",C=ET({posthog:e,filter:n,transform:r,name:_}),I=null,k=null,O=A=>{try{if(a){let j=A.user_id;j&&j!==I?(e.identify?.(j,A.identity.traits),I=j):!j&&I!==null&&(e.reset?.(),I=null);}if(s){let j=A.identity.traits.account_id;typeof j=="string"&&j&&j!==k&&(e.group?.("account",j),k=j);}u&&A.type==="page_view"&&e.capture("$pageview",{$current_url:A.url});}catch{}};return {domain:"events",async resolve(){let j=(await C.resolve())?.consumers??[];return {consumers:[{name:_,consume(oe){for(let Z of oe)O(Z);for(let Z of j)Z.consume(oe);}}]}}}}var xU=["banner_placement"],SU=["banner_placement","in_page_card"],PU=["toast_message"],TU=["modal_overlay"];var IU=["banner_placement","in_page_card","usage_counter","button"],CU=["modal_overlay","inline_gate_message"],EU=["toast_message","modal_overlay","banner_placement"];function RU(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Mp=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);w(this,"status",n);w(this,"requestId",r);this.name="RevTurbineClientSessionError";}},Up=class{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"endpoint");w(this,"defaultTtlSeconds");w(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=RU(),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 Mp(r.status,n);let i=await r.json();return {client_token:i.client_token,expires_at:i.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 RT=z.enum(["session","day","week","month"]),kT=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(kT),cap:z.object({count:z.number().int().min(1),period:RT})});z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var jT=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(jT).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 OU=/^[a-z0-9._]{1,100}$/,Ms={Persisted:"persisted",Transient:"transient"},Ba={Internal:"internal",External:"external"},pa={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},qU="readOnly";function Ri(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[qU]===true||(e[n]=r);}return z.object(e)}function ii(t){let e=Ri(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(OU)}):e}var {Unrestricted:_i}=pa,{Transient:yi,Persisted:MU}=Ms,{Internal:fo,External:cs}=Ba;z.object({page:z.coerce.number().int().min(1).default(1).meta(_i),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(_i)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var Gn=z.object({created_at:z.string().datetime().meta({..._i,readOnly:true}),updated_at:z.string().datetime().meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Ln=z.object({id:z.string().min(1).meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Yn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var UU=["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"],FU=z.enum(UU).meta({id:"ComponentType","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),Fp=FU,LU=["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"];z.enum(LU).meta({id:"DefaultTemplateIds","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var qT=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});var Lp=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs}),$l=z.string().regex(/^[a-z]{3}$/,"Currency must be a lowercase ISO 4217 code").default("usd").meta({id:"Currency","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":cs});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var ms=z.string().min(1).max(200),Er=z.string().min(1).max(100),Np=z.string().max(500).optional(),Di=z.record(z.string(),z.unknown()).default({}),_o=z.number().int().min(10).max(100).multipleOf(10),Vp=z.string().datetime().nullable().default(null),fr=z.object({environment_id:z.string().min(1).default("production").meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo}),Rr=z.object({playbook_version_id:z.string().nullable().default(null).meta(_i),is_current:z.boolean().default(true).meta({..._i,readOnly:true}),is_deleted:z.boolean().default(false).meta({..._i,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({..._i,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({..._i,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({..._i,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo}),BU=Ln.merge(Gn).merge(Yn).merge(fr).extend({handle:Er.meta({..._i,readOnly:true}),active:z.boolean().default(true).meta({..._i,readOnly:true})});function ai(t){return BU.meta({id:t,"x-revturbine-schema-persistence":MU,"x-revturbine-schema-exposure":fo})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":fo});var DT=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":yi,"x-revturbine-schema-exposure":cs});new Set(Fp.options);var MT={Named:"named",Minted:"minted"},UT="x-revturbine-schema-identity";function da(t="handle"){return {[UT]:{kind:MT.Named,handleField:t}}}function ga(t="handle"){return {[UT]:{kind:MT.Minted,handleField:t}}}var xn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Xi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},WU="x-revturbine-context",JU="x-revturbine-in-config",ZU="x-revturbine-sdk-input",QU="x-revturbine-source",XU="x-revturbine-deprecation",eF={[xn.Playbook]:Xi.Customer,[xn.Branding]:Xi.Customer,[xn.Billing]:Xi.Stripe,[xn.Metering]:Xi.Customer,[xn.CustomerOperations]:Xi.Runtime,[xn.EventIngestion]:Xi.Runtime};function Qn(t,e){return {[WU]:t,[JU]:e.inConfig??t===xn.Playbook,[ZU]:e.sdkInput,[QU]:e.source??eF[t]}}function Bp(t){return {deprecated:true,[XU]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var on=t=>z.object({items:z.array(t)}),lr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),F=t=>t,ln=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:et}=pa,{Persisted:zp,Transient:Us}=Ms,{External:ta}=Ba,LT=Qn(xn.Playbook,{sdkInput:true});Qn(xn.Playbook,{inConfig:false,sdkInput:false});var gF=Qn(xn.Playbook,{inConfig:false,sdkInput:true}),hF=Qn(xn.Playbook,{inConfig:false,sdkInput:false,source:Xi.Runtime}),fF=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var NT=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta}),VT=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta}),_F=z.object({count:z.number().int().positive().meta(et),period:VT.meta(et)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta});z.object({surface_type:z.string().min(1).meta(et),rules:z.array(_F).meta(et),cooldown_ms:z.number().int().nonnegative().optional().meta(et)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":zp,"x-revturbine-schema-exposure":ta,...pa.Operational,...gF});var yF=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":Us,"x-revturbine-schema-exposure":ta}),Kl=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),name:ms.meta(et),handle:Er.meta(et),description:Np.meta(et),category:NT.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:_o.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:fF.optional().meta(et),activation_window_start:z.string().datetime().optional().meta(et),activation_window_end:z.string().datetime().optional().meta(et),metadata:Di.meta(et)}).meta({id:"Placement","x-revturbine-schema-persistence":zp,"x-revturbine-schema-exposure":ta,...LT,...da()}),vF=ai("PlacementAnchor"),bF=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta}),xF=z.object({code:bF.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":Us,"x-revturbine-schema-exposure":ta}),FT=Kl.extend({warnings:z.array(xF).optional().meta(et)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta}),SF=z.object({label:z.string().min(1).max(200).meta(et),cta_path_type:yF.meta(et),config_fields:z.record(z.string(),z.unknown()).default({}).meta(et)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Us,"x-revturbine-schema-exposure":ta}),Mm=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true}),handle:Er.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(SF).default([]).meta(et),max_per_period:z.number().int().min(0).nullable().default(null).meta(et),max_period_unit:VT.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":zp,"x-revturbine-schema-exposure":ta,...LT,...ga()}),PF=ai("PlacementPayloadAnchor"),TF=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({surface_slot_handle:z.string().min(1).max(200).meta(et),surface_type:Fp.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":zp,"x-revturbine-schema-exposure":ta,...hF,...da("surface_slot_handle")}),IF=Ri(Kl),CF=Ri(Mm);({"/api/placement-anchors":{get:F({operationId:"listPlacementAnchors",requestParams:{query:ln},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:on(vF)}}},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:ln},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:on(Kl)}}}},"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:ii(Kl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:FT}}}},"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:Kl}}}},"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:IF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:FT}}}},"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:Kl}}}},"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:NT,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:ln},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:on(PF)}}},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:ln},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:on(Mm)}}}},"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:ii(Mm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mm}}}},"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:CF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mm}}}},"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:ln},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:on(TF)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var jF="__self__",OF={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},BT={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:{}}},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:jF,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:OF},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 {Unrestricted:je}=pa,{Persisted:zf,Transient:ki}=Ms,{Internal:HT,External:vi}=Ba,GT=Qn(xn.Playbook,{sdkInput:true}),DF=Qn(xn.Playbook,{inConfig:false,sdkInput:false}),YT=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":ki,"x-revturbine-schema-exposure":vi}),Kp=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),MF=z.enum(qT).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),UF=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),WT=z.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),Mf=z.object({entitlement_id:z.string().min(1).meta(je),entitlement_handle:z.string().min(1).meta(je),status:MF.meta(je),limit:z.number().optional().meta(je),used:z.number().optional().meta(je),allocation:Kp.optional().meta(je),enforcement:WT.optional().meta(je),source:UF.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":ki,"x-revturbine-schema-exposure":vi,...pa.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":ki,"x-revturbine-schema-exposure":vi,...pa.Operational});var FF=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),LF=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),JT=z.object({kind:LF.meta(je),id:z.string().min(1).meta(je)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),NF=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),Zl=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),name:ms.meta(je),handle:Er.meta(je),customer_facing_description:z.string().max(500).optional().meta(je),type:Lp.meta(je),unit:z.string().max(100).optional().meta(je),period_scope:YT.optional().meta(je),allocation:Kp.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:Di.meta(je)}).meta({id:"Entitlement","x-revturbine-schema-persistence":zf,"x-revturbine-schema-exposure":vi,...GT,...da()}),VF=ai("EntitlementAnchor"),rc=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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:FF.default("public").meta(je),period_scope:YT.optional().meta(je),instance:z.string().max(100).optional().meta(je),reset_period:NF.optional().meta(je),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(je),enforcement:WT.optional().meta(je),warning_threshold_percent:_o.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:Kp.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":zf,"x-revturbine-schema-exposure":HT,...GT,...ga()}),BF=ai("EntitlementRuleAnchor");rc.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(a=>a.kind!=="plan_variation"&&a.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 zF=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),$F=z.object({code:zF.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":ki,"x-revturbine-schema-exposure":vi}),Uf=rc.extend({warnings:z.array($F).optional().meta(je)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ki,"x-revturbine-schema-exposure":vi}),Ff=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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":zf,"x-revturbine-schema-exposure":HT,...DF,...ga()}),KF=Ri(Zl),HF=Ri(rc);({"/api/entitlement-anchors":{get:F({operationId:"listEntitlementAnchors",requestParams:{query:ln},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:on(VF)}}},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:ln},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:on(BF)}}},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:ln},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:on(Zl)}}}},"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:ii(Zl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Zl}}}},"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:Zl}}}},"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:KF}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zl}}}},"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:ln},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:on(rc)}}}},"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:ii(rc)}}},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:HF}}},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:ln},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:on(Ff)}}}},"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:ii(Ff)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ff}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:bt}=pa,{Persisted:Vm,Transient:Bm}=Ms,{Internal:za}=Ba,ZT=Qn(xn.Playbook,{sdkInput:true}),QT=Qn(xn.Playbook,{inConfig:false,sdkInput:true}),GF=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":za}),$f=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":za}),XT=z.object({name:ms.meta(bt),handle:Er.meta(bt),plan_id:z.string().nullable().optional().meta(bt),segment_id:z.string().nullable().optional().meta(bt),trial_limit_type:$f.default("time").meta(bt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(bt),grace_period_days:z.number().int().min(0).default(0).meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),require_payment_method:z.boolean().default(false).meta(bt),auto_convert:z.boolean().default(true).meta(bt),convert_to_plan_id:z.string().optional().meta(bt),fallback_plan_id:z.string().optional().meta(bt),limit_per_customer:z.number().int().min(1).default(1).meta(bt),is_active:z.boolean().default(true).meta(bt),metadata:Di.meta(bt)}),Hl=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...bt,readOnly:true})}).merge(XT).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":za,...ZT,...da()}),YF=ai("FreeTrialRuleAnchor"),WF=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":za}),eI=z.object({name:ms.meta(bt),handle:Er.meta(bt),premium_plan_id:z.string().min(1).meta(bt),fallback_plan_id:z.string().min(1).meta(bt),segment_id:z.string().nullable().optional().meta(bt),trial_limit_type:$f.default("time").meta(bt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),start_policy:WF.default("signup").meta(bt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(bt),entitlements_during_trial:z.array(z.string()).default([]).meta(bt),is_active:z.boolean().default(true).meta(bt),metadata:Di.meta(bt)}),Gl=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...bt,readOnly:true})}).merge(eI).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":za,...ZT,...da()}),JF=ai("ReverseTrialRuleAnchor"),tI=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":za}),nI=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":za}),Yl=Ln.merge(Gn).merge(Yn).extend({trial_limit_policy:tI.default("1_per_lifetime").meta(bt),eligibility_scope:nI.default("per_customer").meta(bt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":za,...QT}),Wl=Ln.merge(Gn).merge(Yn).extend({trial_limit_policy:tI.default("1_per_lifetime").meta(bt),eligibility_scope:nI.default("per_customer").meta(bt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":za,...QT}),$p=Ln.merge(Gn).merge(Yn).extend({customer_id:z.string().min(1).meta(bt),rule_id:z.string().min(1).meta(bt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(bt),plan_id:z.string().min(1).meta(bt),status:GF.default("active").meta(bt),started_at:z.string().datetime().meta({...bt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(bt),trial_limit_type:$f.default("time").meta(bt),usage_entitlement_handle:z.string().min(1).optional().meta(bt),usage_limit_value:z.number().int().min(1).optional().meta(bt),converted_at:Vp.meta(bt),cancelled_at:Vp.meta(bt),metadata:Di.meta(bt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":za});({"/api/free-trial-rule-anchors":{get:F({operationId:"listFreeTrialRuleAnchors",requestParams:{query:ln},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:on(YF)}}},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:ln},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:on(Hl)}}}},"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:Hl}}}},"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:Hl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Hl}}}},"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:ln},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:on(JF)}}},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:ln},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:on(Gl)}}}},"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:Gl}}}},"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:Gl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gl}}}},"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:ln},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:on(Yl)}}}},"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:Yl}}}},"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:Yl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:F({operationId:"listReverseTrialSettings",requestParams:{query:ln},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:on(Wl)}}}},"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:Wl}}}},"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:Wl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:F({operationId:"listTrialInstances",requestParams:{query:ln},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:on($p)}}}},"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:$p}}}},"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:$p}}}},"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:$p}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:en,Financial:ic}=pa,{Persisted:zm,Transient:Hp}=Ms,{External:us}=Ba,ZF=Qn(xn.Playbook,{sdkInput:true}),QF=Qn(xn.Playbook,{sdkInput:false}),Kf=Qn(xn.Billing,{sdkInput:false}),Fs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Hp,"x-revturbine-schema-exposure":us}),$m=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Hp,"x-revturbine-schema-exposure":us}),Gp=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Hp,"x-revturbine-schema-exposure":us}),Ql=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...en,readOnly:true}),name:ms.meta(en),handle:Er.meta(en),tier_position:z.number().int().min(0).default(0).meta(en),sort_order:z.number().int().default(0).meta(en),visibility:Fs.default("public").meta(en),metadata:Di.meta(en)}).meta({id:"Plan","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...ZF,...da()}),XF=ai("PlanAnchor"),Xl=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...en,readOnly:true}),handle:Er.meta({...en,readOnly:true}),plan_id:z.string().min(1).meta(en),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(en),segment_id:z.string().nullable().default(null).meta(en),price_amount:z.number().min(0).meta(ic),currency:$l.meta(ic),pricing_model:$m.meta(en),visibility:Fs.default("public").meta(en),stripe_price_id:z.string().optional().meta(en),price_source:Gp.default("static").meta(en)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...Kf,...ga()}),eL=ai("PlanVariationAnchor"),ec=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...en,readOnly:true}),name:ms.meta(en),handle:Er.meta(en),sort_order:z.number().int().default(0).meta(en),visibility:Fs.default("public").meta(en),metadata:Di.meta(en)}).meta({id:"AddOn","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...QF,...da()}),tL=ai("AddOnAnchor"),tc=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...en,readOnly:true}),handle:Er.meta({...en,readOnly:true}),addon_id:z.string().min(1).meta(en),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(en),segment_id:z.string().nullable().default(null).meta(en),price_amount:z.number().min(0).meta(ic),currency:$l.meta(ic),pricing_model:$m.meta(en),visibility:Fs.default("public").meta(en),stripe_price_id:z.string().optional().meta(en),price_source:Gp.default("static").meta(en)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...Kf,...ga()}),nL=ai("AddOnVariationAnchor"),rL=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Hp,"x-revturbine-schema-exposure":us}),nc=Ln.merge(Gn).merge(Yn).extend({stripe_price_id:z.string().min(1).meta(en),stripe_product_id:z.string().min(1).meta(en),billing_period:rL.meta(en),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(ic),currency:$l.meta(ic),pricing_model:$m.meta(en),nickname:z.string().nullable().default(null).meta(en),is_mock:z.boolean().default(false).meta(en),last_updated_from_stripe:Vp.meta(en)}).meta({id:"StripePrice","x-revturbine-schema-persistence":zm,"x-revturbine-schema-exposure":us,...Kf}),iL=Ri(Ql),aL=Ri(Xl),sL=Ri(ec),oL=Ri(tc),lL=Ri(nc);({"/api/plan-anchors":{get:F({operationId:"listPlanAnchors",requestParams:{query:ln},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:on(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:ln},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:on(Ql)}}},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:ii(Ql)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ql}}},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:Ql}}},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:iL}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ql}}},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:ln},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:on(eL)}}},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:ln},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:on(Xl)}}}},"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:ii(Xl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Xl}}}},"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:Xl}}}},"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:aL}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Xl}}}},"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:ln},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:on(tL)}}},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:ln},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:on(ec)}}}},"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:ii(ec)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:ec}}}},"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:ec}}}},"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:sL}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:ec}}}},"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:ln},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:on(nL)}}},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:ln},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:on(tc)}}}},"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:ii(tc)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:tc}}}},"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:tc}}}},"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:oL}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:tc}}}},"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:ln},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:on(nc)}}}},"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:ii(nc)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:nc}}}},"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:nc}}}},"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:lL}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:nc}}}},"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}=pa,{Persisted:sc,Transient:Tt}=Ms,{Internal:na,External:Vt}=Ba,vt=Qn(xn.Playbook,{sdkInput:true}),zT=Qn(xn.Playbook,{sdkInput:false}),ac=Qn(xn.Playbook,{inConfig:false,sdkInput:false}),rI=Qn(xn.Playbook,{inConfig:false,sdkInput:true}),Jl=Qn(xn.Playbook,{inConfig:false,sdkInput:true,source:Xi.CodeConstant}),Lf=Qn(xn.Playbook,{inConfig:false,sdkInput:true,source:Xi.Runtime}),Nf=Qn(xn.Playbook,{inConfig:false,sdkInput:false,source:Xi.Runtime}),cL=Qn(xn.Billing,{sdkInput:false}),mL=Qn(xn.Metering,{sdkInput:false}),uL=Qn(xn.Branding,{inConfig:true,sdkInput:true}),pL=Qn(xn.Branding,{sdkInput:false}),dL="1.0.0",Um=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:ms.meta(h),handle:Er.meta(h),description:Np.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Di.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":na,...ac,...da()}),gL=ai("SeatTypeAnchor"),Fm=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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:Di.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":na,...ac,...da()}),hL=ai("PersonalizationTokenAnchor"),fL=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":na}),Vf=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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:fL.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:Di.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":na,...cL,...ga()});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":Tt,"x-revturbine-schema-exposure":Vt,...pL});var Lm=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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:Di.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":na,...mL,...ga()}),$T=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":na}),Nm=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).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:$T.default("warn").meta(h),hard_limit_action:$T.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":sc,"x-revturbine-schema-exposure":na,...rI,...ga()}),_L=ai("UsageEnforcementSettingsAnchor"),yL=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":Tt,"x-revturbine-schema-exposure":na}),vL=z.object({id:z.string().min(1).meta(h),group:z.array(yL).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":Tt,"x-revturbine-schema-exposure":na}),bL=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":na}),iI=z.object({capRules:z.array(vL).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:bL.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":na}),Bf=Ln.merge(Gn).merge(Yn).merge(fr).merge(Rr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:Er.meta({...h,readOnly:true}),global_frequency_cap:iI.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":sc,"x-revturbine-schema-exposure":na,...rI,...ga()}),xL=ai("PlacementSettingsAnchor"),SL=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":Tt,"x-revturbine-schema-exposure":Vt}),PL=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(SL).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_handle:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),TL=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:Fs.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),IL=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:Fs.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),CL=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),currency:$l.meta(h),pricing_model:$m.meta(h),visibility:Fs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Gp.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),EL=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),currency:$l.meta(h),pricing_model:$m.meta(h),visibility:Fs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Gp.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),RL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),kL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),AL=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:iI.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),wL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),jL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),OL=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:Lp.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),qL=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:Lp.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}),...rc.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:Kp.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),DL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),ML=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),UL=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":Tt,"x-revturbine-schema-exposure":Vt}),FL=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(UL).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),LL=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":Tt,"x-revturbine-schema-exposure":Vt}),NL=z.object({name:z.string().min(1).meta(h),action_type:LL.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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),VL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),BL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),KT=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":Tt,"x-revturbine-schema-exposure":Vt}),zL=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:KT.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:KT})).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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),$L=z.object({label:z.string().meta(h),path:DT.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),aI=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array($L).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),sI=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":Tt,"x-revturbine-schema-exposure":Vt}),KL=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":Tt,"x-revturbine-schema-exposure":Vt}),oI=z.object({max_per_period:KL.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),HL=z.object({id:z.string().min(1).meta(h),target:sI.meta(h),surfaces:z.array(aI).meta(h),caps:oI.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":Tt,"x-revturbine-schema-exposure":Vt}),GL=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:_o}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_o}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_o}),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":Tt,"x-revturbine-schema-exposure":Vt}),YL=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt}),WL=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:YL.meta(h),trigger:GL.meta(h),payloads:z.array(HL).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),JL=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:sI.meta(h),caps:oI.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(aI).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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),ZL=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":Tt,"x-revturbine-schema-exposure":Vt,...vt}),QL=Ln.merge(XT).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...ac}),XL=Ln.merge(eI).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...ac}),eN=z.object({plans:z.array(TL).meta({...h,...vt}),addons:z.array(IL).optional().meta({...h,...vt}),entitlements:z.array(OL).meta({...h,...vt}),entitlement_rules:z.array(qL).meta({...h,...vt}),segments:z.array(PL).meta({...h,...vt}),content_ui_paths:z.array(NL).meta({...h,...vt}),slot_configs:z.array(DL).optional().meta({...h,...vt,...Bp({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,...vt,...Bp({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,...uL,...Bp({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(ML).optional().meta({...h,...vt}),message_blocks:z.array(zL).optional().meta({...h,...vt}),placement_payloads:z.array(JL).optional().meta({...h,...vt}),placements:z.array(WL).optional().meta({...h,...vt}),content_promotions:z.array(VL).optional().meta({...h,...vt}),personalization_tokens:z.array(BL).optional().meta({...h,...vt}),surface_templates:z.array(FL).optional().meta({...h,...vt}),free_trial_rules:z.array(QL).optional().meta({...h,...zT}),reverse_trial_rules:z.array(XL).optional().meta({...h,...zT}),plan_variations:z.array(CL).optional().meta({...h,...vt}),addon_variations:z.array(EL).optional().meta({...h,...vt}),extension_rules:z.array(ZL).optional().meta({...h,...vt}),seat_types:z.array(RL).optional().meta({...h,...vt}),enforcement_defaults:z.array(kL).optional().meta({...h,...vt}),placement_settings:z.array(AL).optional().meta({...h,...vt}),segment_dimensions:z.array(wL).optional().meta({...h,...vt}),meter_bindings:z.array(jL).optional().meta({...h,...vt}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...ac}),signal_catalog:z.object({}).strict().optional().meta({...h,...ac})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt}),tN=z.object({artifact_type:z.literal("playbook").meta({...h,...Jl,readOnly:true}),format_version:z.literal(dL).meta({...h,...Jl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Jl}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Lf,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...Nf,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...Nf,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...Nf,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Lf,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Jl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Jl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Jl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...Lf}),lI=tN.extend(eN.shape).meta({"x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});function nN(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function cI(t){if(!nN(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(cI,lI).meta({id:"Playbook","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});z.preprocess(cI,lI.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Tt,"x-revturbine-schema-exposure":Vt,...vt});({"/api/seat-type-anchors":{get:F({operationId:"listSeatTypeAnchors",requestParams:{query:ln},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:on(gL)}}},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:ln},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:on(Um)}}}},"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:ii(Um)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Um}}}},"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:Um.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Um}}}},"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:ln},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:on(hL)}}},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:ln},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:on(Fm)}}}},"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:ii(Fm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fm}}}},"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:Fm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fm}}}},"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:Ri(Vf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Vf}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:F({operationId:"listMeteringConfigs",requestParams:{query:ln},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:on(Lm)}}}},"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:ii(Lm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Lm}}}},"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:Lm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Lm}}}},"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:ln},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:on(_L)}}},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:ln},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:on(Nm)}}}},"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:ii(Nm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nm}}}},"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:Nm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nm}}}},"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:ln},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:on(xL)}}},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:Ri(Bf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Bf}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var iN=["web-client"],aN=z.enum(iN),sN=["method","meta","component"],oN=z.enum(sN),lN=["ts","python","java","csharp","rust"];z.enum(lN);var cN=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(),mN=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:oN,appliesTo:z.array(aN).min(1),composes:z.string().min(1).optional(),perLanguage:cN.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"]}),uN=z.object({version:z.number().int().positive(),functions:z.array(mN).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let i of [r.canonical,...r.aliases]){let a=n.get(i);a!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${a}")`,path:["functions"]}),n.set(i,r.canonical);}});uN.parse({version:4,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:"getEligiblePlans",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public plan variations eligible for the current user, including structured display prices."},{canonical:"getEligibleAddons",aliases:[],kind:"method",appliesTo:["web-client"],description:"Return public add-on variations eligible for the current user, including structured display prices."},{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 pN=[{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 dN(){let t=[];for(let[e,n]of Object.entries(BT))for(let[r,i]of Object.entries(n.fields)){let a=i.reference;if(a){if(!a.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${a.table} has no onDelete policy`);t.push({from:e,field:r,to:a.table,by:a.by,kind:a.kind,onDelete:a.onDelete,resolution:"playbook"});}}return t}function gN(t){return [...t].sort((e,n)=>Yp(e.from,n.from)||Yp(e.field,n.field)||Yp(e.to,n.to)||Yp(e.targetKind??"",n.targetKind??""))}function Yp(t,e){return t<e?-1:t>e?1:0}Object.freeze(gN([...dN(),...pN]));
2
+ export{jf as BrowserRuntime,Dc as BrowserStorage,Py as CONTROL_PLANE_EVENT_SOURCE,Ty as CONTROL_PLANE_SOURCE_KEY,uy as CapEnforcer,Kd as DEFAULT_BRANDING,ua as DEFAULT_THEME,gd as DecisionEngine,Oc as DomainProviderRegistry,jp as EntitlementGate,xU as FIXED_BANNER_TEMPLATE_IDS,IU as FIXED_SURFACE_TEMPLATE_IDS,CU as GATED_SURFACE_TEMPLATE_IDS,SU as GENERAL_BANNER_TEMPLATE_IDS,TU as GENERAL_MODAL_TEMPLATE_IDS,PU as GENERAL_TOAST_TEMPLATE_IDS,zo as InMemoryStorage,my as InteractionTracker,EU as MESSAGE_SURFACE_TEMPLATE_IDS,wp as PlacementController,Vl as PlacementTypeRegistry,dT as RECOGNIZED_UPDATE_KEYS,wf as RevTurbineApiError,Cf as RevTurbineCustomerSdk,Up as RevTurbineServer,jm as RuntimeMode,yy as SERVER_TRAITS_DOMAIN,Op as SdkSession,qc as ServerUserContextProvider,Dp as UnsupportedExperimentAssignmentUnitError,TT as adaptExperimentVersionToBucketer,Tc as applyValueMaps,PT as bucketSubject,Wd as buildControlPlaneEvent,aU as clearPersistedTheme,CT as createAnalyticsProvider,IT as createBasicExperimentProvider,EW as createChainedPlacementRequest,PW as createCustomEndpointRuntimeConfig,CW as createEntitlementPlacementRequest,yE as createHydrationProviders,OM as createLocalRuntimeConfig,_U as createNativeExperimentAssignmentProvider,ET as createPostHogAnalyticsProvider,bU as createPostHogIntegration,gU as createRevTurbineApiClient,kW as createSemanticEvent,SW as createServerRuntimeConfig,IW as createSlotPlacementRequest,mu as createStaticPlacementContentLookupProvider,Io as createStaticPlacementResolver,_E as createStaticProviders,TW as createStrictLocalRuntimeConfig,RW as createTreatmentInteraction,xW as defineUiPathResolvers,Hm as deriveLocalTrialStatusFromInstance,Qp as deriveReverseTrialGrants,qm as entitlementResultDenies,yc as evaluateSegments,Gm as evaluateTrialStatus,t_ as findActiveTrialInstance,Xp as findLatestStartedTrialInstance,EM as formatCurrencyMinorUnits,vM as getDefaultRegistry,oU as initRevTurbine,Yr as isBrowser,Bo as isServer,Af as loadTheme,Bl as mergeTheme,Yf as normalizeConfigArtifactOrThrow,yM as parsePromotion,_M as parseUiPath,bM as resetDefaultRegistry,Hd as resolveBranding,fM as resolveContent,Ap as resolveLocalPlaybook,Ed as resolvePayloadForUser,uu as resolvePayloadForUserWithProvider,fs as resolvePersistentStorage,Jd as resolveSessionStorage,JP as resolveTokens};//# sourceMappingURL=headless.js.map
3
3
  //# sourceMappingURL=headless.js.map