@revturbine/sdk 0.2.86 → 0.2.87

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/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import {z}from'zod';import Lm,{createContext,useMemo,useCallback,useEffect,useRef,useState,useContext}from'react';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var qI=Object.defineProperty;var DI=(t,e,n)=>e in t?qI(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var w=(t,e,n)=>DI(t,typeof e!="symbol"?e+"":e,n);function jg(){try{return "production"}catch{return}}function MI(){try{return typeof process<"u"}catch{return false}}function Fg(){return jg()==="production"}function ha(){let t=jg();if(t!==void 0)return t!=="production";if(MI())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}function Lg(t){ha()&&typeof console<"u"&&console.warn(`[RevTurbine] ${t}`);}var Rd="1.0.0",Bg=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],NI=["slot_configs","content_overrides"];function zI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function HI(t,e){if(!ha())return;let n=NI.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 KI(t,e){for(let n of Bg)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function GI(t){return t.artifact_type==="playbook"&&t.format_version===Rd&&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&&Bg.every(e=>Array.isArray(t[e]))}function $I(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 Ug(t,e,n){if(t===void 0)return;if(!zI(t))throw new Error(`Invalid ${e}: expected top-level object`);HI(t,e),KI(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!==Rd)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==Rd)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,s=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(!s)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(!$I(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:a,change_set_id:o,...l}=t,b=r?t.playbook_version_id??null:o??null,p={...l,artifact_type:"playbook",format_version:Rd,playbook_handle:t.playbook_handle??"default",playbook_version_id:b,tenant_id:i,environment_id:s};if(!GI(p))throw new Error(`Invalid ${e}: malformed Playbook header`);return p}function vs(t,e,n){return Ug(t,e,n)}var Bm=864e5,WI=75;function Vg(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function ZI(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=WI?"running_out":"active"}function YI(t,e,n){let r=Math.max(0,e-t),i=Math.max(0,n-t),s=Math.max(0,e-n),a=Math.max(1,Math.round(r/Bm)),o=Math.min(a,Math.floor(i/Bm)),l=Math.max(0,Math.ceil(s/Bm)),b=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:o,daysRemaining:l,daysTotal:a,progressPercent:b}}function JI(t,e){let n=Math.max(1,e),r=Math.max(0,t),i=Math.max(0,n-r),s=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:i,usageLimit:n,progressPercent:s}}function kd(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:i,usageBalances:s}=t,a=Date.parse(e.started_at),o=Date.parse(r);if(Number.isNaN(a)||Number.isNaN(o)||e.status==="not_started"||o<a)return;let l=e.trial_limit_type??"time",b=0,p=false,v,P,S,y,T,E;if(l==="usage"){let C=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),D=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof C!="string"||typeof D!="number"||D<1)return;let ae=s?.[C]??0,Me=JI(ae,D);b=Me.progressPercent,p=Me.isExpiredByBounds,S=Me.usageConsumed,y=Me.usageRemaining,T=Me.usageLimit,E=C;}else {let C=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(C))return;let D=YI(a,C,o);b=D.progressPercent,p=D.isExpiredByBounds,v=D.dayNumber,P=D.daysRemaining;}let A=Vg(e.status,p),k=ZI(A,b),O;e.rule_type==="reverse_trial"?O=i:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(O=n.plan_id);let R=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:A==="active",trial_type:R,...O!==void 0?{plan_handle:O}:{},state:k,trial_limit_type:l,progress_percent:b,...v!==void 0?{day_number:v}:{},...P!==void 0?{days_remaining:P}:{},...E!==void 0?{usage_entitlement_handle:E}:{},...S!==void 0?{usage_consumed:S}:{},...y!==void 0?{usage_remaining:y}:{},...T!==void 0?{usage_limit:T}:{}}}function qg(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let i,s=-1/0;for(let a of t){let o=Date.parse(a.started_at);if(Number.isNaN(o)||r<o)continue;let l=false;if((a.trial_limit_type??"time")==="usage")n&&typeof a.usage_entitlement_handle=="string"&&typeof a.usage_limit_value=="number"&&(l=(n[a.usage_entitlement_handle]??0)>=a.usage_limit_value);else if(a.expires_at){let p=Date.parse(a.expires_at);Number.isNaN(p)||(l=r>=p);}let b=Vg(a.status,l);b!=="active"&&b!=="converted"||o>s&&(i=a,s=o);}return i}function Um(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 Vm(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,i=-1/0;for(let s of t){if(s.status!=="active"&&s.status!=="expired"&&s.status!=="converted")continue;let a=Date.parse(s.started_at);Number.isNaN(a)||n<a||a>i&&(r=s,i=a);}return r}function Ed(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:i,usageBalances:s,basePlanHandle:a}=t,o=Vm(r,i);if(!o)return {trial:void 0,reverseGrants:null};if(o.rule_type==="reverse_trial"){let p=(n??[]).find(S=>S.id===o.rule_id),v=kd({instance:o,...p!==void 0?{rule:p}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),P=p!==void 0?Um(o,p):null;return {trial:v,reverseGrants:P}}let l=(e??[]).find(p=>p.id===o.rule_id);return {trial:kd({instance:o,...l!==void 0?{rule:l}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),reverseGrants:null}}function we(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function ql(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Yn(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function Cn(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 Xa(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function qm(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Dl(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 Dm(t){if(!we(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 Mm(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function Dg(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 Mg(t){let e=t,n=we(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(a=>typeof a=="string"):[];if(r.length>0)return r;let i=we(t.content)?t.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(a=>typeof a=="string"):[]}function Nm(t,e){let n=Mg(t);if(n.length===0||!e)return true;let r=Dg(e);return r.length===0?true:n.some(i=>{let s=i.toLowerCase();return r.some(a=>s===a||s.endsWith(`_${a}`)||s.includes(a))})}function zm(t,e){if(e.length===0)return null;let n=[...e].sort((i,s)=>i.tier_position!==s.tier_position?i.tier_position-s.tier_position:i.sort_order!==s.sort_order?i.sort_order-s.sort_order:i.source_id.localeCompare(s.source_id)),r=n.findIndex(i=>i.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function Qa(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function Hm(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Km(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function Ss(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))we(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function ga(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0?n=e.trim():we(e)&&typeof e.id=="string"&&e.id.trim().length>0&&(n=e.id.trim()),!n)return;let r=n.toLowerCase();for(let i of t.plans){if(!we(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let a=typeof i.name=="string"?i.name.trim():"";if(a.length>0)return a}}}function wd(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function Ns(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 Ml(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.score),Cn(e.ltv_propensity_score),Cn(n.score),Cn(n.ltv_propensity_score),Cn(n.ranking_score)].find(i=>i!==null)??0}function Ad(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.priority),Cn(e.placement_priority),Cn(n.priority),Cn(n.placement_priority)].find(i=>i!==null)??0}function Gm(t){let e=we(t.content)?t.content:{};return [Cn(e.usage_percent),Cn(e.trial_percent_elapsed),Cn(e.threshold_percent)].find(r=>r!==null)??Ml(t)}var XI=new Set(["trial_started","trial_ended","trial_converted"]),QI=new Set(["trial_progress","trial_ending"]);function $m(t){let e=we(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&XI.has(n))return 1;if(n&&QI.has(n))return 3;let r=[Cn(e.usage_percent),Cn(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function Nl(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.server_order),Cn(e.order),Cn(e.rank),Cn(e.order_index),Cn(n.server_order),Cn(n.order),Cn(n.rank),Cn(n.order_index)].find(i=>i!==null)??null}function Wm(t){let e=we(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=Cn(n);if(r!==null)return String(r);let i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let s=Cn(i);return s!==null?String(s):null}function Zm(t){let n=(we(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(i=>typeof i=="string"?i.trim():Cn(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=Cn(n);return r!==null?[String(r)]:[]}function xs(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>xs(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${xs(r)}`).join(",")}}`}function Ym(t){return we(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 t0=/^[a-z0-9._]{1,100}$/,zs={Persisted:"persisted",Transient:"transient"},Ji={Internal:"internal",External:"external"},Fi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},n0="readOnly";function oi(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[n0]===true||(e[n]=r);}return z.object(e)}function Or(t){let e=oi(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(t0)}):e}var {Unrestricted:$r}=Fi,{Transient:Wr,Persisted:i0}=zs,{Internal:_a,External:Ps}=Ji;z.object({page:z.coerce.number().int().min(1).default(1).meta($r),per_page:z.coerce.number().int().min(1).max(100).default(25).meta($r)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var qn=z.object({created_at:z.string().datetime().meta({...$r,readOnly:true}),updated_at:z.string().datetime().meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),On=z.object({id:z.string().min(1).meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),Dn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var Jm=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),zg=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var Od=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),Hg=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});var Is=z.string().min(1).max(200),lr=z.string().min(1).max(100),jd=z.string().max(500).optional(),gi=z.record(z.string(),z.unknown()).default({}),ba=z.number().int().min(10).max(100).multipleOf(10),Fd=z.string().datetime().nullable().default(null),sr=z.object({environment_id:z.string().min(1).default("production").meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a}),cr=z.object({playbook_version_id:z.string().nullable().default(null).meta($r),is_current:z.boolean().default(true).meta({...$r,readOnly:true}),is_deleted:z.boolean().default(false).meta({...$r,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...$r,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...$r,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a}),s0=On.merge(qn).merge(Dn).merge(sr).extend({handle:lr.meta({...$r,readOnly:true}),active:z.boolean().default(true).meta({...$r,readOnly:true})});function jr(t){return s0.meta({id:t,"x-revturbine-schema-persistence":i0,"x-revturbine-schema-exposure":_a})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});var Kg=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),a0=new Set(Jm.options);function Ld(t,e){if(!we(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=we(t.surface)?t.surface:{},i=a0.has(r.type)?r.type:"custom",s=we(t.cta_path)?t.cta_path:we(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:we(t.content)?t.content:{},...we(t.promotion)?{promotion:t.promotion}:{},cta_path:s,ui_path:s,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 o0="__no_dim__";function Wg(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let s of t){let a=n(s)??o0,o=i.get(a)??[];o.push(s),i.set(a,o);}for(let s of i.values())if(!s.some(a=>r.has(a)))return false;return true}var l0=999999;function c0(t){return t==null||t==="unlimited"||t===l0}function zl(t){return c0(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function d0(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 Zg(t,e,n){return t.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(a=>d0(a,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),s=Wg(r.segmentIds,e.segmentIds,a=>n?.[a]);return {rule:r,matchesPlan:i,matchesSegment:s,matched:i&&s}})}function Yg(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return zl(e.limit_value)??0;case "credits":return zl(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return zl(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function Jg(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let i of t){let s=e(i);(n===void 0||s>r)&&(n=i,r=s);}return n}function u0(t){return Jg(t,e=>Yg(e.rule))?.rule}function Xm(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let i=Zg(r,n,t.segmentDimensions);return u0(i.filter(s=>s.matched))}function m0(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 p0(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 Wg(m0(t),e,i=>r.get(i))}function Gg(t,e,n){if(!t)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:n};case "soft_block":return {status:"denied",allowed:false,reason:`${n}_soft_block`};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 Hl(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:i,segmentIds:s,usageBalances:a,userUsage:o,trialGrantedEntitlementHandles:l,effectivePlanHandle:b}=t,v=(r.entitlements??[]).find(Oe=>typeof Oe?.unique_handle=="string"&&Oe.unique_handle===e),P=typeof v?.unique_handle=="string"?v.unique_handle:e,S=typeof v?.unique_handle=="string"?v.unique_handle:void 0,y=!!(l&&l.size>0&&(l.has(e)||l.has(P)||S!==void 0&&l.has(S)));if(y&&(b===void 0||b===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let E=String((y&&b?b:i)||"").toLowerCase(),k=(r.plans??[]).find(Oe=>typeof Oe.unique_handle=="string"&&Oe.unique_handle.toLowerCase()===E),O=typeof k?.unique_handle=="string"?k.unique_handle:E||void 0,C=(r.entitlement_rules??[]).filter(Oe=>{if((typeof Oe.entitlement_id=="string"?Oe.entitlement_id:typeof Oe.entitlementId=="string"?Oe.entitlementId:"")!==P)return false;let Je=Array.isArray(Oe.targets)?Oe.targets.filter(Xe=>we(Xe)&&Xe.kind==="plan"&&typeof Xe.id=="string").map(Xe=>Xe.id):Array.isArray(Oe.plan_ids)?Oe.plan_ids.filter(Xe=>typeof Xe=="string"):Array.isArray(Oe.planIds)?Oe.planIds.filter(Xe=>typeof Xe=="string"):[];return !(O!==void 0&&!Je.includes(O)||!p0(Oe,s,r.segments??[]))});if(C.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let D=(()=>{let Oe=(r.entitlements??[]).find(lt=>lt.unique_handle===P);return Oe&&typeof Oe.type=="string"?Oe.type:void 0})(),ae=Oe=>{let lt=we(Oe)?Oe:{},Xe={...we(lt.type_fields)?lt.type_fields:we(lt.typeFields)?lt.typeFields:{},...lt};return typeof Xe.kind!="string"&&D&&(Xe.kind=D),Xe},Me=Jg(C,Oe=>{let lt=ae(Oe);return Yg({kind:typeof lt.kind=="string"?lt.kind:"",fields:lt})})??C[0],L=ae(Me);typeof L.kind=="string"?L.kind:void 0;let ge=Oe=>{let lt=o?.[Oe];if(we(lt)&&typeof lt.amount=="number")return lt.amount},Ae=n?.used??(Number.isFinite(a[e])?a[e]:void 0)??(Number.isFinite(a[P])?a[P]:void 0)??ge(e)??ge(P)??0;return Bd(L,Ae)}function $g(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function Xg(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Bd(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=zl(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?$g(Gg(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:zl(r),s=Number(t.initial_grant),a=i!==void 0&&i>=0?i:Number.isFinite(s)&&s>=0?s:void 0;return a!==void 0&&Number.isFinite(a)?$g(Gg(e>=a,t.enforcement,"credit_balance_exhausted"),a,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 Qm(t,e,n,r,i=80){let s=e.get(t);if(s)return s;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let o=Number(r[t]);if(o>0)return {limit:o,warningPercent:i}}return null}var f0=0;function h0(){return `core_${Date.now()}_${++f0}`}function Qg(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var ep=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=h0(),n=this.placements.get(t.placementId);if(this.interactionTracker){let s=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(s.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Qg(`${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 s=await this.placementResolver(t,n,i);if(s.visible&&s.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let a=this.capEnforcer.enforce(s.output);if(!a.allowed)return {...s,visible:false,reasonCodes:[...s.reasonCodes,a.reason??"suppressed_by_cap"],suppressionReason:a.reason}}return s}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:Qg("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 s=i.entries[t];if(!s)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let a=i.usage?.[t];if(e.rules){let o=Xm(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(o){let l={kind:o.kind,...o.fields};if(Xg(l.kind))return Bd(l,n?.used??a?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return a&&n?.used!==void 0&&a.limit>0&&n.used>=a.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:a.limit,used:n.used,remaining:Math.max(0,a.limit-n.used)}:{status:s.status,allowed:s.status==="allowed",reason:s.reason,limit:a?.limit,used:a?.used,remaining:a?.remaining}}};function Ud(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Kl(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),Ud(n)}var tp={async sha256Base64Url(t){return Kl(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 e_=z.enum(["session","day","week","month"]),t_=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(t_),cap:z.object({count:z.number().int().min(1),period:e_})});function g0(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 r_(t,e){return `${t}:${e}`}function Gl(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(l=>l.kind==="template"?l.id===n.templateId:l.kind==="slot"?l.id===n.slotId:false))continue;let a=r_(i.id,i.cap.period);if((r.get(a)??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 s of n)for(let a of s.rules){let o=g0(a.period,e);if(r.filter(b=>b>=o&&b<=e).length>=a.count)return {allowed:false,reason:`suppressed_by_payload_cap_${a.period}`}}}return {allowed:true}}async function np(t,e){let n=Xa(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 Kl(r).slice(0,22)}function rp(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function ip(t){let e=xs({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:Xa(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${Kl(e)}`}function s_(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 s=Zm(r);if(s.length!==0)for(let a of t){if(a.output_id===r.output_id||a.surface.template!==i)continue;let o=Wm(a);o&&s.includes(o)&&e.add(a.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(a=>{let o=we(a.content)?a.content:{};return {output:a,order:Cn(o.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(a=>Number.isFinite(a.order));if(i.length<=1)continue;let s=i.reduce((a,o)=>o.order>a.order?o:a);for(let a of i)a.output.output_id!==s.output.output_id&&e.add(a.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function i_(t){let n=(we(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function _0(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 Vd(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],s=t[r];if(i.surface.type!==s.surface.type)continue;let a=Ns(i.category),o=Ns(s.category);if(a!==o){a<o?e.add(s.output_id):e.add(i.output_id);continue}if(a===0||a===1){let{leftKey:l,rightKey:b}=_0(i,s,a);l===b&&e.add(s.output_id);}}return t.filter(n=>!e.has(n.output_id))}function sp(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(l=>Ns(l.category)===1)),r.length===0)return null;let i=s_(r);if(i.length===0)return null;let s=i.some(l=>Nl(l)!==null),a=s?i:Vd(i);return a.length===0?null:[...a].sort((l,b)=>{if(s){let T=Nl(l),E=Nl(b);if(T!==null&&E!==null&&T!==E)return T-E;if(T!==null&&E===null)return -1;if(T===null&&E!==null)return 1}let p=Ns(l.category),v=Ns(b.category),P=p-v;if(P!==0)return P;if(p===2){let T=$m(l)-$m(b);if(T!==0)return T;let E=Gm(b)-Gm(l);if(E!==0)return E}let S=Ml(b)-Ml(l);if(S!==0)return S;let y=Ad(b)-Ad(l);return y!==0?y:l.output_id.localeCompare(b.output_id)})[0]??null}function b0(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function ap(t,e,n,r){let i=we(r)?r:{},s=we(i.decision)?i.decision:{},a=we(i.content)?i.content:we(s.content)?s.content:{},o=typeof s.visible=="boolean"?s.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:t,requestId:typeof i.request_id=="string"?i.request_id:e,visible:o,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(l=>typeof l=="string"):[],content:b0(typeof a.title=="string"?a.title:`${n} recommendation`,typeof a.body=="string"?a.body:"Treatment selected by RevTurbine decisioning.",typeof a.cta=="string"?a.cta:"Continue")}}function qd(t){let e=[],n=[t,t.content,we(t.content)?t.content.payload:void 0,we(t.content)?t.content.placement:void 0,we(t.content)?t.content.surface:void 0];for(let r of n){if(!we(r))continue;let i=we(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=Dm(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),l=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...l!==void 0?{cooldownMs:l}:{}});}return e}function op(t,e,n,r,i="impression"){if(Ns(t.category)<=1)return {allowed:true};let s=qd(t);if(s.length===0)return {allowed:true};let a={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(v=>Number.isFinite(v)&&v>0)},o=Gl({perPayload:{policies:s,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!o.allowed)return {allowed:false,reason:o.reason,updatedState:a};let l=[...a.seenAt,r],b=i==="dismiss"?s.map(v=>v.cooldownMs).filter(v=>typeof v=="number"&&Number.isFinite(v)&&v>0):[],p=b.length>0?r+Math.max(...b):void 0;return {allowed:true,updatedState:{seenAt:l,...p!==void 0?{cooldownUntil:p}:{}}}}function eo(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 $l(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function y0(t,e){let n=eo(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[s,a]of Object.entries(r))if(s.toLowerCase()===i)return eo(a)}}function v0(t){let e=eo(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 to(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[S,y]of Object.entries(t.base))(typeof y=="string"||typeof y=="number")&&(e[S]=y);let r=n?.plan?.currentPlanHandle,i=n?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let s=n?.plan?.trialDaysRemaining;s!==void 0&&Number.isFinite(s)&&(e.trial_days_remaining=s);let a=n?.plan?.trialDaysTotal;a!==void 0&&Number.isFinite(a)&&(e.trial_days_total=a);let o=n?.traits?.traits??{};for(let[S,y]of Object.entries(o))(typeof y=="string"||typeof y=="number")&&(e[S]=y);let l=n?.entitlements?.usage??{};for(let[S,y]of Object.entries(l)){let T=$l(S);if(!T)continue;let E=eo(y.used),A=eo(y.remaining),k=eo(y.limit);if(E!==void 0&&(e[`${T}_usage_current`]=E,e.usage_current===void 0&&(e.usage_current=E),e.current_usage===void 0&&(e.current_usage=E)),k!==void 0&&(e[`${T}_usage_limit`]=k,e.usage_limit===void 0&&(e.usage_limit=k),e.current_limit===void 0&&(e.current_limit=k)),A!==void 0)e[`${T}_usage_remaining`]=A,e.usage_remaining===void 0&&(e.usage_remaining=A);else if(E!==void 0&&k!==void 0){let R=Math.max(0,k-E);e[`${T}_usage_remaining`]=R,e.usage_remaining===void 0&&(e.usage_remaining=R);}if(E!==void 0&&k!==void 0&&k>0){let R=Math.min(100,Math.round(E/k*100));e[`${T}_usage_percent`]=R,e.usage_percent===void 0&&(e.usage_percent=R);}let O=y.reset_date;typeof O=="string"&&O.length>0&&(e[`${T}_reset_date`]=O,e.reset_date===void 0&&(e.reset_date=O));}let b=n?.rules?.entitlementRules??{};for(let[S,y]of Object.entries(b)){if(!Array.isArray(y)||y.length===0)continue;let T=y.find(R=>R.kind==="usage_limit"||R.kind==="usage_rate"||R.kind==="credits"||R.kind==="seat");if(!T)continue;let E=$l(S);if(!E)continue;let A=T.fields??{},k=y0(A,r);k!==void 0&&e[`${E}_usage_limit`]===void 0&&(e[`${E}_usage_limit`]=k);let O=v0(A);O!==void 0&&(e[`${E}_usage_warning_threshold_percent`]=O);}t.userName&&t.userName.length>0&&(e.user_name=t.userName);let p=n?.plan?.currentPlanPrice;typeof p=="string"&&p.length>0&&(e.plan_price=p),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 v=t.effectiveGrants;if(v)for(let[S,y]of Object.entries(v)){if(y.allocation==="per_user"||y.allocation==="per_user_pooled"||!y.allocation){let T=$l(S);if(!T)continue;y.used!==void 0&&e[`${T}_usage_current`]===void 0&&(e[`${T}_usage_current`]=y.used),y.limit!==void 0&&e[`${T}_usage_limit`]===void 0&&(e[`${T}_usage_limit`]=y.limit);}if(y.enforcement&&(y.status==="limited"||y.status==="denied")){let T=$l(S);T&&e[`${T}_enforcement`]===void 0&&(e[`${T}_enforcement`]=y.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=y.enforcement);}}let P=n?.rules?.entitlementRules??{};for(let[S,y]of Object.entries(P)){if(!Array.isArray(y))continue;let T=$l(S);if(T)for(let E of y){if(E.kind==="credits"){let A=e[`${T}_usage_remaining`];A!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=A);}if(E.kind==="seat"){let A=e[`${T}_usage_current`],k=e[`${T}_usage_limit`];A!==void 0&&e.seat_count===void 0&&(e.seat_count=A),k!==void 0&&e.seat_limit===void 0&&(e.seat_limit=k);}}}if(t.featureInteractions&&v){let{invokedFeatureHandles:S,interactionCounts:y,topFeaturesByEngagement:T}=t.featureInteractions,E=new Set(S),A=new Set;for(let[R,C]of Object.entries(v))(C.status==="denied"||C.status==="limited")&&A.add(R);let k=0,O=0;for(let R of S)A.has(R)&&(k++,y&&(O+=y[R]??0));if(e.gated_features_used_count=k,y&&(e.gated_action_count=O),T){let R=T.find(C=>!E.has(C)&&A.has(C));R&&(e.top_unused_gated_feature=R);}if(n?.plan?.trialActive){let R=0;for(let C of S)C in v&&R++;e.trial_features_used=R;}}return e}function lp(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 Dd(t,e,n){let r={};for(let[i,s]of Object.entries(t))(typeof s=="string"||typeof s=="number"||typeof s=="boolean")&&(r[i]=s);e&&r.plan===void 0&&(r.plan=e);for(let[i,s]of Object.entries(n))r[i]===void 0&&(r[i]=s);return r}function Md(t,e,n){let r=ga(e,t.plan),i=r??(typeof t.plan=="object"&&t.plan?.id?t.plan.id:void 0),s={...t.custom??{}};for(let[o,l]of Object.entries(t.entitlements??{}))s[o]===void 0&&(s[o]=l);r&&s.plan_name===void 0&&(s.plan_name=r),i&&s.plan===void 0&&(s.plan=i);let a={...Ss(t.usage),...n??{}};for(let[o,l]of Object.entries(a))s[o]===void 0&&(s[o]=l);return {effectivePlan:i,traits:s,usage:a,segmentTraits:Dd(s,i,a)}}function x0(t){return {plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function cp(t,e=tp){return e.sha256Base64Url(xs(x0(t)))}function dp(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:s}=t,a={};for(let[A,k]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(A)||(a[A]=k);let o={...a},l=ga(n,e.plan);l?o.plan_name=l:typeof e.plan=="object"&&e.plan?.name&&(o.plan_name=e.plan.name);let b={...Ss(e.usage),...r},p=Object.entries(b).filter(([,A])=>Number.isFinite(A)).sort(([A],[k])=>A.localeCompare(k)),v,P,S,y,T=[];for(let[A,k]of p){let O=i.get(A)??Qa(A);if(!O)continue;let C=s(A)?.limit,D=C!==void 0?Math.max(0,C-k):void 0,ae=C!==void 0&&C>0?Math.min(100,Math.round(k/C*100)):void 0;o[`${O}_usage_current`]=k,C!==void 0&&(o[`${O}_usage_limit`]=C),D!==void 0&&(o[`${O}_usage_remaining`]=D),ae!==void 0&&(o[`${O}_usage_percent`]=ae),T.push({prefix:O,current:k,...C!==void 0?{limit:C}:{},...D!==void 0?{remaining:D}:{},...ae!==void 0?{percent:ae}:{}}),v===void 0&&(v=k,P=C,S=D,y=ae);}let E=T.find(A=>A.prefix==="core")??T.find(A=>A.limit!==void 0)??T[0];return E&&(v=E.current,P=E.limit,S=E.remaining,y=E.percent),v!==void 0&&(o.usage_current=v),P!==void 0&&(o.usage_limit=P),S!==void 0&&(o.usage_remaining=S),y!==void 0&&(o.usage_percent=y),o}function up(t,e,n){let r=[];for(let[i,s]of Object.entries(e)){let a=t[i]||0;if(!Number.isFinite(s)||s<=a)continue;let o=n(i);if(!o)continue;let l=a/o.limit*100,b=s/o.limit*100;b>=o.warningPercent&&l<o.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:o.warningPercent}),s>=o.limit&&a<o.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:100});}return r}function mp(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 s=i+Math.max(0,r);if(s>0&&i>=Math.ceil(s/2))return "midpoint"}return "none"}var a_="__self__",S0={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},pp={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_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:a_,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:S0},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 o_=["high","medium","low"];function Wl(t,e){return t==="active"?o_.includes(e):t===e}var P0="activity_level";function l_(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),i=t.value,s=t.field===P0;switch(t.operator){case "eq":return s?Wl(i,r):r===i;case "neq":return s?!Wl(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 a=i.split(",").map(o=>o.trim());return s?a.some(o=>Wl(o,r)):a.includes(r)}default:return false}}function Zl(t,e,n={}){return t.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(n,r.experiment_id))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>l_(s,e))}).map(r=>r.handle)}function c_(t){let e={};for(let n of t)n.experiment_id&&(e[n.handle]=n.experiment_id);return e}function d_(t,e,n={}){for(let r of e){let i=t[r];if(!i)continue;let s=n[i];if(typeof s=="string")return {experiment_id:i,variant_key:s}}}function fp(t,e){let n=String(t.field||""),r=String(t.operator||""),i=String(t.value||""),s=e[n],a=typeof s=="string"||typeof s=="number"||typeof s=="boolean"?s:null,o=l_(t,e);return {field:n,operator:r,expected:i,actual:a,matched:o}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function Pp(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 p_={Named:"named",Minted:"minted"},f_="x-revturbine-schema-identity";function Qi(t="handle"){return {[f_]:{kind:p_.Named,handleField:t}}}function es(t="handle"){return {[f_]:{kind:p_.Minted,handleField:t}}}var vn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Li={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},T0="x-revturbine-context",C0="x-revturbine-in-config",R0="x-revturbine-sdk-input",k0="x-revturbine-source",E0="x-revturbine-deprecation",w0={[vn.Playbook]:Li.Customer,[vn.Branding]:Li.Customer,[vn.Billing]:Li.Stripe,[vn.Metering]:Li.Customer,[vn.CustomerOperations]:Li.Runtime,[vn.EventIngestion]:Li.Runtime};function Jn(t,e){return {[T0]:t,[C0]:e.inConfig??t===vn.Playbook,[R0]:e.sdkInput,[k0]:e.source??w0[t]}}function hp(t){return {deprecated:true,[E0]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var un=t=>z.object({items:z.array(t)}),rr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),B=t=>t,mn=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:ye}=Fi,{Persisted:Ip,Transient:li}=zs,{Internal:h_,External:Zr}=Ji,g_=Jn(vn.Playbook,{sdkInput:true}),A0=Jn(vn.Playbook,{inConfig:false,sdkInput:false}),__=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":li,"x-revturbine-schema-exposure":Zr}),Hd=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),O0=z.enum(zg).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),j0=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),b_=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),gp=z.object({entitlement_id:z.string().min(1).meta(ye),entitlement_handle:z.string().min(1).meta(ye),status:O0.meta(ye),limit:z.number().optional().meta(ye),used:z.number().optional().meta(ye),allocation:Hd.optional().meta(ye),enforcement:b_.optional().meta(ye),source:j0.optional().meta(ye),plan_id:z.string().optional().meta(ye),segment_id:z.string().optional().meta(ye),seat_type_id:z.string().optional().meta(ye),rule_id:z.string().optional().meta(ye)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr,...Fi.Operational});z.object({account:z.record(z.string(),gp).optional().meta(ye),instance:z.record(z.string(),gp).optional().meta(ye),user:z.record(z.string(),gp).optional().meta(ye)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr,...Fi.Operational});var F0=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),L0=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),y_=z.object({kind:L0.meta(ye),id:z.string().min(1).meta(ye)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),B0=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),lo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...ye,readOnly:true}),name:Is.meta(ye),handle:lr.meta(ye),customer_facing_description:z.string().max(500).optional().meta(ye),type:Od.meta(ye),unit:z.string().max(100).optional().meta(ye),period_scope:__.optional().meta(ye),allocation:Hd.optional().meta(ye),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ye),sort_order:z.number().int().default(0).meta(ye),metadata:gi.meta(ye)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":Zr,...g_,...Qi()}),U0=jr("EntitlementAnchor"),go=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...ye,readOnly:true}),handle:lr.meta({...ye,readOnly:true}),entitlement_id:z.string().min(1).meta(ye),targets:z.array(y_).min(1).meta(ye),segment_ids:z.array(z.string()).default([]).meta(ye),visibility:F0.default("public").meta(ye),period_scope:__.optional().meta(ye),instance:z.string().max(100).optional().meta(ye),reset_period:B0.optional().meta(ye),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ye),enforcement:b_.optional().meta(ye),warning_threshold_percent:ba.optional().meta(ye),overage_price_ref:z.string().optional().meta(ye),grace_period_hours:z.number().int().min(0).optional().meta(ye),tier_value:z.string().optional().meta(ye),rate_value:z.number().optional().meta(ye),initial_grant:z.number().optional().meta(ye),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ye),rollover_enabled:z.boolean().optional().meta(ye),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ye),seat_type_id:z.string().optional().meta(ye),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ye),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ye),stripe_metered_price_id:z.string().optional().meta(ye),enabled:z.boolean().optional().meta(ye),allocation:Hd.optional().meta(ye),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ye),amount_cents:z.number().int().optional().meta(ye),currency:z.string().optional().meta(ye)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":h_,...g_,...es()}),V0=jr("EntitlementRuleAnchor");go.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 q0=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),D0=z.object({code:q0.meta(ye),message:z.string().min(1).meta(ye),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ye)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),_p=go.extend({warnings:z.array(D0).optional().meta(ye)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),bp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...ye,readOnly:true}),rule_id:z.string().min(1).meta(ye),experiment_id:z.string().min(1).meta(ye),variant_name:z.string().min(1).max(200).meta(ye),is_control:z.boolean().default(false).meta(ye),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ye)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":h_,...A0,...es()}),M0=oi(lo),N0=oi(go);({"/api/entitlement-anchors":{get:B({operationId:"listEntitlementAnchors",requestParams:{query:mn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:un(U0)}}},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:B({operationId:"listEntitlementRuleAnchors",requestParams:{query:mn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:un(V0)}}},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:B({operationId:"listEntitlements",requestParams:{query:mn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:un(lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:B({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(lo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:B({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:B({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:M0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:B({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:B({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:mn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:un(go)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:B({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(go)}}},responses:{201:{description:"Created",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:B({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:N0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:B({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:mn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:un(bp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:B({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(bp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:rt}=Fi,{Persisted:ec,Transient:tc}=zs,{Internal:ts}=Ji,v_=Jn(vn.Playbook,{sdkInput:true}),x_=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),z0=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),Tp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),S_=z.object({name:Is.meta(rt),handle:lr.meta(rt),plan_id:z.string().nullable().optional().meta(rt),segment_id:z.string().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(rt),grace_period_days:z.number().int().min(0).default(0).meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),require_payment_method:z.boolean().default(false).meta(rt),auto_convert:z.boolean().default(true).meta(rt),convert_to_plan_id:z.string().optional().meta(rt),fallback_plan_id:z.string().optional().meta(rt),limit_per_customer:z.number().int().min(1).default(1).meta(rt),is_active:z.boolean().default(true).meta(rt),metadata:gi.meta(rt)}),ro=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(S_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...v_,...Qi()}),H0=jr("FreeTrialRuleAnchor"),K0=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),P_=z.object({name:Is.meta(rt),handle:lr.meta(rt),premium_plan_id:z.string().min(1).meta(rt),fallback_plan_id:z.string().min(1).meta(rt),segment_id:z.string().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),start_policy:K0.default("signup").meta(rt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(rt),entitlements_during_trial:z.array(z.string()).default([]).meta(rt),is_active:z.boolean().default(true).meta(rt),metadata:gi.meta(rt)}),io=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(P_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...v_,...Qi()}),G0=jr("ReverseTrialRuleAnchor"),I_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),T_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),so=On.merge(qn).merge(Dn).extend({trial_limit_policy:I_.default("1_per_lifetime").meta(rt),eligibility_scope:T_.default("per_customer").meta(rt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...x_}),ao=On.merge(qn).merge(Dn).extend({trial_limit_policy:I_.default("1_per_lifetime").meta(rt),eligibility_scope:T_.default("per_customer").meta(rt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...x_}),Nd=On.merge(qn).merge(Dn).extend({customer_id:z.string().min(1).meta(rt),rule_id:z.string().min(1).meta(rt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(rt),plan_id:z.string().min(1).meta(rt),status:z0.default("active").meta(rt),started_at:z.string().datetime().meta({...rt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),converted_at:Fd.meta(rt),cancelled_at:Fd.meta(rt),metadata:gi.meta(rt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts});({"/api/free-trial-rule-anchors":{get:B({operationId:"listFreeTrialRuleAnchors",requestParams:{query:mn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:un(H0)}}},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:B({operationId:"listFreeTrialRules",requestParams:{query:mn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:un(ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:B({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:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:B({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"listReverseTrialRuleAnchors",requestParams:{query:mn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:un(G0)}}},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:B({operationId:"listReverseTrialRules",requestParams:{query:mn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:un(io)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:B({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:io}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:B({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:io.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"listFreeTrialSettings",requestParams:{query:mn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:un(so)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:B({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:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:B({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:so.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:B({operationId:"listReverseTrialSettings",requestParams:{query:mn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:un(ao)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:B({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:B({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ao.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:B({operationId:"listTrialInstances",requestParams:{query:mn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:un(Nd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:B({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:B({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:B({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:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:rn,Financial:zd}=Fi,{Persisted:nc,Transient:Kd}=zs,{External:Ts}=Ji,$0=Jn(vn.Playbook,{sdkInput:true}),W0=Jn(vn.Playbook,{sdkInput:false}),Cp=Jn(vn.Billing,{sdkInput:false}),Ks=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),rc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),Gd=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),co=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),name:Is.meta(rn),handle:lr.meta(rn),tier_position:z.number().int().min(0).default(0).meta(rn),sort_order:z.number().int().default(0).meta(rn),visibility:Ks.default("public").meta(rn),metadata:gi.meta(rn)}).meta({id:"Plan","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...$0,...Qi()}),Z0=jr("PlanAnchor"),uo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),handle:lr.meta({...rn,readOnly:true}),plan_id:z.string().min(1).meta(rn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(rn),segment_id:z.string().nullable().default(null).meta(rn),price_amount:z.number().min(0).meta(zd),pricing_model:rc.meta(rn),visibility:Ks.default("public").meta(rn),stripe_price_id:z.string().optional().meta(rn),price_source:Gd.default("static").meta(rn)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp,...es()}),Y0=jr("PlanVariationAnchor"),mo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),name:Is.meta(rn),handle:lr.meta(rn),sort_order:z.number().int().default(0).meta(rn),visibility:Ks.default("public").meta(rn),metadata:gi.meta(rn)}).meta({id:"AddOn","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...W0,...Qi()}),J0=jr("AddOnAnchor"),po=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),handle:lr.meta({...rn,readOnly:true}),addon_id:z.string().min(1).meta(rn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(rn),segment_id:z.string().nullable().default(null).meta(rn),price_amount:z.number().min(0).meta(zd),pricing_model:rc.meta(rn),visibility:Ks.default("public").meta(rn),stripe_price_id:z.string().optional().meta(rn),price_source:Gd.default("static").meta(rn)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp,...es()}),X0=jr("AddOnVariationAnchor"),Q0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),fo=On.merge(qn).merge(Dn).extend({stripe_price_id:z.string().min(1).meta(rn),stripe_product_id:z.string().min(1).meta(rn),billing_period:Q0.meta(rn),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(zd),currency:Hg.meta(zd),pricing_model:rc.meta(rn),nickname:z.string().nullable().default(null).meta(rn),is_mock:z.boolean().default(false).meta(rn),last_updated_from_stripe:Fd.meta(rn)}).meta({id:"StripePrice","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp}),eT=oi(co),tT=oi(uo),nT=oi(mo),rT=oi(po),iT=oi(fo);({"/api/plan-anchors":{get:B({operationId:"listPlanAnchors",requestParams:{query:mn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:un(Z0)}}},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:B({operationId:"listPlans",requestParams:{query:mn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:un(co)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:B({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(co)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:co}}},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:B({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:co}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:B({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:eT}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:co}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:B({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:B({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:B({operationId:"listPlanVariationAnchors",requestParams:{query:mn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:un(Y0)}}},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:B({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:mn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:un(uo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:B({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(uo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:B({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:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:B({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tT}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:B({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:B({operationId:"listAddOnAnchors",requestParams:{query:mn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:un(J0)}}},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:B({operationId:"listAddOns",requestParams:{query:mn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:un(mo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:B({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(mo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:B({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:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:B({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:nT}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:B({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:B({operationId:"listAddOnVariationAnchors",requestParams:{query:mn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:un(X0)}}},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:B({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:mn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:un(po)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:B({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(po)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:B({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:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:B({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:rT}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:B({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:B({operationId:"listStripePrices",requestParams:{query:mn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:un(fo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:B({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(fo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:B({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:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:B({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:iT}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:B({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:f}=Fi,{Persisted:_o,Transient:ct}=zs,{Internal:vi,External:Ft}=Ji,Tt=Jn(vn.Playbook,{sdkInput:true}),ho=Jn(vn.Playbook,{sdkInput:false}),Hs=Jn(vn.Playbook,{inConfig:false,sdkInput:false}),C_=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),oo=Jn(vn.Playbook,{inConfig:false,sdkInput:true,source:Li.CodeConstant}),yp=Jn(vn.Playbook,{inConfig:false,sdkInput:true,source:Li.Runtime}),vp=Jn(vn.Playbook,{inConfig:false,sdkInput:false,source:Li.Runtime}),sT=Jn(vn.Billing,{sdkInput:false}),aT=Jn(vn.Metering,{sdkInput:false}),oT=Jn(vn.Branding,{inConfig:true,sdkInput:true}),lT=Jn(vn.Branding,{sdkInput:false}),cT="1.0.0",Yl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),name:Is.meta(f),handle:lr.meta(f),description:jd.meta(f),is_default:z.boolean().default(false).meta(f),entitlement_ids:z.array(z.string()).default([]).meta(f),metadata:gi.meta(f)}).meta({id:"SeatType","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...Hs,...Qi()}),dT=jr("SeatTypeAnchor"),Jl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta(f),label:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().nullable().default(null).meta(f),example_value:z.string().nullable().default(null).meta(f),value_map:z.record(z.string(),z.string()).default({}).meta(f),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(f),metadata:gi.meta(f)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...Hs,...Qi()}),uT=jr("PersonalizationTokenAnchor"),mT=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),xp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...f,readOnly:true}),stripe_account_id:z.string().min(1).meta(f),live_mode:z.boolean().default(false).meta(f),onboarding_state:mT.default("not_started").meta({...f,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...f,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...f,readOnly:true}),details_submitted:z.boolean().default(false).meta({...f,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...f,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...f,readOnly:true}),sync_products:z.boolean().default(true).meta(f),sync_prices:z.boolean().default(true).meta(f),sync_subscriptions:z.boolean().default(true).meta(f),sync_invoices:z.boolean().default(false).meta(f),default_currency:z.string().length(3).default("USD").meta(f),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(f),last_sync_at:z.string().optional().meta({...f,readOnly:true}),metadata:gi.meta(f)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...sT,...es()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(f),workspace_name:z.string().optional().meta(f),logo_url:z.string().optional().meta(f),support_email:z.string().optional().meta(f)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...lT});var Xl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),meter_key:z.string().min(1).max(100).meta(f),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(f),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(f),stripe_meter_id:z.string().nullable().default(null).meta(f),is_active:z.boolean().default(true).meta(f),metadata:gi.meta(f)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...aT,...es()}),u_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),Ql=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),soft_limit_percent:z.number().min(0).max(100).default(80).meta(f),hard_limit_percent:z.number().min(0).max(100).default(100).meta(f),soft_limit_action:u_.default("warn").meta(f),hard_limit_action:u_.default("block").meta(f),grace_period_hours:z.number().int().min(0).default(0).meta(f),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...C_,...es()}),pT=jr("UsageEnforcementSettingsAnchor"),fT=z.object({kind:z.enum(["template","slot"]).meta(f),id:z.string().min(1).meta(f),label:z.string().min(1).optional().meta(f)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),hT=z.object({id:z.string().min(1).meta(f),group:z.array(fT).min(1).meta(f),cap:z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month"]).meta(f)}).meta(f)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),gT=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),R_=z.object({capRules:z.array(hT).default([]).meta(f),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(f),remindLaterMinutes:z.number().int().min(0).default(60).meta(f),testMode:gT.default("off").meta(f)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),Sp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta({...f,readOnly:true}),global_frequency_cap:R_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(f)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...C_,...es()}),_T=jr("PlacementSettingsAnchor"),bT=z.object({field:z.string().min(1).meta(f),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(f),value:z.string().meta(f)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),yT=z.object({name:z.string().min(1).meta(f),handle:z.string().min(1).meta(f),predicates:z.array(bT).optional().meta(f),dimension_id:z.string().optional().meta(f),experiment_id:z.string().min(1).optional().meta(f)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),vT=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),tier_position:z.number().int().min(0).default(0).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Ks.default("public").meta(f)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),xT=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Ks.default("public").meta(f)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...ho}),ST=z.object({handle:z.string().min(1).meta(f),plan_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:rc.meta(f),visibility:Ks.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Gd.meta(f)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),PT=z.object({handle:z.string().min(1).meta(f),addon_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:rc.meta(f),visibility:Ks.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Gd.meta(f)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),IT=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),is_default:z.boolean().default(false).meta(f),entitlement_handles:z.array(z.string()).default([]).meta(f)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),TT=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().nullable().default(null).meta(f),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),soft_limit_action:z.string().meta(f),hard_limit_action:z.string().meta(f),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(f),notification_channels:z.array(z.string()).default([]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),CT=z.object({handle:z.string().min(1).meta(f),global_frequency_cap:R_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),RT=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:z.string().nullable().default(null).meta(f),visibility_toggle:z.boolean().default(true).meta(f),source_type:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),kT=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().min(1).meta(f),meter_handle:z.string().min(1).meta(f),limit:z.number().int().min(0).nullable().default(null).meta(f),reset_period:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),ET=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),type:Od.meta(f),unit:z.string().optional().meta(f),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),k_=z.object({id:z.string().min(1).meta(f),entitlement_id:z.string().min(1).meta(f),targets:z.array(y_).min(1).meta(f),segment_ids:z.array(z.string()).default([]).meta(f),kind:Od.optional().meta({...f,readOnly:true}),unit:z.string().optional().meta({...f,readOnly:true}),tier_name:z.string().optional().meta({...f,readOnly:true}),tier_description:z.string().optional().meta({...f,readOnly:true}),...go.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(f),allocation:Hd.optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),wT=z.object({slot_id:z.string().min(1).meta(f),active:z.boolean().meta(f),triggers:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),AT=z.object({id:z.string().min(1).meta(f),label:z.string().min(1).meta(f),description:z.string().meta(f),surface_type:z.string().meta(f),placement_handle:z.string().min(1).meta(f),template:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),OT=z.object({name:z.string().min(1).meta(f),type:z.string().optional().meta(f),required:z.boolean().optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),jT=z.object({id:z.string().min(1).meta(f),surface_type:z.string().meta(f),fields:z.array(OT).optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),FT=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":ct,"x-revturbine-schema-exposure":Ft}),LT=z.object({name:z.string().min(1).meta(f),action_type:FT.meta(f),plan_handle:z.string().optional().meta(f),promotion_id:z.string().optional().meta(f),placement_handle:z.string().optional().meta(f),url:z.string().optional().meta(f),tour_id:z.string().optional().meta(f),target_billing_period:z.enum(["monthly","annual"]).optional().meta(f),description:z.string().optional().meta(f)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),BT=z.object({id:z.string().meta(f),name:z.string().meta(f),discount:z.string().meta(f),type:z.string().meta(f),status:z.string().meta(f)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),UT=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(f),label:z.string().min(1).meta(f),description:z.string().optional().meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().optional().meta(f),example_value:z.string().optional().meta(f),value_map:z.record(z.string(),z.string()).optional().meta(f),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(f)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),m_=z.object({header:z.string().optional().meta(f),body:z.string().optional().meta(f),cta_label:z.string().optional().meta(f),secondary_cta_label:z.string().optional().meta(f)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),VT=z.object({block_id:z.string().min(1).meta(f),tenant_id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),surface_template_id:z.string().optional().meta(f),default_content:m_.meta(f),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:m_})).optional().meta(f),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(f),tokens_used:z.array(z.string()).optional().meta(f),status:z.enum(["draft","active","archived"]).meta(f),created_at:z.string().datetime().meta({...f,readOnly:true}),updated_at:z.string().datetime().meta({...f,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),qT=z.object({label:z.string().meta(f),path:Kg.meta(f),config:z.record(z.string(),z.string()).optional().meta(f)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),E_=z.object({template_id:z.string().min(1).meta(f),fields:z.record(z.string(),z.string()).meta(f),ctas:z.array(qT).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),w_=z.object({plan_ids:z.array(z.string()).meta(f),billing_cadences:z.array(z.string()).optional().meta(f),segment_chips:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),DT=z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month","lifetime"]).meta(f)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),A_=z.object({max_per_period:DT.optional().meta(f),cooldown_days:z.number().int().min(0).optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),MT=z.object({id:z.string().min(1).meta(f),target:w_.meta(f),surfaces:z.array(E_).meta(f),caps:A_.optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().optional().meta({...f,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(f),recommendation_plan_override:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),NT=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:ba}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ba}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ba}),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":ct,"x-revturbine-schema-exposure":Ft}),zT=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),HT=z.object({id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:zT.meta(f),trigger:NT.meta(f),payloads:z.array(MT).meta(f),order:z.number().int().min(0).meta(f)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),KT=z.object({payload_id:z.string().min(1).meta(f),placement_id:z.string().min(1).meta(f),target:w_.meta(f),caps:A_.optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().meta({...f,readOnly:true}),updated_at:z.string().datetime().optional().meta({...f,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(f),surfaces:z.array(E_).optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),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(f)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),GT=z.object({kind:z.string().min(1).meta(f),schema_version:z.number().int().nonnegative().meta(f),config:z.unknown().meta(f)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),$T=On.merge(S_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),WT=On.merge(P_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),ZT=z.object({plans:z.array(vT).meta({...f,...Tt}),addons:z.array(xT).optional().meta({...f,...ho}),entitlements:z.array(ET).meta({...f,...Tt}),entitlement_rules:z.array(k_).meta({...f,...Tt}),segments:z.array(yT).meta({...f,...Tt}),content_ui_paths:z.array(LT).meta({...f,...Tt}),slot_configs:z.array(wT).optional().meta({...f,...Tt,...hp({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...f,...Tt,...hp({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...f,...oT,...hp({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(AT).optional().meta({...f,...Tt}),message_blocks:z.array(VT).optional().meta({...f,...Tt}),placement_payloads:z.array(KT).optional().meta({...f,...Tt}),placements:z.array(HT).optional().meta({...f,...Tt}),content_promotions:z.array(BT).optional().meta({...f,...Tt}),personalization_tokens:z.array(UT).optional().meta({...f,...Tt}),surface_templates:z.array(jT).optional().meta({...f,...Tt}),free_trial_rules:z.array($T).optional().meta({...f,...ho}),reverse_trial_rules:z.array(WT).optional().meta({...f,...ho}),plan_variations:z.array(ST).optional().meta({...f,...ho}),addon_variations:z.array(PT).optional().meta({...f,...ho}),extension_rules:z.array(GT).optional().meta({...f,...Tt}),seat_types:z.array(IT).optional().meta({...f,...Tt}),enforcement_defaults:z.array(TT).optional().meta({...f,...Tt}),placement_settings:z.array(CT).optional().meta({...f,...Tt}),segment_dimensions:z.array(RT).optional().meta({...f,...Tt}),meter_bindings:z.array(kT).optional().meta({...f,...Tt}),experiments:z.array(z.unknown()).max(0).optional().meta({...f,...Hs}),signal_catalog:z.object({}).strict().optional().meta({...f,...Hs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),YT=z.object({artifact_type:z.literal("playbook").meta({...f,...oo,readOnly:true}),format_version:z.literal(cT).meta({...f,...oo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...f,...oo}),playbook_version_id:z.string().nullable().default(null).meta({...f,...yp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),project_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...f,...yp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...f,...oo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...f,...oo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...f,...oo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...yp}),O_=YT.extend(ZT.shape).meta({"x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});function JT(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function j_(t){if(!JT(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(j_,O_).meta({id:"Playbook","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});z.preprocess(j_,O_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});({"/api/seat-type-anchors":{get:B({operationId:"listSeatTypeAnchors",requestParams:{query:mn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:un(dT)}}},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:B({operationId:"listSeatTypes",requestParams:{query:mn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:un(Yl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:B({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:B({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:B({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:B({operationId:"listPersonalizationTokenAnchors",requestParams:{query:mn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:un(uT)}}},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:B({operationId:"listPersonalizationTokens",requestParams:{query:mn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:un(Jl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:B({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:B({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:B({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:B({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:oi(xp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:xp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:B({operationId:"listMeteringConfigs",requestParams:{query:mn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:un(Xl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:B({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:B({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Xl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:B({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:B({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:mn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:un(pT)}}},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:B({operationId:"listUsageEnforcementSettings",requestParams:{query:mn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:un(Ql)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:B({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ql}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:B({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:B({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:B({operationId:"listPlacementSettingsAnchors",requestParams:{query:mn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:un(_T)}}},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:B({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:oi(Sp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Sp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var $d=new Int32Array(2);new Float32Array($d.buffer);new Float64Array($d.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Wd;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(Wd||(Wd={}));var K_=14,G_=11;var $_=4294967295;var W_=$_;function Ep(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 kp(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Ep(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 Z_(t,e){let n=t.filter(a=>a.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(a=>a.trialTrigger?.kind!=="trial_progress"?false:e>=a.trialTrigger.progressPercent);if(r.length===0)return null;let i=r[0];for(let a of r.slice(1)){let o=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1,l=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(o>l||o===l&&a.entryOrder<i.entryOrder)&&(i=a);}let s=r.filter(a=>a!==i).map(a=>a.ruleId).filter(a=>typeof a=="string"&&a.length>0);return {winner:i,supersededIds:s}}function Y_(t){switch(t.kind){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof t.progressPercent=="number"?{kind:"trial_progress",progressPercent:t.progressPercent}:void 0;case "trial_ending":return typeof t.daysBeforeEnd=="number"?{kind:"trial_ending",daysBeforeEnd:t.daysBeforeEnd}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function J_(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 yo(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(a=>[a.block_id,a])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],i=Array.isArray(t.promotions)?t.promotions:[],s=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:a=>e.filter(o=>o.surface_template_id===a),getMessageBlockById:a=>n.get(a),getUiPathById:a=>r.find(o=>o.id===a||o.name===a),getPromotionById:a=>i.find(o=>o.id===a||o.name===a),listPersonalizationTokens:()=>s}}function vo(t,e){let n={...t};for(let r of e){let i=t[r.token];if(i==null||!r.value_map)continue;let s=String(i),a=r.value_map[s];a!==void 0&&(n[r.token]=a);}return n}function wp(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 s=e[i];if(s===void 0){let a=n[i];a&&(s=e[a]);}return s===void 0?r:String(s)})}function Ap(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 X_(t,e){return Ap(t,e)}function Yd(t,e,n,r,i,s,a){let o=n.filter(P=>P.surface_template_id===t&&P.status==="active");if(o.length===0)return null;let l=new Map(r.map(P=>[P.block_id,P])),b=new Set(e.segmentIds),p=vo(s,i),v=a?.segmentDimensions;for(let P of o){let S=P.default_message_block_id,y,T=P.ui_path_id,E=P.promotion_id;if(P.segment_content_map){if(v&&Object.keys(v).length>0){let R=new Map;for(let C of P.segment_content_map){let D=C.dimension;if(!D)continue;let ae=R.get(D)??[];ae.push(C),R.set(D,ae);}if(R.size>0){let C=true,D;for(let[,ae]of R){let Me=ae.find(L=>b.has(L.segment_id));if(!Me){C=false;break}D||(D=Me);}if(C&&D)S=D.message_block_id,y=D.segment_id,D.ui_path_id&&(T=D.ui_path_id),D.promotion_id&&(E=D.promotion_id);else if(!C)continue}else for(let C of P.segment_content_map)if(b.has(C.segment_id)){S=C.message_block_id,y=C.segment_id,C.ui_path_id&&(T=C.ui_path_id),C.promotion_id&&(E=C.promotion_id);break}}else for(let R of P.segment_content_map)if(b.has(R.segment_id)){S=R.message_block_id,y=R.segment_id,R.ui_path_id&&(T=R.ui_path_id),R.promotion_id&&(E=R.promotion_id);break}}let A=l.get(S);if(!A||A.status!=="active")continue;let k={...A.default_content};if(A.segment_overrides){let R=y?A.segment_overrides.find(C=>C.segment_value_id===y):A.segment_overrides.find(C=>b.has(C.segment_value_id));R&&(k={...k,...R.content},y=R.segment_value_id);}let O=X_(k,p);return {payload:P,messageBlock:A,resolvedContent:O,matchedSegmentId:y,uiPathId:T,promotionId:E}}return null}async function sc(t,e,n,r,i){let a=(await Promise.resolve(n.listPayloads(t))).filter(p=>p.status==="active");if(a.length===0)return null;let o=new Set(e.segmentIds),l=i??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),b=vo(r,l);for(let p of a){let v=p.default_message_block_id,P,S=p.ui_path_id,y=p.promotion_id;if(p.segment_content_map){for(let R of p.segment_content_map)if(o.has(R.segment_id)){v=R.message_block_id,P=R.segment_id,R.ui_path_id&&(S=R.ui_path_id),R.promotion_id&&(y=R.promotion_id);break}}let T=await Promise.resolve(n.getMessageBlockById(v));if(!T||T.status!=="active")continue;let E={...T.default_content};if(T.segment_overrides){let R=P?T.segment_overrides.find(C=>C.segment_value_id===P):T.segment_overrides.find(C=>o.has(C.segment_value_id));R&&(E={...E,...R.content},P=R.segment_value_id);}let A=X_(E,b),k;S&&n.getUiPathById&&(k=await Promise.resolve(n.getUiPathById(S)));let O;return y&&n.getPromotionById&&(O=await Promise.resolve(n.getPromotionById(y))),{payload:p,messageBlock:T,resolvedContent:A,matchedSegmentId:P,uiPathId:S,promotionId:y,uiPath:k??void 0,promotion:O??void 0}}return null}function QT(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 eC(t,e){let n=QT(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 tC(t,e){if(!e)return null;let n=eC(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 D_(t,e){if(!t)return true;let n=tC(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Ne}=Fi,{Persisted:Jd,Transient:Gs}=zs,{External:xi}=Ji,Q_=Jn(vn.Playbook,{sdkInput:true});Jn(vn.Playbook,{inConfig:false,sdkInput:false});var nC=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),rC=Jn(vn.Playbook,{inConfig:false,sdkInput:false,source:Li.Runtime}),iC=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),sC={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function aC(t){return sC[t]??[]}function oC(t,e){return aC(e).includes(t)}var eb=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),tb=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),lC=z.object({count:z.number().int().positive().meta(Ne),period:tb.meta(Ne)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi});z.object({surface_type:z.string().min(1).meta(Ne),rules:z.array(lC).meta(Ne),cooldown_ms:z.number().int().nonnegative().optional().meta(Ne)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Fi.Operational,...nC});var cC=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":xi}),bo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),name:Is.meta(Ne),handle:lr.meta(Ne),description:jd.meta(Ne),category:eb.meta(Ne),drag_order_in_category:z.number().int().default(0).meta(Ne),surface_slot_id:z.string().optional().meta(Ne),entitlement_id:z.string().optional().meta(Ne),tier_threshold:z.string().optional().meta(Ne),threshold_percent:ba.optional().meta(Ne),trial_type:z.enum(["free","reverse"]).optional().meta(Ne),trigger_type:z.string().optional().meta(Ne),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ne),days_before_end:z.number().int().min(0).optional().meta(Ne),qualifier:iC.optional().meta(Ne),activation_window_start:z.string().datetime().optional().meta(Ne),activation_window_end:z.string().datetime().optional().meta(Ne),metadata:gi.meta(Ne)}).meta({id:"Placement","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Q_,...Qi()}),dC=jr("PlacementAnchor"),uC=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),mC=z.object({code:uC.meta(Ne),message:z.string().min(1).meta(Ne),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ne)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),M_=bo.extend({warnings:z.array(mC).optional().meta(Ne)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),pC=z.object({label:z.string().min(1).max(200).meta(Ne),cta_path_type:cC.meta(Ne),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ne)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),ic=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),handle:lr.meta({...Ne,readOnly:true}),placement_id:z.string().min(1).meta(Ne),drag_order:z.number().int().default(0).meta(Ne),target_plan_ids:z.array(z.string()).default([]).meta(Ne),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ne),target_segments:z.array(z.string()).default([]).meta(Ne),surface_slot_ids:z.array(z.string()).default([]).meta(Ne),surface_template_id:z.string().min(1).meta(Ne),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ne),cta_list:z.array(pC).default([]).meta(Ne),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ne),max_period_unit:tb.default("session").meta(Ne),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ne),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ne),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ne),recommendation_plan_override:z.string().optional().meta(Ne)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Q_,...es()}),fC=jr("PlacementPayloadAnchor"),hC=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ne),surface_type:Jm.meta(Ne),surface_template_ids:z.array(z.string()).default([]).meta(Ne),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ne),first_seen:z.string().datetime().meta({...Ne,readOnly:true}),last_seen:z.string().datetime().meta({...Ne,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ne),placement_count:z.number().int().min(0).default(0).meta({...Ne,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...rC,...Qi("surface_slot_handle")}),gC=oi(bo),_C=oi(ic);({"/api/placement-anchors":{get:B({operationId:"listPlacementAnchors",requestParams:{query:mn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:un(dC)}}},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:B({operationId:"listPlacements",requestParams:{query:mn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:un(bo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:B({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Or(bo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:M_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:B({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:B({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:gC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:M_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:B({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:B({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:B({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:eb,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:B({operationId:"listPlacementPayloadAnchors",requestParams:{query:mn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:un(fC)}}},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:B({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:mn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:un(ic)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:B({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Or(ic)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:B({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:_C}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:B({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:B({operationId:"listSurfaceSlots",requestParams:{query:mn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:un(hC)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function N_(t,e,n){if(!t)return true;if(!oC(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 z_(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 s=n?.tiers?.[t.entitlementHandle];return (s?r.indexOf(s):-1)<i}var nb={modal_overlay:"modal",banner_placement:"banner",in_page_card:"in_page",inline_gate_message:"in_page",usage_counter:"in_page",button:"button",email:"email",full_page:"full_page"};function bC(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 yC(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=bC(r,t);continue}e[n]=r;}return e}function rb(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 ib(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function vC(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 ib(e,n)}function xC(t){if(t)return ib(t.kind,t.qualifier)}function sb(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 SC(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 sb(n,e,r)}function PC(t,e){if(t)return sb(t.kind,e,t.thresholdPercent)}function ab(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 IC(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 ab(n,e,r)}function TC(t,e){if(t)return ab(t.kind,e,t.tierThreshold)}function CC(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function RC(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function kC(t,e){let n={...nb};for(let o of t.surface_templates??[])n[o.id]=o.surface_type;let r=new Map;for(let o of t.plans??[])r.set(o.unique_handle,o.unique_handle);let i=new Map;for(let o of t.entitlements??[])o.tier_definitions?.length&&i.set(o.unique_handle,o.tier_definitions.map(l=>l.handle));let s=new Map,a=new Map;for(let o of e.placements){let l=o.payloads[0];if(!l)continue;let b=l.surfaces[0];if(!b)continue;let p=b.template_id,v=n[p]??"custom",P={...b.fields};b.ctas?.[0]&&(P.cta_label=b.ctas[0].label),b.ctas?.[1]&&(P.secondary_cta_label=b.ctas[1].label);let S=rb(b.ctas?.[0]),y=Array.isArray(l.target?.plan_ids)?l.target.plan_ids:[],T=CC(o.trigger),E=RC(o.trigger),A=J_(o.trigger),k=SC(o.trigger,T),O=vC(o.trigger),R=IC(o.trigger,T),C={output_id:l.id,category:o.category,surface:{template:p,type:v,slot_id:o.id},content:{...P,__target_plan_ids:y,...T?{__trigger_entitlement_handle:T}:{},...A?{__trigger_kind:A.kind}:{}},cta_path:S,rule_id:o.id,decision_id:l.id,config_version:wd(t),present_upsell:true},D=s.get(p)??[];D.push({output:C,entryOrder:o.order??0,entryCategory:o.category,triggerEntitlementHandle:T,triggerSlotId:E,trialTrigger:A,thresholdTrigger:k,qualifierTrigger:O,entitlementGateTrigger:R}),s.set(p,D);let ae=o.id.replace(/^pl_/,"");a.set(ae,C),a.set(o.id,C);}for(let o of s.values())o.sort((l,b)=>l.entryOrder-b.entryOrder);return {outputsByTemplate:s,outputsByName:a,planHandleToId:r,tierLaddersByHandle:i}}function EC(t,e){let n=e.trigger;if(n.kind==="entitlement_gate"||n.kind==="usage_threshold"||n.kind==="credit_threshold"||n.kind==="seat_threshold")return t.getEntitlement(n.entitlementIdx)?.uniqueHandle}function wC(t,e){return e.trigger.kind!=="surface_render"?void 0:t.getSlot(e.trigger.slotIdx)?.sourceId}function AC(t){let e={...nb};for(let o=0;o<t.surfaceTemplatesLength();o++){let l=t.getSurfaceTemplate(o);l&&(e[l.sourceId]=l.surfaceType);}let n=new Map;for(let o=0;o<t.plansLength();o++){let l=t.getPlan(o);l&&n.set(l.uniqueHandle,l.sourceId);}let r=new Map;for(let o=0;o<t.entitlementsLength();o++){let l=t.getEntitlement(o);l&&l.tierHandles.length>0&&r.set(l.uniqueHandle,l.tierHandles);}let i=new Map,s=new Map,a=t.header().configVersion;for(let o=0;o<t.placementsLength();o++){let l=t.getPlacement(o);if(!l)continue;let b=l.payloads[0];if(!b)continue;let p=b.surfaces[0];if(!p)continue;let v=p.templateSourceId,P=e[v]??"custom",S={...p.fields};p.ctas[0]&&(S.cta_label=p.ctas[0].label),p.ctas[1]&&(S.secondary_cta_label=p.ctas[1].label);let y=rb(p.ctas[0]),T=[];for(let L of b.target.planIdxs){let J=t.getPlan(L);J&&T.push(J.sourceId);}let E=EC(t,l),A=wC(t,l),k=Y_(l.trigger),O=PC(l.trigger,E),R=xC(l.trigger),C=TC(l.trigger,E),D={output_id:b.sourceId,category:l.category,surface:{template:v,type:P,slot_id:l.sourceId},content:{...S,__target_plan_ids:T,...E?{__trigger_entitlement_handle:E}:{},...k?{__trigger_kind:k.kind}:{}},cta_path:y,rule_id:l.sourceId,decision_id:b.sourceId,config_version:a,present_upsell:true},ae=i.get(v)??[];ae.push({output:D,entryOrder:l.order,entryCategory:l.category,triggerEntitlementHandle:E,triggerSlotId:A,trialTrigger:k,thresholdTrigger:O,qualifierTrigger:R,entitlementGateTrigger:C}),i.set(v,ae);let Me=l.sourceId.replace(/^pl_/,"");s.set(Me,D),s.set(l.sourceId,D);}for(let o of i.values())o.sort((l,b)=>l.entryOrder-b.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:n,tierLaddersByHandle:r}}function OC(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let i=new Map;for(let a of e.placements){let o=a.payloads[0]?.surfaces?.[0]?.template_id;o&&i.set(a.id,o);}let s=[];for(let a of r){let o=a.content_link?.message_block_id;if(!o)continue;let l=i.get(a.placement_id);l&&s.push({payload_id:a.payload_id,tenant_id:"",name:a.payload_id,surface_template_id:l,default_message_block_id:o,ui_path_id:a.content_link?.ui_path_id,promotion_id:a.content_link?.promotion_id,status:"active"});}if(s.length!==0)return yo({payloads:s,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function jC(t){let e=t.messageBlocksLength(),n=t.placementPayloadsLength();if(e===0||n===0)return;let r=new Map;for(let o=0;o<t.placementsLength();o++){let l=t.getPlacement(o);if(!l)continue;let b=l.payloads[0]?.surfaces?.[0]?.templateSourceId;b&&r.set(l.sourceId,b);}let i=[],s=new Map;for(let o=0;o<e;o++){let l=t.getMessageBlock(o);l&&(i.push(l),s.set(o,l.block_id));}let a=[];for(let o=0;o<n;o++){let l=t.getPlacementPayload(o);if(!l||l.messageBlockIdx===W_)continue;let b=s.get(l.messageBlockIdx);if(!b)continue;let p=r.get(l.placementSourceId);p&&a.push({payload_id:l.sourceId,tenant_id:"",name:l.sourceId,surface_template_id:p,default_message_block_id:b,status:"active"});}if(a.length!==0)return yo({payloads:a,messageBlocks:i})}function FC(t){let e={};for(let n=0;n<t.segmentsLength();n++){let r=t.getSegment(n);r?.experimentId&&(e[r.slug]=r.experimentId);}return e}function ob(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:i,planHandleToId:s,tierLaddersByHandle:a}=e.format==="flatbuffer"?AC(e.handle):kC(e.exportedConfig,e.placements),o=e.format==="json"?OC(e.exportedConfig,e.placements):jC(e.handle),l=e.format==="json"?c_(e.exportedConfig.segments??[]):FC(e.handle);function b(p,v,P,S){let y=Array.isArray(p.content.__target_plan_ids)?p.content.__target_plan_ids.filter(E=>typeof E=="string"):[],T=Array.isArray(p.content.__target_billing_periods)?p.content.__target_billing_periods.filter(E=>typeof E=="string"):[];return Pp({target_plan_ids:y,target_billing_periods:T,category:p.category},{currentPlanId:v,planHandle:P,billingPeriod:S}).eligible}return async(p,v,P)=>{let S=P?.__providers,y=S?.plan?.currentPlanHandle,T=S?.plan?.billingPeriod,E=y?s.get(y):void 0,A=Xe=>typeof Xe=="string"?Xe:"",k=Array.isArray(v?.metadata?.surface_template_ids)?v.metadata.surface_template_ids:void 0,O,R=[];if(k&&k.length>0){let Xe=[];for(let jt of k){let Ir=r.get(jt);Ir&&Xe.push(...Ir);}if(Xe.length===0)return H_(p,"no_candidates_for_template","No placements configured for this surface template");Xe.sort((jt,Ir)=>jt.entryOrder-Ir.entryOrder);let zt=v?.metadata?.entitlement_handle,At=v?.metadata?.surface_slot_category,Jt=At?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[At]:void 0,Ot=Xe;if(zt){let jt=Xe.filter(Ir=>Ir.triggerEntitlementHandle===zt);jt.length>0&&(Ot=jt);}let Y=v?.metadata?.surface_slot_id;if(Y){let jt=Ot.filter(Ir=>Ir.triggerSlotId===Y);jt.length>0&&(Ot=jt);}if(v?.metadata?.fixedOnly===true&&(Ot=Ot.filter(jt=>jt.entryCategory==="fixed")),Jt&&At!=="fixed"&&Ot.length>1){let jt=Ot.filter(Ir=>Jt.includes(Ir.entryCategory));jt.length>0&&(Ot=jt);}n&&(Ot=Ot.filter(jt=>!n.isHiddenSync(jt.output.rule_id??""))),Ot=Ot.filter(jt=>kp(jt.trialTrigger,S?.plan)),Ot=Ot.filter(jt=>D_(jt.thresholdTrigger,S?.entitlements)),Ot=Ot.filter(jt=>N_(jt.qualifierTrigger,jt.entryCategory,S?.plan)),Ot=Ot.filter(jt=>z_(jt.entitlementGateTrigger,a,S?.entitlements));let X,je=[],Zn=Ep(S?.plan);if(Zn!==null&&Ot.length>1){let jt=Ot.map(Ja=>({ruleId:Ja.output.rule_id??void 0,entryOrder:Ja.entryOrder,trialTrigger:Ja.trialTrigger,output:Ja.output})),Ir=Z_(jt,Zn);if(Ir){X=Ir.winner,je=Ir.supersededIds;let Ja=Ir.winner.ruleId;Ot=Ot.filter(Og=>Og.trialTrigger?.kind!=="trial_progress"||(Og.output.rule_id??void 0)===Ja);}}let Gr;for(let jt of Ot)if(b(jt.output,E,y,T)){O=jt.output,Gr=jt;break}Gr&&X&&X.ruleId===(Gr.output.rule_id??void 0)&&je.length>0&&(O={...O,content:{...O.content,__superseded_placement_ids:je}}),O||(R=["no_eligible_candidate"]);}else {let Xe=v?.name,zt=(Xe?i.get(Xe):void 0)??i.get(p.placementId),At;if(zt)for(let dn of r.values()){let Jt=dn.find(Ot=>Ot.output===zt);if(Jt){At=Jt;break}}zt&&n?.isHiddenSync(zt.rule_id??"")?R=["placement_retired"]:zt&&!kp(At?.trialTrigger,S?.plan)?R=["trial_trigger_unmet"]:zt&&!D_(At?.thresholdTrigger,S?.entitlements)?R=["threshold_trigger_unmet"]:zt&&!N_(At?.qualifierTrigger,At?.entryCategory??zt.category,S?.plan)?R=["qualifier_trigger_unmet"]:zt&&!z_(At?.entitlementGateTrigger,a,S?.entitlements)?R=["entitlement_gate_unmet"]:zt&&b(zt,E,y,T)?O=zt:zt?R=["plan_target_mismatch"]:R=["placement_not_found"];}if(!O){let Xe=R[0]??"placement_not_found";return H_(p,Xe,"Placement not configured")}let C=O.content,D=O.surface.template;if(o&&D){let Xe={userId:typeof p.userId=="string"?p.userId:"",segmentIds:S?.segments?.segmentIds??[]},zt=await sc(D,Xe,o,{});zt&&(C={...O.content,...zt.resolvedContent});}let ae={...C},Me=typeof ae.entitlement=="string"?ae.entitlement:typeof ae.__trigger_entitlement_handle=="string"?ae.__trigger_entitlement_handle:void 0,L=Me?S?.entitlements?.usage?.[Me]:void 0;if(L){ae.usage_remaining=Number.isFinite(L.remaining)?L.remaining:0,ae.usage_limit=Number.isFinite(L.limit)?L.limit:0,ae.usage_current=Number.isFinite(L.used)?L.used:0,ae.usage_percent=L.limit>0?Math.min(100,Math.round(L.used/L.limit*100)):0;let Xe=L.reset_date;typeof Xe=="string"&&Xe.length>0&&(ae.reset_date=Xe);}let J=yC(ae),ge=d_(l,S?.segments?.segmentIds??[],S?.experiments?.assignments),Ae={...O,content:J,...ge},Je=!((O.category==="upsell"||O.category==="trial_conversion")&&y==="enterprise");return {placementId:p.placementId,requestId:`local_${Date.now()}`,visible:Je,decisionSource:"fallback",reasonCodes:Je?[]:["plan_tier_suppressed"],content:{header:A(Ae.content.header),body:A(Ae.content.body),cta_label:A(Ae.content.cta_label),title:A(Ae.content.header),cta:A(Ae.content.cta_label)},output:Ae}}}function H_(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 ya(t){return ob({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}var lb=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(lb).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)});function So(){return typeof window>"u"||typeof document>"u"}function Fr(){return !So()}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([s,a])=>{let o=this.cache.get(s),l=Date.now();if(o&&o.ttlMs>0&&l-o.resolvedAt<o.ttlMs)return [s,o.value];let b=await a.resolve();return this.cache.set(s,{value:b,resolvedAt:l,ttlMs:a.cacheTtlMs??0}),[s,b]})),n={},r={},i=false;for(let[s,a]of e)if(s==="traits"||s.startsWith("traits:")){let o=a;o?.traits&&(Object.assign(r,o.traits),i=true);}else n[s]=a;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();}},VC=new Set(["cta_completed"]),qC=1440*60*1e3,cb=10080*60*1e3,DC="revturbine:interaction-state",db=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cb,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??{},s={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let a=Number(r.remind_after_seconds);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(s.suppressedUntil=n+300*1e3),this.state.set(e,s),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 `${DC}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},MC="revturbine:presentation-caps";function xo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function NC(t){if(!xo(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 ub=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:[]},s={...i,seenAt:i.seenAt.filter(l=>Number.isFinite(l)&&l>0)},a=Gl({perPayload:{policies:e,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!a.allowed)return this.capsByKey.set(n,s),{allowed:false,reason:a.reason};s.seenAt.push(r);let o=e.map(l=>l.cooldownMs).filter(l=>typeof l=="number"&&Number.isFinite(l)&&l>0);return o.length>0?s.cooldownUntil=r+Math.max(...o):delete s.cooldownUntil,this.capsByKey.set(n,s),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(a=>Number.isFinite(a)&&a>0):[],s=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:i,cooldownUntil:s});}}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 `${MC}:${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,xo(t.content)?t.content.payload:void 0,xo(t.content)?t.content.placement:void 0,xo(t.content)?t.content.surface:void 0];for(let r of n){if(!xo(r))continue;let i=xo(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=NC(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),l=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...l!==void 0?{cooldownMs:l}:{}});}return e}},Po=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 mb(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function pb(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 jp=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??qC,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cb;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}async recordClickThru(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}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 s=i??this.defaultSuppressionMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}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 s={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,s);}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);}},zC=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=fb(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return hb(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return gb(e)}clear(t){this.records.delete(t);}},HC="revturbine:impression-history",Xd=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=fb(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return hb(e)}getSuppressedPlacements(t){let e=this.load(t);return gb(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${HC}:${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 fb(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 hb(t){let e=new Set;for(let n of t)VC.has(n.outcome)&&e.add(n.placementId);return e}function gb(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 s=i.metadata?.suppressUntil;typeof s=="string"&&new Date(s).getTime()>n&&e.set(i.placementId,s);}return e}function KC(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",s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={},o={};for(let l of e.entitlements??[]){a[l.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let b=t.usage?.[l.unique_handle];b&&(o[l.unique_handle]={used:b.used,limit:b.limit,remaining:Math.max(0,b.limit-b.used),unit:l.unit});}return {entries:a,usage:o,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(s);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(s=>s.handle),segmentSlugs:(e.segments??[]).map(s=>s.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:n,resolve:()=>{let s={},a=new Map;for(let l of e.entitlements??[]){let b=l;typeof b.unique_handle=="string"&&typeof b.type=="string"&&a.set(b.unique_handle,b.type);}for(let l of e.entitlement_rules??[]){let b=l.entitlement_id;s[b]||(s[b]=[]);let p=l,v=Array.isArray(p.segment_ids)?p.segment_ids.filter(y=>typeof y=="string"):typeof p.segment_id=="string"&&p.segment_id!=="all"?[p.segment_id]:[],P=Array.isArray(p.plan_ids)?p.plan_ids.filter(y=>typeof y=="string"):[],S={ruleId:l.id,entitlementId:b,planIds:(l.targets??[]).length>0?(l.targets??[]).filter(y=>y.kind==="plan").map(y=>y.id):P,segmentIds:v,kind:(()=>{let y=typeof p.type_fields=="object"&&p.type_fields!==null?p.type_fields:{};return (typeof p.kind=="string"?p.kind:void 0)??(typeof y.kind=="string"?y.kind:void 0)??a.get(b)??"feature"})(),fields:{...typeof p.type_fields=="object"&&p.type_fields!==null?p.type_fields:{},...p}};s[b].push(S);}let o={};for(let l of e.segments??[])typeof l.dimension_id=="string"&&typeof l.handle=="string"&&(o[l.handle]=l.dimension_id);return {entitlementRules:s,segmentDimensions:o,configVersion:wd(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:n,resolve:()=>{let s={};for(let a of e.message_blocks??[])s[a.block_id]={blockId:a.block_id,name:a.name,defaultContent:a.default_content,segmentOverrides:a.segment_overrides?.map(o=>({segmentId:o.segment_value_id,content:o.content})),status:a.status};return {messageBlocks:s,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 GC(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let i=e.user_context,s={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(s);}if(e.entitlements){let i=e.entitlements,s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={};for(let[o,l]of Object.entries(i))a[o]=l;return {entries:a}}};r.push(s);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let s={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:i.segment_ids})};r.push(s);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let s={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:i.traits})};r.push(s);}}if(e.theme){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var _b=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new Po;this.registry=new oc;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new db({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new ub({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new jp({store:t.impressionStore??new zC,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new ep({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);return n.reason==="no_entitlement_provider"?this.deriveEntitlementFromConfig(t,e):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 Zl(e,t)}buildTargetingState(t,e){return Md(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return to({userId:this.userId,providers:e,base:t})}setUserId(t){this.userId=t,this.impressionHistory.setUserId(t);}getUserId(){return this.userId}getExportedConfig(){return this.exportedConfig}async hydrate(){await this.impressionHistory.hydrate();}updateProviders(t){this.registry.clear();for(let e of t)this.registry.register(e);}slotRecordForConfig(t){if(t.slotId){let r=this.registeredPlacements.get(t.slotId);if(r)return r}let n=(this.exportedConfig.placement_slots??[]).find(r=>t.slotId?r.id===t.slotId:t.surfaceType?r.surface_type===t.surfaceType:false);return n?{id:n.id,name:t.placementHandle??n.placement_handle,route:"",metadata:{surface_slot_id:n.id,surface_type:n.surface_type,surface_template_ids:n.template?[n.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return ya({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e){return Hl({handle:t,context:e,currentPlanHandle:"",segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"allowed",allowed:true,reason:"local_runtime_default_allow"}}},$C=["web-client","server"],WC=z.enum($C),ZC=["method","meta","component"],YC=z.enum(ZC),JC=["ts","python","java","csharp","rust"];z.enum(JC);var XC=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(),QC=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:YC,appliesTo:z.array(WC).min(1),composes:z.string().min(1).optional(),perLanguage:XC.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"]}),eR=z.object({version:z.number().int().positive(),functions:z.array(QC).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 s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});eR.parse({version:2,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client","server"],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","server"],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:"evaluate",aliases:[],kind:"method",appliesTo:["server"],description:"Batch-evaluate placements + entitlements for a user, returning a serializable payload the client SDK can hydrate."},{canonical:"getTrialStatus",aliases:[],kind:"method",appliesTo:["server"],description:"Fetch the user's trial status for server-side gating."},{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 tR=[{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 nR(){let t=[];for(let[e,n]of Object.entries(pp))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function rR(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(rR([...nR(),...tR]));var bb="traits:server",lc=class{constructor(){w(this,"domain",bb);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 Fp={workspace_name:"Your workspace",theme:{}};function yb(t){return !!t&&Object.keys(t).length>0}var vb=false;function Lp(t={}){let e=(n,r)=>({branding:{...Fp,...n,theme:{...Fp.theme,...n?.theme}},source:r});return yb(t.explicit)?e(t.explicit,"explicit"):yb(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!vb&&ha()&&(vb=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 xb="[REDACTED]",iR=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,sR=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,aR=/\d(?:[ -]?\d){12,18}/g;function oR(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 s=i*2;s>9&&(s-=9),e+=s;}else e+=i;n=!n;}return e%10===0}function lR(t){let e=0,n=t.replace(iR,()=>(e+=1,xb));return n=n.replace(aR,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&oR(i)?(e+=1,xb):r}),{value:n,count:e}}function Bp(t){let e=0,n=r=>{if(typeof r=="string"){let i=lR(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let i={};for(let[s,a]of Object.entries(r))i[s]=n(a);return i}return r};return {value:n(t),redactions:e}}function cR(t){return sR.test(t.trim())}function dR(t){let e=t.trim().toLowerCase();return `eml_${pR(e).slice(0,16)}`}function Up(t){return cR(t)?{value:dR(t),redacted:true}:{value:t,redacted:false}}function Sb(t){let e=Up(t.user_id??""),n=Bp({url:t.url,path:t.path,page_title:t.page_title,tags:t.tags,traits:t.identity?.traits??null,properties:t.properties});return {value:{...t,url:n.value.url,path:n.value.path,page_title:n.value.page_title,tags:n.value.tags,user_id:t.user_id===null||t.user_id===void 0?t.user_id:e.value,identity:t.identity?{...t.identity,traits:n.value.traits??void 0}:t.identity,properties:n.value.properties},redactions:n.redactions+(e.redacted?1:0)}}var uR=[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 mR(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,s=t.charCodeAt(n+1);n+=1,r=65536+((i&1023)<<10)+(s&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 ns(t,e){return t>>>e|t<<32-e}function pR(t){let e=mR(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let P=0;P<4;P+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,i=3144134277,s=1013904242,a=2773480762,o=1359893119,l=2600822924,b=528734635,p=1541459225,v=new Array(64);for(let P=0;P<e.length;P+=64){for(let C=0;C<16;C+=1){let D=P+C*4;v[C]=(e[D]<<24|e[D+1]<<16|e[D+2]<<8|e[D+3])>>>0;}for(let C=16;C<64;C+=1){let D=ns(v[C-15],7)^ns(v[C-15],18)^v[C-15]>>>3,ae=ns(v[C-2],17)^ns(v[C-2],19)^v[C-2]>>>10;v[C]=v[C-16]+D+v[C-7]+ae>>>0;}let S=r,y=i,T=s,E=a,A=o,k=l,O=b,R=p;for(let C=0;C<64;C+=1){let D=ns(A,6)^ns(A,11)^ns(A,25),ae=A&k^~A&O,Me=R+D+ae+uR[C]+v[C]>>>0,L=ns(S,2)^ns(S,13)^ns(S,22),J=S&y^S&T^y&T,ge=L+J>>>0;R=O,O=k,k=A,A=E+Me>>>0,E=T,T=y,y=S,S=Me+ge>>>0;}r=r+S>>>0,i=i+y>>>0,s=s+T>>>0,a=a+E>>>0,o=o+A>>>0,l=l+k>>>0,b=b+O>>>0,p=p+R>>>0;}return [r,i,s,a,o,l,b,p].map(P=>P.toString(16).padStart(8,"0")).join("")}var Pb={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"},Ib="control_plane_source";function Vp(t,e={}){return {eventName:t,properties:{[Ib]:Pb[t],...e}}}var cc=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 $s(t){if(t)return t;if(Fr())try{return new cc(window.localStorage)}catch{}return new Po}function qp(t){if(t)return t;if(Fr())try{return new cc(window.sessionStorage)}catch{}return new Po}var fR=/^[a-z0-9._]{1,100}$/,Qn={Persisted:"persisted",Transient:"transient"},Mn={Internal:"internal",External:"external"},jn={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 Bb="x-revturbine-schema-exposure",gR="readOnly",_R="x-revturbine-decision-only",Tb={[_R]:true},ci={[Bb]:Mn.External},bR={[Bb]:Mn.Internal};function Rr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[gR]===true||(e[n]=r);}return z.object(e)}function Cr(t){let e=Rr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(fR)}):e}var {Unrestricted:dr}=jn,{Transient:Ur,Persisted:yR}=Qn,{Internal:xa,External:is}=Mn;z.object({page:z.coerce.number().int().min(1).default(1).meta(dr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(dr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var vR=t=>z.object({items:z.array(t).meta(dr),total:z.number().int().min(0).meta(dr),page:z.number().int().min(1).meta(dr),per_page:z.number().int().min(1).meta(dr),has_more:z.boolean().meta(dr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Fe=z.object({created_at:z.string().datetime().meta({...dr,readOnly:true}),updated_at:z.string().datetime().meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),_e=z.object({id:z.string().min(1).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Ze=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var su=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Ub=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var rf=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),xR=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa});var $n=z.string().min(1).max(200),bn=z.string().min(1).max(100),Sa=z.string().max(500).optional(),Nn=z.record(z.string(),z.unknown()).default({}),_c=z.number().int().min(10).max(100).multipleOf(10),Un=z.string().datetime().nullable().default(null),Sn=z.object({environment_id:z.string().min(1).default("production").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),Rn=z.object({playbook_version_id:z.string().nullable().default(null).meta(dr),is_current:z.boolean().default(true).meta({...dr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...dr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...dr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...dr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),SR=_e.merge(Fe).merge(Ze).merge(Sn).extend({handle:bn.meta({...dr,readOnly:true}),active:z.boolean().default(true).meta({...dr,readOnly:true})});function ar(t){return SR.meta({id:t,"x-revturbine-schema-persistence":yR,"x-revturbine-schema-exposure":xa})}var sf=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),PR=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),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:"CtaActionType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Qt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Bi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},IR="x-revturbine-context",TR="x-revturbine-in-config",CR="x-revturbine-sdk-input",RR="x-revturbine-source",kR="x-revturbine-deprecation",ER={[Qt.Playbook]:Bi.Customer,[Qt.Branding]:Bi.Customer,[Qt.Billing]:Bi.Stripe,[Qt.Metering]:Bi.Customer,[Qt.CustomerOperations]:Bi.Runtime,[Qt.EventIngestion]:Bi.Runtime};function _n(t,e){return {[IR]:t,[TR]:e.inConfig??t===Qt.Playbook,[CR]:e.sdkInput,[RR]:e.source??ER[t]}}function Dp(t){return {deprecated:true,[kR]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var qb={Named:"named",Minted:"minted"},Db="x-revturbine-schema-identity";function kr(t="handle"){return {[Db]:{kind:qb.Named,handleField:t}}}function Ii(t="handle"){return {[Db]:{kind:qb.Minted,handleField:t}}}var ce=t=>z.object({items:z.array(t)}),Pt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),I=t=>t,de=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()}),{Unrestricted:sn,Financial:iu}=jn,{Persisted:vc,Transient:au}=Qn,{External:Es}=Mn,wR=_n(Qt.Playbook,{sdkInput:true}),AR=_n(Qt.Playbook,{sdkInput:false}),af=_n(Qt.Billing,{sdkInput:false}),Xs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),xc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),ou=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),Ao=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),name:$n.meta(sn),handle:bn.meta(sn),tier_position:z.number().int().min(0).default(0).meta(sn),sort_order:z.number().int().default(0).meta(sn),visibility:Xs.default("public").meta(sn),metadata:Nn.meta(sn)}).meta({id:"Plan","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...wR,...kr()}),OR=ar("PlanAnchor"),Oo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),handle:bn.meta({...sn,readOnly:true}),plan_id:z.string().min(1).meta(sn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(sn),segment_id:z.string().nullable().default(null).meta(sn),price_amount:z.number().min(0).meta(iu),pricing_model:xc.meta(sn),visibility:Xs.default("public").meta(sn),stripe_price_id:z.string().optional().meta(sn),price_source:ou.default("static").meta(sn)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af,...Ii()}),jR=ar("PlanVariationAnchor"),jo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),name:$n.meta(sn),handle:bn.meta(sn),sort_order:z.number().int().default(0).meta(sn),visibility:Xs.default("public").meta(sn),metadata:Nn.meta(sn)}).meta({id:"AddOn","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...AR,...kr()}),FR=ar("AddOnAnchor"),Fo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),handle:bn.meta({...sn,readOnly:true}),addon_id:z.string().min(1).meta(sn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(sn),segment_id:z.string().nullable().default(null).meta(sn),price_amount:z.number().min(0).meta(iu),pricing_model:xc.meta(sn),visibility:Xs.default("public").meta(sn),stripe_price_id:z.string().optional().meta(sn),price_source:ou.default("static").meta(sn)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af,...Ii()}),LR=ar("AddOnVariationAnchor"),BR=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),Lo=_e.merge(Fe).merge(Ze).extend({stripe_price_id:z.string().min(1).meta(sn),stripe_product_id:z.string().min(1).meta(sn),billing_period:BR.meta(sn),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(iu),currency:xR.meta(iu),pricing_model:xc.meta(sn),nickname:z.string().nullable().default(null).meta(sn),is_mock:z.boolean().default(false).meta(sn),last_updated_from_stripe:Un.meta(sn)}).meta({id:"StripePrice","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af});var UR=Rr(Ao),VR=Rr(Oo),qR=Rr(jo),DR=Rr(Fo),MR=Rr(Lo);({"/api/plan-anchors":{get:I({operationId:"listPlanAnchors",requestParams:{query:de},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ce(OR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:I({operationId:"listPlans",requestParams:{query:de},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ce(Ao)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:I({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Ao)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:I({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:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:I({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:UR}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:I({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:I({operationId:"listPlanVariationAnchors",requestParams:{query:de},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ce(jR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:I({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:de},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ce(Oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:I({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:VR}}},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:I({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:I({operationId:"listAddOnAnchors",requestParams:{query:de},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ce(FR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:I({operationId:"listAddOns",requestParams:{query:de},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ce(jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:I({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(jo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:I({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:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:I({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:qR}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:I({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:I({operationId:"listAddOnVariationAnchors",requestParams:{query:de},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ce(LR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:I({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:de},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ce(Fo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:I({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Fo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:I({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:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:I({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:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:I({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:I({operationId:"listStripePrices",requestParams:{query:de},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ce(Lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:I({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Lo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:I({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:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:I({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:MR}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:I({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:Se}=jn,{Persisted:of,Transient:di}=Qn,{Internal:Mb,External:Jr}=Mn,Nb=_n(Qt.Playbook,{sdkInput:true}),NR=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),zb=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":di,"x-revturbine-schema-exposure":Jr}),lu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),zR=z.enum(Ub).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),HR=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Hb=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),bc=z.object({entitlement_id:z.string().min(1).meta(Se),entitlement_handle:z.string().min(1).meta(Se),status:zR.meta(Se),limit:z.number().optional().meta(Se),used:z.number().optional().meta(Se),allocation:lu.optional().meta(Se),enforcement:Hb.optional().meta(Se),source:HR.optional().meta(Se),plan_id:z.string().optional().meta(Se),segment_id:z.string().optional().meta(Se),seat_type_id:z.string().optional().meta(Se),rule_id:z.string().optional().meta(Se)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr,...jn.Operational});z.object({account:z.record(z.string(),bc).optional().meta(Se),instance:z.record(z.string(),bc).optional().meta(Se),user:z.record(z.string(),bc).optional().meta(Se)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr,...jn.Operational});var KR=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),GR=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Kb=z.object({kind:GR.meta(Se),id:z.string().min(1).meta(Se)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),$R=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Bo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),name:$n.meta(Se),handle:bn.meta(Se),customer_facing_description:z.string().max(500).optional().meta(Se),type:rf.meta(Se),unit:z.string().max(100).optional().meta(Se),period_scope:zb.optional().meta(Se),allocation:lu.optional().meta(Se),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Se),sort_order:z.number().int().default(0).meta(Se),metadata:Nn.meta(Se)}).meta({id:"Entitlement","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Jr,...Nb,...kr()}),WR=ar("EntitlementAnchor"),Do=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),handle:bn.meta({...Se,readOnly:true}),entitlement_id:z.string().min(1).meta(Se),targets:z.array(Kb).min(1).meta(Se),segment_ids:z.array(z.string()).default([]).meta(Se),visibility:KR.default("public").meta(Se),period_scope:zb.optional().meta(Se),instance:z.string().max(100).optional().meta(Se),reset_period:$R.optional().meta(Se),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),enforcement:Hb.optional().meta(Se),warning_threshold_percent:_c.optional().meta(Se),overage_price_ref:z.string().optional().meta(Se),grace_period_hours:z.number().int().min(0).optional().meta(Se),tier_value:z.string().optional().meta(Se),rate_value:z.number().optional().meta(Se),initial_grant:z.number().optional().meta(Se),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),rollover_enabled:z.boolean().optional().meta(Se),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Se),seat_type_id:z.string().optional().meta(Se),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Se),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Se),stripe_metered_price_id:z.string().optional().meta(Se),enabled:z.boolean().optional().meta(Se),allocation:lu.optional().meta(Se),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Se),amount_cents:z.number().int().optional().meta(Se),currency:z.string().optional().meta(Se)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Mb,...Nb,...Ii()}),ZR=ar("EntitlementRuleAnchor");Do.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 YR=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),JR=z.object({code:YR.meta(Se),message:z.string().min(1).meta(Se),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Se)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Mp=Do.extend({warnings:z.array(JR).optional().meta(Se)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr});var Np=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Se,readOnly:true}),rule_id:z.string().min(1).meta(Se),experiment_id:z.string().min(1).meta(Se),variant_name:z.string().min(1).max(200).meta(Se),is_control:z.boolean().default(false).meta(Se),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Se)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Mb,...NR,...Ii()}),XR=Rr(Bo),QR=Rr(Do);({"/api/entitlement-anchors":{get:I({operationId:"listEntitlementAnchors",requestParams:{query:de},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ce(WR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:I({operationId:"listEntitlementRuleAnchors",requestParams:{query:de},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ce(ZR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:I({operationId:"listEntitlements",requestParams:{query:de},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ce(Bo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:I({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Bo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:I({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:I({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:XR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:I({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:de},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ce(Do)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:I({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Do)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:I({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:QR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:I({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:de},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ce(Np)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:I({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Np)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Np}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ze}=jn,{Persisted:cu,Transient:Qs}=Qn,{External:Ti}=Mn,Gb=_n(Qt.Playbook,{sdkInput:true});_n(Qt.Playbook,{inConfig:false,sdkInput:false});var ek=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),tk=_n(Qt.Playbook,{inConfig:false,sdkInput:false,source:Bi.Runtime}),nk=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var $b=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),Wb=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),rk=z.object({count:z.number().int().positive().meta(ze),period:Wb.meta(ze)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti});z.object({surface_type:z.string().min(1).meta(ze),rules:z.array(rk).meta(ze),cooldown_ms:z.number().int().nonnegative().optional().meta(ze)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ti,...jn.Operational,...ek});var ik=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),Vo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ze,readOnly:true}),name:$n.meta(ze),handle:bn.meta(ze),description:Sa.meta(ze),category:$b.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:_c.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:nk.optional().meta(ze),activation_window_start:z.string().datetime().optional().meta(ze),activation_window_end:z.string().datetime().optional().meta(ze),metadata:Nn.meta(ze)}).meta({id:"Placement","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ti,...Gb,...kr()}),sk=ar("PlacementAnchor"),ak=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),ok=z.object({code:ak.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":Qs,"x-revturbine-schema-exposure":Ti}),Cb=Vo.extend({warnings:z.array(ok).optional().meta(ze)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti});var lk=z.object({label:z.string().min(1).max(200).meta(ze),cta_path_type:ik.meta(ze),config_fields:z.record(z.string(),z.unknown()).default({}).meta(ze)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),hc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ze,readOnly:true}),handle:bn.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(lk).default([]).meta(ze),max_per_period:z.number().int().min(0).nullable().default(null).meta(ze),max_period_unit:Wb.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":cu,"x-revturbine-schema-exposure":Ti,...Gb,...Ii()}),ck=ar("PlacementPayloadAnchor"),dk=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({surface_slot_handle:z.string().min(1).max(200).meta(ze),surface_type:su.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":cu,"x-revturbine-schema-exposure":Ti,...tk,...kr("surface_slot_handle")}),uk=Rr(Vo),mk=Rr(hc);({"/api/placement-anchors":{get:I({operationId:"listPlacementAnchors",requestParams:{query:de},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ce(sk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:I({operationId:"listPlacements",requestParams:{query:de},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ce(Vo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:I({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Vo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:I({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:I({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:Cb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:I({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:I({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:$b,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:I({operationId:"listPlacementPayloadAnchors",requestParams:{query:de},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ce(ck)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:I({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:de},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ce(hc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:I({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(hc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:hc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:I({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:mk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:hc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:I({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:I({operationId:"listSurfaceSlots",requestParams:{query:de},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ce(dk)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Tr,Pii:Mo}=jn,{Persisted:lf,Transient:cf}=Qn,{Internal:zo}=Mn,pk=_n(Qt.CustomerOperations,{sdkInput:false}),fk=z.object({external_id:z.string().min(1).meta(Mo),traits:z.record(z.string(),z.unknown()).default({}).meta(Mo),plan_id:z.string().optional().meta(Tr)}).meta({id:"Identity","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo}),Zb=z.enum(["payment_failed","payment_method_missing"]),Rb=_e.merge(Fe).merge(Ze).extend({external_id:z.string().min(1).meta(Mo),identity:fk.meta(Mo),stripe_customer_id:z.string().optional().meta(Tr),current_plan_id:z.string().optional().meta(Tr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Tr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Tr),billing_health_issues:z.array(Zb).default([]).meta(Tr),metadata:Nn.meta(Tr)}).meta({id:"Customer","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo}),hk=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),gk=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),_k=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),Ws=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Tr,readOnly:true}),customer_id:z.string().min(1).meta(Mo),customer_id_list:z.array(z.string()).optional().meta(Mo),override_type:gk.meta(Tr),target_id:z.string().min(1).meta(Tr),value:z.record(z.string(),z.unknown()).default({}).meta(Tr),duration_type:hk.default("permanent").meta(Tr),duration_value:z.string().optional().meta(Tr),expiry_date:Un.meta(Tr),status:_k.default("active").meta(Tr),reason:z.string().max(500).optional().meta(Tr),created_by:z.string().optional().meta(Tr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo,...pk,...Ii()});({"/api/customers":{get:I({operationId:"listCustomers",requestParams:{query:de},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ce(Rb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:I({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Rb}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:I({operationId:"listCustomerOverrides",requestParams:{query:de},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:ce(Ws)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:I({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:I({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Ws.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:I({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:I({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:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:I({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:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Ue,Pii:gc,Financial:zp}=jn,{Persisted:Yb,Transient:ss}=Qn,{External:Ho,Internal:Sc}=Mn,df=z.object({in_trial:z.boolean().meta(Ue),trial_type:z.string().optional().meta(Ue),plan_handle:z.string().optional().meta(Ue),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Ue),trial_limit_type:z.enum(["time","usage"]).optional().meta(Ue),progress_percent:z.number().min(0).max(100).optional().meta(Ue),day_number:z.number().int().min(0).optional().meta(Ue),days_remaining:z.number().int().min(0).optional().meta(Ue),usage_entitlement_handle:z.string().optional().meta(Ue),usage_consumed:z.number().int().min(0).optional().meta(Ue),usage_remaining:z.number().int().min(0).optional().meta(Ue),usage_limit:z.number().int().min(0).optional().meta(Ue)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho}),Jb=z.object({entitlement_handle:z.string().min(1).meta(Ue),unit:z.string().min(1).meta(Ue),amount:z.number().min(0).meta(Ue),limit:z.number().min(0).optional().meta(Ue),reset_date:z.string().optional().meta(Ue)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho});var Xb=z.object({id:z.string().min(1).meta(Ue),name:z.string().min(1).meta(Ue),price:z.string().optional().meta(Ue),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Ue)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho}),bk=z.object({product_instance_id:z.string().min(1).meta(Ue),user_id:z.string().min(1).meta(gc),plan:Xb.optional().meta(Ue),usage:z.record(z.string(),Jb).default({}).meta(Ue),trial:df.optional().meta(Ue),entitlements:z.record(z.string(),z.union([z.boolean(),bc])).default({}).meta(Ue)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":Ho}),Io=_e.merge(Ze).merge(Fe).extend({user_id:z.string().min(1).meta(gc),account_id:z.string().min(1).nullable().optional().meta(gc),email:z.string().email().nullable().optional().meta(gc),email_type:z.string().optional().meta(Ue),plan:Xb.optional().meta(Ue),usage:z.record(z.string(),Jb).default({}).meta(Ue),trial:df.optional().meta(Ue),payment_failed:z.boolean().optional().meta(Ue),payment_at_risk:z.boolean().optional().meta(Ue),tiers:z.record(z.string(),z.string()).optional().meta(Ue),entitlements:z.record(z.string(),z.union([z.boolean(),bc])).default({}).meta(Ue),instances:z.array(bk).optional().meta(Ue),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(gc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Ue,"x-revturbine-schema-persistence":ss}),derived_config_version:z.string().nullable().optional().meta(Ue),context_hash:z.string().nullable().optional().meta(Ue),derived_computed_at:Un.meta(Ue),activity_score:z.number().int().min(0).nullable().optional().meta(Ue),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Ue),experiments:z.record(z.string(),z.string()).optional().meta(Ue)}).meta({id:"UserContext","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":Ho}),yk=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Ue,...ci}),days_remaining:z.number().int().min(0).optional().meta({...Ue,...ci}),ends_at:z.string().optional().meta({...Ue,...ci})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),vk=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Ue,...ci}),failed_payment_reason:z.string().optional().meta({...zp,...Tb}),issues:z.array(Zb).optional().meta({...zp,...Tb}),provider_subscription_id:z.string().optional().meta({...zp,...bR})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),xk=z.object({can_upgrade:z.boolean().optional().meta({...Ue,...ci}),can_manage_billing:z.boolean().optional().meta({...Ue,...ci})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),Sk=z.object({handle:z.string().min(1).optional().meta({...Ue,...ci}),name:z.string().min(1).optional().meta({...Ue,...ci})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc});z.object({subject:z.string().min(1).meta({...Ue,...ci}),context_version:z.string().optional().meta({...Ue,...ci}),trial:yk.optional().meta({...Ue,...ci}),billing:vk.optional().meta({...Ue,...ci}),plan:Sk.optional().meta({...Ue,...ci}),capabilities:xk.optional().meta({...Ue,...ci})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc});({"/api/user-contexts":{get:I({operationId:"listUserContexts",requestParams:{query:de},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ce(Io)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:I({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:I({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Io.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:I({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:Xn}=jn,{Persisted:uf,Transient:Qb}=Qn,{Internal:Pc}=Mn,Pk=_n(Qt.Playbook,{sdkInput:true}),ey=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),Ik=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":Pc}),Tk=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":Pc}),Hp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:$n.meta(Xn),handle:bn.optional().meta(Xn),category:Ik.default("custom").meta(Xn),visibility_toggle:z.boolean().default(true).meta(Xn),source_type:Tk.default("system").meta(Xn),estimated_size:z.number().int().min(0).optional().meta(Xn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...ey,...kr()}),Ck=ar("SegmentDimensionAnchor"),Kp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),dimension_id:z.string().min(1).meta(Xn),name:$n.meta(Xn),handle:bn.meta(Xn),description:Sa.meta(Xn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Xn),used_in_count:z.number().int().min(0).default(0).meta({...Xn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...ey,...kr()}),Rk=ar("SegmentValueAnchor");_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:$n.meta(Xn),handle:bn.meta(Xn),description:Sa.meta(Xn),rules:z.record(z.string(),z.unknown()).default({}).meta(Xn),experiment_id:z.string().min(1).optional().meta(Xn),is_active:z.boolean().default(true).meta(Xn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Xn),metadata:Nn.meta(Xn)}).meta({id:"Segment","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...Pk,...kr()});({"/api/segment-dimension-anchors":{get:I({operationId:"listSegmentDimensionAnchors",requestParams:{query:de},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:ce(Ck)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:I({operationId:"listSegmentValueAnchors",requestParams:{query:de},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:ce(Rk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:I({operationId:"listSegmentDimensions",requestParams:{query:de},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ce(Hp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:I({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:Hp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:I({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:Hp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:I({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:de},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:ce(Kp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:I({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:Kp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:I({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:Kp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:I({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:vt}=jn,{Persisted:Ko,Transient:ty}=Qn,{External:ea}=Mn,mf=_n(Qt.Playbook,{sdkInput:true}),kk=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),Ek=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),wk=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.CodeConstant});_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),handle:bn.meta({...vt,readOnly:true}),name:$n.meta(vt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(vt),subject:z.string().max(500).optional().meta(vt),body:z.string().meta(vt),template_variables:z.array(z.string()).default([]).meta(vt),metadata:Nn.meta(vt)}).meta({id:"Message","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...kk,...Ii()});var Gp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),action_type:Vb.meta(vt),target_url:z.string().optional().meta(vt),target_plan_id:z.string().optional().meta(vt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(vt),metadata:Nn.meta(vt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Ak=ar("CtaPathAnchor"),Ok=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":Ko,"x-revturbine-schema-exposure":ea,...wk}),jk=z.object({name:z.string().min(1),field_type:Ok,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":Ko,"x-revturbine-schema-exposure":ea,...Ek}),$p=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),surface_type:PR.meta(vt),field_definitions:z.array(jk).default([]).meta(vt),description:Sa.meta(vt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Fk=ar("SurfaceTemplateAnchor"),Wp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(vt),variation_dimension_id:z.string().optional().meta(vt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(vt),notes:z.string().max(1e3).optional().meta(vt),used_in_count:z.number().int().min(0).default(0).meta({...vt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Lk=ar("MessageBlockRecordAnchor"),Bk=z.object({segment_id:z.string().min(1).meta(vt),message_block_id:z.string().min(1).meta(vt),ui_path_id:z.string().optional().meta(vt),promotion_id:z.string().optional().meta(vt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":ea});z.object({payload_id:z.string().min(1).meta(vt),tenant_id:z.string().min(1).meta(vt),name:$n.meta(vt),surface_template_id:z.string().min(1).meta(vt),default_message_block_id:z.string().min(1).meta(vt),segment_content_map:z.array(Bk).optional().meta(vt),ui_path_id:z.string().optional().meta(vt),promotion_id:z.string().optional().meta(vt),status:z.enum(["draft","active","inactive"]).meta(vt),created_at:z.string().datetime().optional().meta({...vt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...vt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":ea});({"/api/surface-template-anchors":{get:I({operationId:"listSurfaceTemplateAnchors",requestParams:{query:de},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:ce(Fk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:I({operationId:"listSurfaceTemplates",requestParams:{query:de},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ce($p)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:I({operationId:"listMessageBlockRecordAnchors",requestParams:{query:de},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:ce(Lk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:I({operationId:"listMessageBlocks",requestParams:{query:de},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ce(Wp)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:I({operationId:"listCtaPathAnchors",requestParams:{query:de},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:ce(Ak)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:I({operationId:"listCtaPaths",requestParams:{query:de},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ce(Gp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:qo,Pii:Uk}=jn,{Persisted:ny}=Qn,{Internal:Vk,External:qk}=Mn,Dk=_n(Qt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...qo,readOnly:true}),name:z.string().min(1).max(120).meta(qo),mode:z.enum(["light","dark","system"]).default("system").meta(qo),tokens:z.record(z.string(),z.string()).default({}).meta(qo)}).meta({id:"Theme","x-revturbine-schema-persistence":ny,"x-revturbine-schema-exposure":qk,...Dk});var kb=_e.merge(Fe).extend({user_id:z.string().min(1).meta(Uk),scope:z.string().min(1).meta(qo),preferences:z.record(z.string(),z.unknown()).default({}).meta(qo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":ny,"x-revturbine-schema-exposure":Vk});({"/api/ui-preferences":{get:I({operationId:"listUiPreferences",requestParams:{query:de},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ce(kb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:I({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Rr(kb))}}},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:Rt,Financial:rs}=jn,{Persisted:ry,Transient:Ic}=Qn,{External:Tc,Internal:iy}=Mn,Mk=z.object({month:z.string().meta(Rt),cohort_size:z.number().int().min(0).meta(Rt),retained:z.number().int().min(0).meta(Rt),retention_rate:z.number().min(0).max(1).meta(Rt),revenue_cents:z.number().int().min(0).meta(rs)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Nk=z.object({step:z.string().meta(Rt),label:z.string().meta(Rt),count:z.number().int().min(0).meta(Rt),conversion_rate:z.number().min(0).max(1).meta(Rt),drop_off_rate:z.number().min(0).max(1).meta(Rt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),zk=z.object({placement_id:z.string().meta(Rt),placement_name:z.string().meta(Rt),impressions:z.number().int().min(0).meta(Rt),clicks:z.number().int().min(0).meta(Rt),conversions:z.number().int().min(0).meta(Rt),ctr:z.number().min(0).meta(Rt),conversion_rate:z.number().min(0).meta(Rt),revenue_cents:z.number().int().min(0).meta(rs)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Hk=z.object({date:z.string().meta(Rt),mrr_cents:z.number().int().min(0).meta(rs),arr_cents:z.number().int().min(0).meta(rs),new_mrr_cents:z.number().int().min(0).meta(rs),churned_mrr_cents:z.number().int().min(0).meta(rs),expansion_mrr_cents:z.number().int().min(0).meta(rs),net_new_mrr_cents:z.number().int().meta(rs)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Kk=z.object({metric_key:z.string().min(1).meta(Rt),label:z.string().meta(Rt),current_value:z.number().meta(rs),previous_value:z.number().nullable().default(null).meta(rs),change_percent:z.number().nullable().default(null).meta(Rt),period:z.string().meta(Rt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Rt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Eb=_e.merge(Fe).merge(Ze).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Rt),severity:sf.meta(Rt),resource_type:z.string().min(1).meta(Rt),resource_id:z.string().min(1).meta(Rt),summary:z.string().max(1e3).meta(Rt),expected_value:z.unknown().optional().meta(Rt),actual_value:z.unknown().optional().meta(Rt),affected_customer_count:z.number().int().min(0).default(0).meta(Rt),is_resolved:z.boolean().default(false).meta(Rt),resolved_at:Un.meta(Rt),metadata:Nn.meta(Rt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":iy}),wb=_e.merge(Fe).merge(Ze).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Rt),severity:sf.meta(Rt),title:z.string().min(1).max(300).meta(Rt),description:z.string().max(2e3).meta(Rt),resource_type:z.string().optional().meta(Rt),resource_id:z.string().optional().meta(Rt),is_acknowledged:z.boolean().default(false).meta(Rt),acknowledged_at:Un.meta(Rt),acknowledged_by:z.string().nullable().default(null).meta(Rt),metadata:Nn.meta(Rt)}).meta({id:"Alert","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":iy});({"/api/analytics/kpis":{get:I({operationId:"listKpiAggregates",requestParams:{query:de},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ce(Kk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:I({operationId:"listPlacementPerformance",requestParams:{query:de},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ce(zk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:I({operationId:"listRevenueMetrics",requestParams:{query:de},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ce(Hk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:I({operationId:"listCohortMetrics",requestParams:{query:de},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:ce(Mk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:I({operationId:"listFunnelSteps",requestParams:{query:de},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ce(Nk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:I({operationId:"listDriftReports",requestParams:{query:de},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ce(Eb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:I({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:Eb}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:I({operationId:"listAlerts",requestParams:{query:de},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ce(wb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:I({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:wb}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:V,Pii:No}=jn,{Persisted:sy,Transient:zn}=Qn,{Internal:ta,External:gr}=Mn,ay=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),Gk=_e.extend({event_type:z.string().min(1).meta(V),source:ay.default("sdk").meta(V),tenant_id:z.string().min(1).optional().meta(V),user_id:z.string().min(1).optional().meta(No),session_id:z.string().min(1).optional().meta(No),occurred_at:z.string().datetime().meta(V),request_id:z.string().min(1).meta(V),attributes:z.record(z.string(),z.unknown()).default({}).meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),$k=Gk.extend({ingested_at:z.string().datetime().meta(V)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":ta});z.array(z.object({id:z.string().min(1).optional().meta(V),event_type:z.string().min(1).meta(V),occurred_at:z.string().datetime().optional().meta(V),tenant_id:z.string().min(1).optional().meta(V),user_id:z.string().min(1).optional().meta(No),session_id:z.string().min(1).optional().meta(No),attributes:z.record(z.string(),z.unknown()).optional().meta(V),payload:z.record(z.string(),z.unknown()).optional().meta(V),message:z.string().optional().meta(V),level:z.string().optional().meta(V),path:z.string().optional().meta(V)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var Wk=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({user_id:z.string().min(1).meta(No),placement_id:z.string().min(1).meta(V),treatment_id:z.string().min(1).optional().meta(V),surface_slot_id:z.string().min(1).optional().meta(V),surface_template_id:z.string().min(1).optional().meta(V),payload_id:z.string().min(1).optional().meta(V),interaction_type:Wk.meta(V),interaction_at:z.string().datetime().optional().meta(V),message_block_handle:z.string().min(1).optional().meta(V),message_block_id:z.string().min(1).optional().meta(V),experiment_id:z.string().min(1).optional().meta(V),variant_key:z.string().min(1).optional().meta(V),test:z.boolean().optional().meta(V),metadata:z.record(z.string(),z.unknown()).optional().meta(V)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});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":zn,"x-revturbine-schema-exposure":gr});z.object({days_remaining:z.number().int().min(0).optional().meta(V)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({entitlement_handle:z.string().optional().meta(V),current_usage:z.number().min(0).optional().meta(V),usage_limit:z.number().min(0).optional().meta(V),usage_percent:z.number().min(0).max(100).optional().meta(V),threshold:z.number().min(0).optional().meta(V),balance:z.number().min(0).optional().meta(V),allocation:z.number().min(0).optional().meta(V),seats_used:z.number().int().min(0).optional().meta(V),seats_allowed:z.number().int().min(0).optional().meta(V)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({feature:z.string().min(1).meta(V)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({retry_count:z.number().int().min(0).optional().meta(V),renewal_date:z.string().optional().meta(V)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({event_type:z.string().min(1).meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});var Yk=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),Jk=z.enum(["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"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({event_type:Jk.meta(V),source:Yk.meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({q:z.string().optional().meta(V),source:ay.optional().meta(V),event_type:z.string().optional().meta(V),from:z.string().datetime().optional().meta(V),to:z.string().datetime().optional().meta(V),page:z.coerce.number().int().min(1).default(1).meta(V),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(V)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var Xk=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),Qk=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),Zp=_e.merge(Fe).merge(Ze).extend({event_id:z.string().min(1).meta(V),event_type:z.string().min(1).meta(V),source:Xk.meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V),status:Qk.default("processed").meta(V),processed_at:z.string().datetime().optional().meta(V),error_message:z.string().optional().meta(V)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":ta});z.object({accepted:z.number().int().min(0).meta(V)}).meta({id:"null","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var eE=500,tE=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),nE=z.object({environment_id:z.string().min(1).meta(V),user_id:z.string().min(1).meta(No),account_id:z.string().min(1).meta(V),event_name:z.string().min(1).max(120).meta(V),event_ts:z.string().datetime().meta(V),properties:z.string().optional().meta(V),surface_slot_id:z.string().nullable().optional().meta(V),placement_id:z.string().nullable().optional().meta(V),payload_id:z.string().nullable().optional().meta(V),request_id:z.string().optional().meta(V),experiment_id:z.string().nullable().optional().meta(V),variant_key:z.string().nullable().optional().meta(V),tenant_id:z.string().optional().meta(V),event_id:z.string().nullable().optional().meta(V),origin:tE.nullable().optional().meta(V),playbook_version:z.string().nullable().optional().meta(V),decision_id:z.string().nullable().optional().meta(V),test:z.boolean().optional().meta(V)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({events:z.array(nE).min(1).max(eE).meta(V)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});var iE=10,sE=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),aE=z.object({plans:z.number().int().min(0).meta(V),entitlements:z.number().int().min(0).meta(V),entitlement_rules:z.number().int().min(0).meta(V),segments:z.number().int().min(0).meta(V),placements:z.number().int().min(0).meta(V),placement_payloads:z.number().int().min(0).meta(V),content_ui_paths:z.number().int().min(0).meta(V),surface_templates:z.number().int().min(0).meta(V)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),oE=z.object({event_type:sE.meta(V),occurred_at:z.string().datetime().meta(V),request_id:z.string().min(1).optional().meta(V),config_hash_id:z.string().min(1).max(64).optional().meta(V),sdk_version:z.string().min(1).max(64).optional().meta(V),runtime_mode:z.string().min(1).max(64).optional().meta(V),schema_version:z.string().min(1).max(64).optional().meta(V),bundle_version:z.string().min(1).max(64).optional().meta(V),config_shape:aE.optional().meta(V),message:z.string().max(500).optional().meta(V),reason:z.string().min(1).max(64).optional().meta(V),placement_handle:z.string().min(1).max(64).optional().meta(V),slot_handle:z.string().min(1).max(64).optional().meta(V),surface:z.string().min(1).max(64).optional().meta(V),plan_handle:z.string().min(1).max(64).optional().meta(V),entitlement_handle:z.string().min(1).max(64).optional().meta(V)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({events:z.array(oE).min(1).max(iE).meta(V)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});({"/api/events/search":{get:I({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:vR($k)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:I({operationId:"listWebhookEvents",requestParams:{query:de},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ce(Zp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:it}=jn,{Persisted:Cc,Transient:Rc}=Qn,{Internal:as}=Mn,oy=_n(Qt.Playbook,{sdkInput:true}),ly=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),cE=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),pf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),cy=z.object({name:$n.meta(it),handle:bn.meta(it),plan_id:z.string().nullable().optional().meta(it),segment_id:z.string().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(it),grace_period_days:z.number().int().min(0).default(0).meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),require_payment_method:z.boolean().default(false).meta(it),auto_convert:z.boolean().default(true).meta(it),convert_to_plan_id:z.string().optional().meta(it),fallback_plan_id:z.string().optional().meta(it),limit_per_customer:z.number().int().min(1).default(1).meta(it),is_active:z.boolean().default(true).meta(it),metadata:Nn.meta(it)}),To=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...it,readOnly:true})}).merge(cy).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...oy,...kr()}),dE=ar("FreeTrialRuleAnchor"),uE=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),dy=z.object({name:$n.meta(it),handle:bn.meta(it),premium_plan_id:z.string().min(1).meta(it),fallback_plan_id:z.string().min(1).meta(it),segment_id:z.string().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),start_policy:uE.default("signup").meta(it),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(it),entitlements_during_trial:z.array(z.string()).default([]).meta(it),is_active:z.boolean().default(true).meta(it),metadata:Nn.meta(it)}),Co=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...it,readOnly:true})}).merge(dy).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...oy,...kr()}),mE=ar("ReverseTrialRuleAnchor"),uy=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),my=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),Ro=_e.merge(Fe).merge(Ze).extend({trial_limit_policy:uy.default("1_per_lifetime").meta(it),eligibility_scope:my.default("per_customer").meta(it)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...ly}),ko=_e.merge(Fe).merge(Ze).extend({trial_limit_policy:uy.default("1_per_lifetime").meta(it),eligibility_scope:my.default("per_customer").meta(it)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...ly}),Qd=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(it),rule_id:z.string().min(1).meta(it),rule_type:z.enum(["free_trial","reverse_trial"]).meta(it),plan_id:z.string().min(1).meta(it),status:cE.default("active").meta(it),started_at:z.string().datetime().meta({...it,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),converted_at:Un.meta(it),cancelled_at:Un.meta(it),metadata:Nn.meta(it)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as});({"/api/free-trial-rule-anchors":{get:I({operationId:"listFreeTrialRuleAnchors",requestParams:{query:de},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ce(dE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:I({operationId:"listFreeTrialRules",requestParams:{query:de},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ce(To)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:I({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:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:I({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:To.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"listReverseTrialRuleAnchors",requestParams:{query:de},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ce(mE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:I({operationId:"listReverseTrialRules",requestParams:{query:de},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ce(Co)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:I({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:Co}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:I({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse 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:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"listFreeTrialSettings",requestParams:{query:de},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ce(Ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:I({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:I({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:I({operationId:"listReverseTrialSettings",requestParams:{query:de},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ce(ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:I({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:I({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:I({operationId:"listTrialInstances",requestParams:{query:de},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ce(Qd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:I({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:I({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:I({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:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:kn}=jn,{Persisted:ff,Transient:py}=Qn,{Internal:kc}=Mn,fy=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),pE=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":kc}),fE=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":kc}),hE=z.object({variant_id:z.string().min(1),name:$n,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc,...fy}),Cs=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...kn,readOnly:true}),name:$n.meta(kn),handle:bn.meta(kn),description:z.string().max(1e3).optional().meta(kn),experiment_type:fE.meta(kn),status:pE.default("draft").meta(kn),target_resource_id:z.string().optional().meta(kn),target_segment_ids:z.array(z.string()).default([]).meta(kn),variants:z.array(hE).min(2).meta(kn),primary_metric:z.string().min(1).meta(kn),metric_threshold:z.number().default(.05).meta(kn),secondary_metrics:z.array(z.string()).default([]).meta(kn),traffic_allocation:z.number().min(0).max(1).default(1).meta(kn),started_at:Un.meta(kn),ended_at:Un.meta(kn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(kn),winning_variant_id:z.string().nullable().default(null).meta(kn),metadata:Nn.meta(kn)}).meta({id:"Experiment","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc,...fy,...kr()}),gE=ar("ExperimentAnchor"),_E=sf,Ab=_e.merge(Fe).merge(Ze).extend({experiment_id:z.string().optional().meta(kn),resource_type:z.string().min(1).meta(kn),resource_id:z.string().min(1).meta(kn),severity:_E.default("info").meta(kn),title:z.string().min(1).max(300).meta(kn),description:z.string().max(2e3).meta(kn),suggested_action:z.string().max(1e3).optional().meta(kn),estimated_impact:z.number().optional().meta(kn),is_dismissed:z.boolean().default(false).meta(kn),metadata:Nn.meta(kn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc});({"/api/experiment-anchors":{get:I({operationId:"listExperimentAnchors",requestParams:{query:de},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ce(gE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:I({operationId:"listExperiments",requestParams:{query:de},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ce(Cs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:I({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:I({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Cs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:I({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:I({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:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:I({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:I({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:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:I({operationId:"listOptimizationSuggestions",requestParams:{query:de},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ce(Ab)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:I({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Ab}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:yr,Financial:Ob}=jn,{Persisted:bE,Transient:hy}=Qn,{Internal:hf}=Mn,yE=_n(Qt.Playbook,{sdkInput:true}),vE=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":hy,"x-revturbine-schema-exposure":hf}),xE=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":hy,"x-revturbine-schema-exposure":hf}),Zs=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...yr,readOnly:true}),name:$n.meta(yr),handle:bn.meta(yr),description:z.string().max(1e3).optional().meta(yr),rt_status:vE.default("draft").meta(yr),discount_type:xE.meta(yr),discount_value:z.number().min(0).meta(Ob),currency:z.string().length(3).default("USD").meta(Ob),applicable_plan_ids:z.array(z.string()).default([]).meta(yr),applicable_addon_ids:z.array(z.string()).default([]).meta(yr),target_segment_ids:z.array(z.string()).default([]).meta(yr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(yr),current_redemptions:z.number().int().min(0).default(0).meta({...yr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(yr),starts_at:Un.meta(yr),ends_at:Un.meta(yr),stripe_coupon_id:z.string().nullable().default(null).meta(yr),stripe_promotion_code_id:z.string().nullable().default(null).meta(yr),auto_sync_stripe:z.boolean().default(false).meta(yr),metadata:Nn.meta(yr)}).meta({id:"Promotion","x-revturbine-schema-persistence":bE,"x-revturbine-schema-exposure":hf,...yE,...kr()}),SE=ar("PromotionAnchor");({"/api/promotion-anchors":{get:I({operationId:"listPromotionAnchors",requestParams:{query:de},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ce(SE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:I({operationId:"listPromotions",requestParams:{query:de},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:ce(Zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:I({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:I({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Zs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:I({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:I({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:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:I({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Bn,Pii:gf}=jn,{Persisted:_f}=Qn,{Internal:bf}=Mn,PE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),placement_id:z.string().min(1).meta(Bn),payload_id:z.string().nullable().default(null).meta(Bn),variant_id:z.string().nullable().default(null).meta(Bn),surface_type:z.string().meta(Bn),presented_at:z.string().datetime().meta({...Bn,readOnly:true}),dismissed_at:Un.meta(Bn),cta_clicked_at:Un.meta(Bn),cta_action_type:z.string().nullable().default(null).meta(Bn),converted:z.boolean().default(false).meta(Bn),session_id:z.string().optional().meta(Bn),metadata:Nn.meta(Bn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf}),IE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),placement_id:z.string().min(1).meta(Bn),decision:z.enum(["show","suppress","defer"]).meta(Bn),reason:z.string().max(500).meta(Bn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Bn),experiment_id:z.string().nullable().default(null).meta(Bn),variant_id:z.string().nullable().default(null).meta(Bn),latency_ms:z.number().min(0).optional().meta(Bn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf}),TE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),entitlement_handle:z.string().min(1).meta(Bn),entitlement_type:z.string().meta(Bn),result:z.enum(["granted","denied","limited","metered"]).meta(Bn),current_usage:z.number().nullable().default(null).meta(Bn),limit:z.number().nullable().default(null).meta(Bn),source:z.enum(["plan","addon","override","trial"]).meta(Bn),source_id:z.string().min(1).meta(Bn),latency_ms:z.number().min(0).optional().meta(Bn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf});({"/api/presentation-records":{get:I({operationId:"listPresentationRecords",requestParams:{query:de},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:ce(PE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:I({operationId:"listDecisionLogs",requestParams:{query:de},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:ce(IE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:I({operationId:"listEntitlementEvalLogs",requestParams:{query:de},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:ce(TE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:h}=jn,{Persisted:Go,Transient:dt}=Qn,{Internal:Ci,External:Ut}=Mn,Ct=_n(Qt.Playbook,{sdkInput:true}),Uo=_n(Qt.Playbook,{sdkInput:false}),Js=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),gy=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),Eo=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.CodeConstant}),Jp=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.Runtime}),Xp=_n(Qt.Playbook,{inConfig:false,sdkInput:false,source:Bi.Runtime}),CE=_n(Qt.Billing,{sdkInput:false}),RE=_n(Qt.Metering,{sdkInput:false}),kE=_n(Qt.Branding,{inConfig:true,sdkInput:true}),EE=_n(Qt.Branding,{sdkInput:false}),wE="1.0.0",dc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:$n.meta(h),handle:bn.meta(h),description:Sa.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Nn.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...Js,...kr()}),AE=ar("SeatTypeAnchor"),uc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.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:Nn.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...Js,...kr()}),OE=ar("PersonalizationTokenAnchor"),jE=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),Qp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:jE.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:Nn.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...CE,...Ii()});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":dt,"x-revturbine-schema-exposure":Ut,...EE});var mc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.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:Nn.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...RE,...Ii()}),jb=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),pc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.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:jb.default("warn").meta(h),hard_limit_action:jb.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":Go,"x-revturbine-schema-exposure":Ci,...gy,...Ii()}),FE=ar("UsageEnforcementSettingsAnchor"),LE=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":dt,"x-revturbine-schema-exposure":Ci}),BE=z.object({id:z.string().min(1).meta(h),group:z.array(LE).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":dt,"x-revturbine-schema-exposure":Ci}),UE=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),_y=z.object({capRules:z.array(BE).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:UE.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),ef=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.meta({...h,readOnly:true}),global_frequency_cap:_y.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":Go,"x-revturbine-schema-exposure":Ci,...gy,...Ii()}),VE=ar("PlacementSettingsAnchor"),qE=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":dt,"x-revturbine-schema-exposure":Ut}),DE=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(qE).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_id:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ME=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:Xs.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),NE=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:Xs.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Uo}),zE=z.object({handle:z.string().min(1).meta(h),plan_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:xc.meta(h),visibility:Xs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:ou.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),HE=z.object({handle:z.string().min(1).meta(h),addon_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:xc.meta(h),visibility:Xs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:ou.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),KE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),GE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),$E=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:_y.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),WE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ZE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),YE=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:rf.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),JE=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(Kb).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:rf.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}),...Do.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:lu.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),XE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),QE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ew=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":dt,"x-revturbine-schema-exposure":Ut}),tw=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(ew).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),nw=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":dt,"x-revturbine-schema-exposure":Ut}),rw=z.object({name:z.string().min(1).meta(h),action_type:nw.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),iw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),sw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),Fb=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":dt,"x-revturbine-schema-exposure":Ut}),aw=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:Fb.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Fb})).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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ow=z.object({label:z.string().meta(h),path:Vb.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),by=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(ow).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),yy=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":dt,"x-revturbine-schema-exposure":Ut}),lw=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":dt,"x-revturbine-schema-exposure":Ut}),vy=z.object({max_per_period:lw.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),cw=z.object({id:z.string().min(1).meta(h),target:yy.meta(h),surfaces:z.array(by).meta(h),caps:vy.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":dt,"x-revturbine-schema-exposure":Ut}),dw=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:_c}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_c}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_c}),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":dt,"x-revturbine-schema-exposure":Ut}),uw=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),mw=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:uw.meta(h),trigger:dw.meta(h),payloads:z.array(cw).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),pw=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:yy.meta(h),caps:vy.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(by).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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),fw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),hw=_e.merge(cy).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),gw=_e.merge(dy).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),_w=z.object({plans:z.array(ME).meta({...h,...Ct}),addons:z.array(NE).optional().meta({...h,...Uo}),entitlements:z.array(YE).meta({...h,...Ct}),entitlement_rules:z.array(JE).meta({...h,...Ct}),segments:z.array(DE).meta({...h,...Ct}),content_ui_paths:z.array(rw).meta({...h,...Ct}),slot_configs:z.array(XE).optional().meta({...h,...Ct,...Dp({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,...Ct,...Dp({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,...kE,...Dp({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(QE).optional().meta({...h,...Ct}),message_blocks:z.array(aw).optional().meta({...h,...Ct}),placement_payloads:z.array(pw).optional().meta({...h,...Ct}),placements:z.array(mw).optional().meta({...h,...Ct}),content_promotions:z.array(iw).optional().meta({...h,...Ct}),personalization_tokens:z.array(sw).optional().meta({...h,...Ct}),surface_templates:z.array(tw).optional().meta({...h,...Ct}),free_trial_rules:z.array(hw).optional().meta({...h,...Uo}),reverse_trial_rules:z.array(gw).optional().meta({...h,...Uo}),plan_variations:z.array(zE).optional().meta({...h,...Uo}),addon_variations:z.array(HE).optional().meta({...h,...Uo}),extension_rules:z.array(fw).optional().meta({...h,...Ct}),seat_types:z.array(KE).optional().meta({...h,...Ct}),enforcement_defaults:z.array(GE).optional().meta({...h,...Ct}),placement_settings:z.array($E).optional().meta({...h,...Ct}),segment_dimensions:z.array(WE).optional().meta({...h,...Ct}),meter_bindings:z.array(ZE).optional().meta({...h,...Ct}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...Js}),signal_catalog:z.object({}).strict().optional().meta({...h,...Js})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),bw=z.object({artifact_type:z.literal("playbook").meta({...h,...Eo,readOnly:true}),format_version:z.literal(wE).meta({...h,...Eo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Eo}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Jp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Jp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Eo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Eo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Eo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Jp}),xy=bw.extend(_w.shape).meta({"x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});function yw(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Sy(t){if(!yw(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(Sy,xy).meta({id:"Playbook","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});z.preprocess(Sy,xy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});({"/api/seat-type-anchors":{get:I({operationId:"listSeatTypeAnchors",requestParams:{query:de},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ce(AE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:I({operationId:"listSeatTypes",requestParams:{query:de},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:I({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({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:I({operationId:"listPersonalizationTokenAnchors",requestParams:{query:de},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ce(OE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:I({operationId:"listPersonalizationTokens",requestParams:{query:de},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:I({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({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:I({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(Qp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Qp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:I({operationId:"listMeteringConfigs",requestParams:{query:de},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ce(mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:I({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(mc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:I({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",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:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:I({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:I({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:de},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ce(FE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:I({operationId:"listUsageEnforcementSettings",requestParams:{query:de},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ce(pc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:I({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(pc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:I({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:I({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:I({operationId:"listPlacementSettingsAnchors",requestParams:{query:de},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ce(VE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:I({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(ef)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:ef}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Rs}=jn,{Persisted:Py}=Qn,{Internal:Iy}=Mn,vw=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Py,"x-revturbine-schema-exposure":Iy}),Lb=_e.merge(Fe).merge(Ze).extend({action:vw.meta(Rs),resource_type:z.string().min(1).max(100).meta(Rs),resource_id:z.string().min(1).meta(Rs),resource_name:z.string().max(200).optional().meta(Rs),actor_id:z.string().min(1).meta(Rs),actor_email:z.string().email().optional().meta(Rs),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Rs),summary:z.string().max(1e3).optional().meta(Rs),metadata:Nn.meta(Rs)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Py,"x-revturbine-schema-exposure":Iy});({"/api/changelog":{get:I({operationId:"listChangeLogEntries",requestParams:{query:de},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ce(Lb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:I({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:Lb}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:eu}=jn,{Persisted:xw,Transient:Sw}=Qn,{Internal:Ty}=Mn,Pw=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":Sw,"x-revturbine-schema-exposure":Ty}),Ys=_e.merge(Fe).extend({name:$n.meta(eu),handle:bn.meta(eu),status:Pw.default("active").meta(eu),metadata:Nn.meta(eu)}).meta({id:"Tenant","x-revturbine-schema-persistence":xw,"x-revturbine-schema-exposure":Ty});({"/api/tenants":{get:I({operationId:"listTenants",requestParams:{query:de},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:ce(Ys)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:I({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:I({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Ys.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:I({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:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:I({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Si}=jn,{Persisted:Iw,Transient:Cy}=Qn,{Internal:yf}=Mn,Tw=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Cy,"x-revturbine-schema-exposure":yf}),wo=_e.merge(Fe).merge(Ze).extend({name:$n.meta(Si),handle:bn.meta(Si),description:Sa.meta(Si),is_production:z.boolean().default(false).meta({...Si,readOnly:true}),status:Tw.default("active").meta(Si),cloned_from_environment_id:z.string().nullable().default(null).meta({...Si,readOnly:true}),cloned_at:Un.meta({...Si,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Si,readOnly:true}),requires_approval:z.boolean().default(false).meta(Si),auto_deploy_on_approval:z.boolean().default(false).meta(Si),created_by:z.string().optional().meta(Si),metadata:Nn.meta(Si)}).meta({id:"Environment","x-revturbine-schema-persistence":Iw,"x-revturbine-schema-exposure":yf}),Cw=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":Cy,"x-revturbine-schema-exposure":yf});({"/api/environments":{get:I({operationId:"listEnvironments",requestParams:{query:de},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:ce(wo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:I({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:wo}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:I({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:I({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:wo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:I({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:wo}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:I({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Cw}}},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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:We,Pii:yc}=jn,{Transient:os,Persisted:Rw}=Qn,{External:Ui}=Mn,kw=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({superseded_output_id:z.string().min(1).meta(We),superseded_by:z.string().min(1).meta(We),reason:kw.meta(We)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Rw,"x-revturbine-schema-exposure":Ui,...jn.Operational});var Ew=z.enum(Ub).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Ry=z.object({output_id:z.string().meta(We),category:z.string().meta(We),surface:z.object({template:z.string().optional().meta(We),type:su.meta(We),slot_id:z.string().optional().meta(We)}).meta(We),content:z.record(z.string(),z.unknown()).meta(We),promotion:z.record(z.string(),z.unknown()).optional().meta(We),cta_path:z.record(z.string(),z.unknown()).optional().meta(We),ui_path:z.record(z.string(),z.unknown()).optional().meta(We),rule_id:z.string().meta(We),decision_id:z.string().meta(We),config_version:z.string().meta(We),present_upsell:z.boolean().meta(We),experiment_id:z.string().optional().meta(We),variant_key:z.string().optional().meta(We),experiment_version_id:z.string().optional().meta(We)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),ww=z.object({status:Ew.meta(We),allowed:z.boolean().meta(We),reason:z.string().optional().meta(We),current_tier:z.string().optional().meta(We),limit:z.number().optional().meta(We),used:z.number().optional().meta(We),remaining:z.number().optional().meta(We),placement:Ry.optional().meta(We)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({id:z.string().meta(We),name:z.string().optional().meta(We),discount:z.string().optional().meta(We),type:z.string().optional().meta(We),status:z.string().optional().meta(We)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});var Aw=z.object({id:z.string().meta(yc),anonymous_id:z.string().optional().meta(We),traits:z.record(z.string(),z.unknown()).optional().meta(yc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Ow=z.object({slot_id:z.string().optional().meta(We),entitlement_handle:z.string().optional().meta(We),plan_handle:z.string().optional().meta(We),placement_handle:z.string().optional().meta(We),visible:z.boolean().meta(We),output:Ry.optional().meta(We),reason_codes:z.array(z.string()).optional().meta(We)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),jw=ww,Fw=df.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Lw=z.object({segments:z.array(z.string()).optional().meta(We),traits:z.record(z.string(),z.unknown()).optional().meta(yc),usage_balances:z.record(z.string(),z.number()).optional().meta(We)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({version:z.literal("1.0.0").meta(We),request_id:z.string().meta(We),tenant_id:z.string().meta(We),evaluated_at:z.string().datetime().meta(We),ttl_seconds:z.number().int().min(0).max(86400).meta(We),user:Aw.meta(yc),decisions:z.array(Ow).meta(We),entitlements:z.record(z.string(),jw).optional().meta(We),theme:z.record(z.string(),z.unknown()).optional().meta(We),trial_status:Fw.optional().meta(We),user_context:Lw.optional().meta(yc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});var {Unrestricted:ln}=jn,{Persisted:Bw,Transient:du}=Qn,{Internal:Ec}=Mn,Uw=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),fc=_e.merge(Fe).merge(Ze).extend({environment_id:z.string().min(1).meta(ln),name:$n.meta(ln),description:z.string().max(2e3).optional().meta(ln),status:Uw.default("draft").meta(ln),labels:z.array(z.string()).default([]).meta(ln),created_by:z.string().min(1).meta(ln),submitted_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),submitted_at:Un.meta({...ln,readOnly:true}),reviewed_at:Un.meta({...ln,readOnly:true}),deployed_at:Un.meta({...ln,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(ln),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(ln),review_notes:z.string().max(2e3).optional().meta(ln),rejection_reason:z.string().max(2e3).optional().meta(ln),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...ln,readOnly:true}),bundle:z.string().nullable().default(null).meta({...ln,readOnly:true}),metadata:Nn.meta(ln)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Bw,"x-revturbine-schema-exposure":Ec}),ky=z.object({handle:z.string().meta(ln),resource_type:z.string().meta(ln),resource_name:z.string().optional().meta(ln),action:z.enum(["create","update","delete"]).meta(ln),has_conflict:z.boolean().meta(ln)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),Vw=z.object({playbook_version_id:z.string().meta(ln),entries:z.array(ky).meta(ln),total_entries:z.number().int().min(0).meta(ln),total_conflicts:z.number().int().min(0).meta(ln),deployable:z.boolean().meta(ln)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),qw=z.object({playbook_version_id:z.string().meta(ln),deployed_count:z.number().int().min(0).meta(ln),superseded_count:z.number().int().min(0).meta(ln),skipped_conflicts:z.number().int().min(0).meta(ln),deployed_at:z.string().datetime().meta(ln)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec});({"/api/playbook-versions/{playbookVersionId}/submit":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:I({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:qw}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:I({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:fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:I({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:Vw}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:I({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:de},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:ce(ky)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:I({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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Bt,Pii:Dw}=jn,{Persisted:Vi}=Qn,{Internal:qi}=Mn,Mw=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),tu=_e.merge(Fe).merge(Ze).extend({name:$n.meta(Bt),key_hash:z.string().min(1).meta({...Dw,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Bt,readOnly:true}),key_last4:z.string().length(4).meta({...Bt,readOnly:true}),status:Mw.default("active").meta(Bt),last_used_at:Un.meta({...Bt,readOnly:true}),expires_at:Un.meta(Bt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Nw=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),va=_e.merge(Fe).merge(Ze).extend({key:z.string().min(1).max(100).meta(Bt),value_type:Nw.default("boolean").meta(Bt),value:z.string().max(4e3).default("false").meta(Bt),description:Sa.meta(Bt),enabled:z.boolean().default(true).meta(Bt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),tf=_e.merge(Fe).merge(Ze).extend({workspace_name:z.string().min(1).max(200).meta(Bt),support_email:z.string().email().nullable().default(null).meta(Bt),timezone:z.string().max(50).default("UTC").meta(Bt),default_currency:z.string().length(3).default("USD").meta(Bt),logo_url:z.string().url().nullable().default(null).meta(Bt),activity_window_days:z.number().int().min(1).default(30).meta(Bt),activity_high_min:z.number().int().min(1).default(10).meta(Bt),activity_medium_min:z.number().int().min(1).default(3).meta(Bt),activity_low_min:z.number().int().min(1).default(1).meta(Bt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),nf=_e.merge(Fe).merge(Ze).extend({server_url:z.string().url().max(500).meta(Bt),api_token_hint:z.string().max(50).nullable().default(null).meta(Bt),allow_write_actions:z.boolean().default(false).meta(Bt),enabled_tools:z.array(z.string().max(100)).default([]).meta(Bt),enabled:z.boolean().default(false).meta(Bt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),nu=_e.merge(Fe).merge(Ze).extend({step_key:z.string().min(1).max(100).meta(Bt),label:z.string().min(1).max(200).meta(Bt),done:z.boolean().default(false).meta(Bt),completed_at:Un.meta({...Bt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),zw=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Hw=_e.merge(Ze).extend({environment_id:z.string().min(1).default("production").meta(Bt),actor_type:zw.meta(Bt),actor_id:z.string().nullable().default(null).meta(Bt),action:z.string().min(1).max(120).meta(Bt),object_type:z.string().max(120).nullable().default(null).meta(Bt),object_id:z.string().max(200).nullable().default(null).meta(Bt),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Bt),occurred_at:z.string().datetime().meta({...Bt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Kw=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),ru=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Bt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Bt),identifier_type:Kw.default("user_id").meta(Bt),note:z.string().max(500).nullable().default(null).meta(Bt),added_by:z.string().meta(Bt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi,...Ii()});({"/api/settings/api-keys":{get:I({operationId:"listApiKeys",requestParams:{query:de},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:ce(tu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:I({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(tu)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:I({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:tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:I({operationId:"listFeatureFlags",requestParams:{query:de},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ce(va)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:I({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(va)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:I({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:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:I({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(va).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:I({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:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:I({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(tf).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:tf}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:I({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(nf).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:nf}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:I({operationId:"listOnboardingSteps",requestParams:{query:de},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ce(nu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:I({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:nu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:I({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(nu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:nu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:I({operationId:"listAuditEvents",requestParams:{query:de},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ce(Hw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:I({operationId:"listPlacementTestUsers",requestParams:{query:de},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:ce(ru)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:I({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(ru)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:I({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:ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:fe,Pii:Br}=jn,{Persisted:Xr,Transient:vf}=Qn,{Internal:vr}=Mn,Gw=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({name:$n.meta(fe),email:z.string().email().meta(Br),email_verified:z.boolean().default(false).meta(fe),image:z.string().url().nullable().default(null).meta(Br),role:Gw.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:Un.meta({...fe,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({expires_at:z.string().datetime().meta(fe),token:z.string().min(1).meta({...Br,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Br),user_agent:z.string().nullable().default(null).meta(Br),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":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).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({...Br,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Br,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Br,readOnly:true}),access_token_expires_at:Un.meta({...fe,readOnly:true}),refresh_token_expires_at:Un.meta({...fe,readOnly:true}),scope:z.string().nullable().default(null).meta(fe),password:z.string().nullable().default(null).meta({...Br,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({identifier:z.string().min(1).meta(Br),value:z.string().min(1).meta({...Br,readOnly:true}),expires_at:z.string().datetime().meta(fe)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({secret:z.string().min(1).meta({...Br,readOnly:true}),backup_codes:z.string().min(1).meta({...Br,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":Xr,"x-revturbine-schema-exposure":vr});_e.extend({name:$n.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":Xr,"x-revturbine-schema-exposure":vr});var Ey=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});var wy=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr}),Ay=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr});z.object({resource:wy,action:Ay}).meta({id:"Permission","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr});var $w=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Ww=["plans","entitlements","placements","targeting","content","experiments"],Zw=["plans","entitlements","placements","targeting","content","experiments"],Yw=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Jw=["read","create","update","delete","publish","approve","invite","manage_roles"];function uu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Xw=uu($w,["read"]),Qw=[...Xw,...uu(Ww,["create","update"])];[...Qw,...uu(Zw,["publish","approve","delete"])];uu(Yw,Jw);var e1=wy.options.flatMap(t=>Ay.options.map(e=>`${t}:${e}`));z.enum(e1).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),role:Ey.default("viewer").meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});var t1=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),email:z.string().email().meta(Br),role:Ey.nullable().default(null).meta(fe),status:t1.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":Xr,"x-revturbine-schema-exposure":vr});_e.extend({name:z.string().max(200).nullable().default(null).meta(fe),public_key:z.string().min(1).meta({...Br,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":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).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({...Br,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:Un.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:Un.meta({...fe,readOnly:true}),expires_at:Un.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":Xr,"x-revturbine-schema-exposure":vr});_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":Xr,"x-revturbine-schema-exposure":vr});var Oy="0.2.86";var mu=/^[a-z0-9._]{1,100}$/;var pt={Persisted:"persisted",Transient:"transient"},st={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 jy="x-revturbine-schema-exposure",i1="readOnly",s1="x-revturbine-decision-only",pu={[s1]:true},Vr={[jy]:st.External},xf={[jy]:st.Internal};function Wn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[i1]===true||(e[n]=r);}return z.object(e)}function er(t){let e=Wn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(mu)}):e}var {Unrestricted:ur}=Qe,{Transient:qr,Persisted:a1}=pt,{Internal:Pa,External:ls}=st;z.object({page:z.coerce.number().int().min(1).default(1).meta(ur),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ur)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var Sf=t=>z.object({items:z.array(t).meta(ur),total:z.number().int().min(0).meta(ur),page:z.number().int().min(1).meta(ur),per_page:z.number().int().min(1).meta(ur),has_more:z.boolean().meta(ur)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),ie=z.object({created_at:z.string().datetime().meta({...ur,readOnly:true}),updated_at:z.string().datetime().meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),Z=z.object({id:z.string().min(1).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),ue=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var wc=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),Ac=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var $o=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":ls}),Pf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa});var en=z.string().min(1).max(200),xt=z.string().min(1).max(100),ui=z.string().max(500).optional(),Vt=z.record(z.string(),z.unknown()).default({}),na=z.number().int().min(10).max(100).multipleOf(10),tn=z.string().datetime().nullable().default(null),qt=z.object({environment_id:z.string().min(1).default("production").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),Ht=z.object({playbook_version_id:z.string().nullable().default(null).meta(ur),is_current:z.boolean().default(true).meta({...ur,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ur,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ur,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ur,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),u1=Z.merge(ie).merge(ue).merge(qt).extend({handle:xt.meta({...ur,readOnly:true}),active:z.boolean().default(true).meta({...ur,readOnly:true})});function yn(t){return u1.meta({id:t,"x-revturbine-schema-persistence":a1,"x-revturbine-schema-exposure":Pa})}var Wo=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),If=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),Zo=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":ls});var et={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Qr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},m1="x-revturbine-context",p1="x-revturbine-in-config",f1="x-revturbine-sdk-input",h1="x-revturbine-source",g1="x-revturbine-deprecation",_1={[et.Playbook]:Qr.Customer,[et.Branding]:Qr.Customer,[et.Billing]:Qr.Stripe,[et.Metering]:Qr.Customer,[et.CustomerOperations]:Qr.Runtime,[et.EventIngestion]:Qr.Runtime};function It(t,e){return {[m1]:t,[p1]:e.inConfig??t===et.Playbook,[f1]:e.sdkInput,[h1]:e.source??_1[t]}}function Oc(t){return {deprecated:true,[g1]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Tf={Named:"named",Minted:"minted"},Fy="x-revturbine-schema-identity";function Fn(t="handle"){return {[Fy]:{kind:Tf.Named,handleField:t}}}function mr(t="handle"){return {[Fy]:{kind:Tf.Minted,handleField:t}}}var G=t=>z.object({items:z.array(t)}),Le=z.object({error:z.string(),code:z.string(),request_id:z.string()}),x=t=>t,$=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:an,Financial:fu}=Qe,{Persisted:jc,Transient:hu}=pt,{External:ws}=st,b1=It(et.Playbook,{sdkInput:true}),y1=It(et.Playbook,{sdkInput:false}),Cf=It(et.Billing,{sdkInput:false}),cs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Ea=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Yo=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Ia=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),name:en.meta(an),handle:xt.meta(an),tier_position:z.number().int().min(0).default(0).meta(an),sort_order:z.number().int().default(0).meta(an),visibility:cs.default("public").meta(an),metadata:Vt.meta(an)}).meta({id:"Plan","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...b1,...Fn()}),v1=yn("PlanAnchor"),Ta=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),handle:xt.meta({...an,readOnly:true}),plan_id:z.string().min(1).meta(an),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(an),segment_id:z.string().nullable().default(null).meta(an),price_amount:z.number().min(0).meta(fu),pricing_model:Ea.meta(an),visibility:cs.default("public").meta(an),stripe_price_id:z.string().optional().meta(an),price_source:Yo.default("static").meta(an)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf,...mr()}),x1=yn("PlanVariationAnchor"),Ca=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),name:en.meta(an),handle:xt.meta(an),sort_order:z.number().int().default(0).meta(an),visibility:cs.default("public").meta(an),metadata:Vt.meta(an)}).meta({id:"AddOn","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...y1,...Fn()}),S1=yn("AddOnAnchor"),Ra=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),handle:xt.meta({...an,readOnly:true}),addon_id:z.string().min(1).meta(an),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(an),segment_id:z.string().nullable().default(null).meta(an),price_amount:z.number().min(0).meta(fu),pricing_model:Ea.meta(an),visibility:cs.default("public").meta(an),stripe_price_id:z.string().optional().meta(an),price_source:Yo.default("static").meta(an)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf,...mr()}),P1=yn("AddOnVariationAnchor"),Ly=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),ka=Z.merge(ie).merge(ue).extend({stripe_price_id:z.string().min(1).meta(an),stripe_product_id:z.string().min(1).meta(an),billing_period:Ly.meta(an),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(fu),currency:Pf.meta(fu),pricing_model:Ea.meta(an),nickname:z.string().nullable().default(null).meta(an),is_mock:z.boolean().default(false).meta(an),last_updated_from_stripe:tn.meta(an)}).meta({id:"StripePrice","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf});var I1=Wn(Ia),T1=Wn(Ta),C1=Wn(Ca),R1=Wn(Ra),k1=Wn(ka);({"/api/plan-anchors":{get:x({operationId:"listPlanAnchors",requestParams:{query:$},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:G(v1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:x({operationId:"listPlans",requestParams:{query:$},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:G(Ia)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:x({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ia)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:x({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:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:x({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:I1}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:x({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:x({operationId:"listPlanVariationAnchors",requestParams:{query:$},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:G(x1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:x({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:$},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:G(Ta)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:x({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ta)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:x({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:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:x({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:T1}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:x({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:x({operationId:"listAddOnAnchors",requestParams:{query:$},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:G(S1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:x({operationId:"listAddOns",requestParams:{query:$},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:G(Ca)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:x({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ca)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:x({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:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:x({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:C1}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:x({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:x({operationId:"listAddOnVariationAnchors",requestParams:{query:$},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:G(P1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:x({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:$},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:G(Ra)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:x({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ra)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:x({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:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:x({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:R1}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:x({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:x({operationId:"listStripePrices",requestParams:{query:$},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:G(ka)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:x({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(ka)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:x({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:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:x({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:k1}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:x({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}=Qe,{Persisted:kf,Transient:mi}=pt,{Internal:By,External:ei}=st,Uy=It(et.Playbook,{sdkInput:true}),w1=It(et.Playbook,{inConfig:false,sdkInput:false}),Ef=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":mi,"x-revturbine-schema-exposure":ei}),Jo=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Vy=z.enum(Ac).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),qy=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),wf=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Aa=z.object({entitlement_id:z.string().min(1).meta(Te),entitlement_handle:z.string().min(1).meta(Te),status:Vy.meta(Te),limit:z.number().optional().meta(Te),used:z.number().optional().meta(Te),allocation:Jo.optional().meta(Te),enforcement:wf.optional().meta(Te),source:qy.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":mi,"x-revturbine-schema-exposure":ei,...Qe.Operational});z.object({account:z.record(z.string(),Aa).optional().meta(Te),instance:z.record(z.string(),Aa).optional().meta(Te),user:z.record(z.string(),Aa).optional().meta(Te)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei,...Qe.Operational});var Dy=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),My=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),_u=z.object({kind:My.meta(Te),id:z.string().min(1).meta(Te)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Ny=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),wa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),name:en.meta(Te),handle:xt.meta(Te),customer_facing_description:z.string().max(500).optional().meta(Te),type:$o.meta(Te),unit:z.string().max(100).optional().meta(Te),period_scope:Ef.optional().meta(Te),allocation:Jo.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:Vt.meta(Te)}).meta({id:"Entitlement","x-revturbine-schema-persistence":kf,"x-revturbine-schema-exposure":ei,...Uy,...Fn()}),O1=yn("EntitlementAnchor"),ra=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),handle:xt.meta({...Te,readOnly:true}),entitlement_id:z.string().min(1).meta(Te),targets:z.array(_u).min(1).meta(Te),segment_ids:z.array(z.string()).default([]).meta(Te),visibility:Dy.default("public").meta(Te),period_scope:Ef.optional().meta(Te),instance:z.string().max(100).optional().meta(Te),reset_period:Ny.optional().meta(Te),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Te),enforcement:wf.optional().meta(Te),warning_threshold_percent:na.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:Jo.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":kf,"x-revturbine-schema-exposure":By,...Uy,...mr()}),j1=yn("EntitlementRuleAnchor");ra.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 L1=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),B1=z.object({code:L1.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":mi,"x-revturbine-schema-exposure":ei}),Rf=ra.extend({warnings:z.array(B1).optional().meta(Te)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei});var gu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.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":kf,"x-revturbine-schema-exposure":By,...w1,...mr()}),U1=Wn(wa),V1=Wn(ra);({"/api/entitlement-anchors":{get:x({operationId:"listEntitlementAnchors",requestParams:{query:$},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:G(O1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:x({operationId:"listEntitlementRuleAnchors",requestParams:{query:$},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:G(j1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:x({operationId:"listEntitlements",requestParams:{query:$},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:G(wa)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:x({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:er(wa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:x({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:x({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:U1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:x({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:$},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:G(ra)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:x({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:er(ra)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:x({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:V1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:x({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:$},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:G(gu)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:x({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:He}=Qe,{Persisted:bu,Transient:ia}=pt,{External:ki}=st,Hy=It(et.Playbook,{sdkInput:true});It(et.Playbook,{inConfig:false,sdkInput:false});var D1=It(et.Playbook,{inConfig:false,sdkInput:true}),M1=It(et.Playbook,{inConfig:false,sdkInput:false,source:Qr.Runtime}),N1=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Af=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Of=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Ky=z.object({count:z.number().int().positive().meta(He),period:Of.meta(He)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki});z.object({surface_type:z.string().min(1).meta(He),rules:z.array(Ky).meta(He),cooldown_ms:z.number().int().nonnegative().optional().meta(He)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Qe.Operational,...D1});var Gy=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":ia,"x-revturbine-schema-exposure":ki}),Oa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...He,readOnly:true}),name:en.meta(He),handle:xt.meta(He),description:ui.meta(He),category:Af.meta(He),drag_order_in_category:z.number().int().default(0).meta(He),surface_slot_id:z.string().optional().meta(He),entitlement_id:z.string().optional().meta(He),tier_threshold:z.string().optional().meta(He),threshold_percent:na.optional().meta(He),trial_type:z.enum(["free","reverse"]).optional().meta(He),trigger_type:z.string().optional().meta(He),trial_progress_percent:z.number().min(0).max(100).optional().meta(He),days_before_end:z.number().int().min(0).optional().meta(He),qualifier:N1.optional().meta(He),activation_window_start:z.string().datetime().optional().meta(He),activation_window_end:z.string().datetime().optional().meta(He),metadata:Vt.meta(He)}).meta({id:"Placement","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Hy,...Fn()}),H1=yn("PlacementAnchor"),$y=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Wy=z.object({code:$y.meta(He),message:z.string().min(1).meta(He),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(He)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),zy=Oa.extend({warnings:z.array(Wy).optional().meta(He)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki});var Zy=z.object({label:z.string().min(1).max(200).meta(He),cta_path_type:Gy.meta(He),config_fields:z.record(z.string(),z.unknown()).default({}).meta(He)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Xo=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...He,readOnly:true}),handle:xt.meta({...He,readOnly:true}),placement_id:z.string().min(1).meta(He),drag_order:z.number().int().default(0).meta(He),target_plan_ids:z.array(z.string()).default([]).meta(He),target_plan_billing_cadences:z.array(z.string()).default([]).meta(He),target_segments:z.array(z.string()).default([]).meta(He),surface_slot_ids:z.array(z.string()).default([]).meta(He),surface_template_id:z.string().min(1).meta(He),content_fields:z.record(z.string(),z.unknown()).default({}).meta(He),cta_list:z.array(Zy).default([]).meta(He),max_per_period:z.number().int().min(0).nullable().default(null).meta(He),max_period_unit:Of.default("session").meta(He),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(He),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(He),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(He),recommendation_plan_override:z.string().optional().meta(He)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Hy,...mr()}),K1=yn("PlacementPayloadAnchor"),Yy=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({surface_slot_handle:z.string().min(1).max(200).meta(He),surface_type:wc.meta(He),surface_template_ids:z.array(z.string()).default([]).meta(He),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(He),first_seen:z.string().datetime().meta({...He,readOnly:true}),last_seen:z.string().datetime().meta({...He,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(He),placement_count:z.number().int().min(0).default(0).meta({...He,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...M1,...Fn("surface_slot_handle")}),G1=Wn(Oa),$1=Wn(Xo);({"/api/placement-anchors":{get:x({operationId:"listPlacementAnchors",requestParams:{query:$},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:G(H1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:x({operationId:"listPlacements",requestParams:{query:$},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:G(Oa)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:x({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:er(Oa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:x({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:x({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:zy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:x({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:x({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Af,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:x({operationId:"listPlacementPayloadAnchors",requestParams:{query:$},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:G(K1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:x({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:$},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:G(Xo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:x({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:er(Xo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:x({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:$1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:x({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:x({operationId:"listSurfaceSlots",requestParams:{query:$},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:G(Yy)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Er,Pii:Qo}=Qe,{Persisted:Ff,Transient:Lf}=pt,{Internal:el}=st,Z1=It(et.CustomerOperations,{sdkInput:false}),Jy=z.object({external_id:z.string().min(1).meta(Qo),traits:z.record(z.string(),z.unknown()).default({}).meta(Qo),plan_id:z.string().optional().meta(Er)}).meta({id:"Identity","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el}),yu=z.enum(["payment_failed","payment_method_missing"]),jf=Z.merge(ie).merge(ue).extend({external_id:z.string().min(1).meta(Qo),identity:Jy.meta(Qo),stripe_customer_id:z.string().optional().meta(Er),current_plan_id:z.string().optional().meta(Er),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Er),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Er),billing_health_issues:z.array(yu).default([]).meta(Er),metadata:Vt.meta(Er)}).meta({id:"Customer","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el}),Xy=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),Qy=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),ev=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),As=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...Er,readOnly:true}),customer_id:z.string().min(1).meta(Qo),customer_id_list:z.array(z.string()).optional().meta(Qo),override_type:Qy.meta(Er),target_id:z.string().min(1).meta(Er),value:z.record(z.string(),z.unknown()).default({}).meta(Er),duration_type:Xy.default("permanent").meta(Er),duration_value:z.string().optional().meta(Er),expiry_date:tn.meta(Er),status:ev.default("active").meta(Er),reason:z.string().max(500).optional().meta(Er),created_by:z.string().optional().meta(Er)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el,...Z1,...mr()});({"/api/customers":{get:x({operationId:"listCustomers",requestParams:{query:$},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:G(jf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:x({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:jf}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:x({operationId:"listCustomerOverrides",requestParams:{query:$},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:G(As)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:x({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:x({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:As.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:x({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:x({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:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:x({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:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:qe,Pii:Fc,Financial:Bf}=Qe,{Persisted:tv,Transient:ds}=pt,{External:tl,Internal:Lc}=st,Bc=z.object({in_trial:z.boolean().meta(qe),trial_type:z.string().optional().meta(qe),plan_handle:z.string().optional().meta(qe),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(qe),trial_limit_type:z.enum(["time","usage"]).optional().meta(qe),progress_percent:z.number().min(0).max(100).optional().meta(qe),day_number:z.number().int().min(0).optional().meta(qe),days_remaining:z.number().int().min(0).optional().meta(qe),usage_entitlement_handle:z.string().optional().meta(qe),usage_consumed:z.number().int().min(0).optional().meta(qe),usage_remaining:z.number().int().min(0).optional().meta(qe),usage_limit:z.number().int().min(0).optional().meta(qe)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl}),Uf=z.object({entitlement_handle:z.string().min(1).meta(qe),unit:z.string().min(1).meta(qe),amount:z.number().min(0).meta(qe),limit:z.number().min(0).optional().meta(qe),reset_date:z.string().optional().meta(qe)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl});var Vf=z.object({id:z.string().min(1).meta(qe),name:z.string().min(1).meta(qe),price:z.string().optional().meta(qe),billing_period:z.enum(["monthly","annual","none"]).optional().meta(qe)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl}),nv=z.object({product_instance_id:z.string().min(1).meta(qe),user_id:z.string().min(1).meta(Fc),plan:Vf.optional().meta(qe),usage:z.record(z.string(),Uf).default({}).meta(qe),trial:Bc.optional().meta(qe),entitlements:z.record(z.string(),z.union([z.boolean(),Aa])).default({}).meta(qe)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":tv,"x-revturbine-schema-exposure":tl}),ja=Z.merge(ue).merge(ie).extend({user_id:z.string().min(1).meta(Fc),account_id:z.string().min(1).nullable().optional().meta(Fc),email:z.string().email().nullable().optional().meta(Fc),email_type:z.string().optional().meta(qe),plan:Vf.optional().meta(qe),usage:z.record(z.string(),Uf).default({}).meta(qe),trial:Bc.optional().meta(qe),payment_failed:z.boolean().optional().meta(qe),payment_at_risk:z.boolean().optional().meta(qe),tiers:z.record(z.string(),z.string()).optional().meta(qe),entitlements:z.record(z.string(),z.union([z.boolean(),Aa])).default({}).meta(qe),instances:z.array(nv).optional().meta(qe),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Fc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...qe,"x-revturbine-schema-persistence":ds}),derived_config_version:z.string().nullable().optional().meta(qe),context_hash:z.string().nullable().optional().meta(qe),derived_computed_at:tn.meta(qe),activity_score:z.number().int().min(0).nullable().optional().meta(qe),activity_score_computed_at:z.string().datetime().nullable().optional().meta(qe),experiments:z.record(z.string(),z.string()).optional().meta(qe)}).meta({id:"UserContext","x-revturbine-schema-persistence":tv,"x-revturbine-schema-exposure":tl}),X1=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...qe,...Vr}),days_remaining:z.number().int().min(0).optional().meta({...qe,...Vr}),ends_at:z.string().optional().meta({...qe,...Vr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),Q1=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...qe,...Vr}),failed_payment_reason:z.string().optional().meta({...Bf,...pu}),issues:z.array(yu).optional().meta({...Bf,...pu}),provider_subscription_id:z.string().optional().meta({...Bf,...xf})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),eA=z.object({can_upgrade:z.boolean().optional().meta({...qe,...Vr}),can_manage_billing:z.boolean().optional().meta({...qe,...Vr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),tA=z.object({handle:z.string().min(1).optional().meta({...qe,...Vr}),name:z.string().min(1).optional().meta({...qe,...Vr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc});z.object({subject:z.string().min(1).meta({...qe,...Vr}),context_version:z.string().optional().meta({...qe,...Vr}),trial:X1.optional().meta({...qe,...Vr}),billing:Q1.optional().meta({...qe,...Vr}),plan:tA.optional().meta({...qe,...Vr}),capabilities:eA.optional().meta({...qe,...Vr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc});({"/api/user-contexts":{get:x({operationId:"listUserContexts",requestParams:{query:$},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:G(ja)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:x({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:x({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:ja.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:x({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}=Qe,{Persisted:qf,Transient:rv}=pt,{Internal:Uc}=st,iA=It(et.Playbook,{sdkInput:true}),iv=It(et.Playbook,{inConfig:false,sdkInput:true}),sv=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Uc}),av=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Uc}),vu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:en.meta(tr),handle:xt.optional().meta(tr),category:sv.default("custom").meta(tr),visibility_toggle:z.boolean().default(true).meta(tr),source_type:av.default("system").meta(tr),estimated_size:z.number().int().min(0).optional().meta(tr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":Uc,...iv,...Fn()}),sA=yn("SegmentDimensionAnchor"),xu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),dimension_id:z.string().min(1).meta(tr),name:en.meta(tr),handle:xt.meta(tr),description:ui.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":qf,"x-revturbine-schema-exposure":Uc,...iv,...Fn()}),aA=yn("SegmentValueAnchor");Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:en.meta(tr),handle:xt.meta(tr),description:ui.meta(tr),rules:z.record(z.string(),z.unknown()).default({}).meta(tr),experiment_id: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:Vt.meta(tr)}).meta({id:"Segment","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":Uc,...iA,...Fn()});({"/api/segment-dimension-anchors":{get:x({operationId:"listSegmentDimensionAnchors",requestParams:{query:$},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:G(sA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:x({operationId:"listSegmentValueAnchors",requestParams:{query:$},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:G(aA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:x({operationId:"listSegmentDimensions",requestParams:{query:$},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:G(vu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:x({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:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:x({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:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:x({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:$},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:G(xu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:x({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:xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:x({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:xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:x({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:St}=Qe,{Persisted:nl,Transient:ov}=pt,{External:sa}=st,Df=It(et.Playbook,{sdkInput:true}),cA=It(et.Playbook,{inConfig:false,sdkInput:false}),dA=It(et.Playbook,{inConfig:false,sdkInput:true}),uA=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.CodeConstant});Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),handle:xt.meta({...St,readOnly:true}),name:en.meta(St),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(St),subject:z.string().max(500).optional().meta(St),body:z.string().meta(St),template_variables:z.array(z.string()).default([]).meta(St),metadata:Vt.meta(St)}).meta({id:"Message","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...cA,...mr()});var Su=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),action_type:Zo.meta(St),target_url:z.string().optional().meta(St),target_plan_id:z.string().optional().meta(St),config_fields:z.record(z.string(),z.unknown()).default({}).meta(St),metadata:Vt.meta(St)}).meta({id:"CtaPath","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),pA=yn("CtaPathAnchor"),lv=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":nl,"x-revturbine-schema-exposure":sa,...uA}),cv=z.object({name:z.string().min(1),field_type:lv,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":nl,"x-revturbine-schema-exposure":sa,...dA}),Pu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),surface_type:If.meta(St),field_definitions:z.array(cv).default([]).meta(St),description:ui.meta(St)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),fA=yn("SurfaceTemplateAnchor"),Iu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),content_fields:z.record(z.string(),z.unknown()).default({}).meta(St),variation_dimension_id:z.string().optional().meta(St),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(St),notes:z.string().max(1e3).optional().meta(St),used_in_count:z.number().int().min(0).default(0).meta({...St,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),hA=yn("MessageBlockRecordAnchor"),dv=z.object({segment_id:z.string().min(1).meta(St),message_block_id:z.string().min(1).meta(St),ui_path_id:z.string().optional().meta(St),promotion_id:z.string().optional().meta(St)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":sa});z.object({payload_id:z.string().min(1).meta(St),tenant_id:z.string().min(1).meta(St),name:en.meta(St),surface_template_id:z.string().min(1).meta(St),default_message_block_id:z.string().min(1).meta(St),segment_content_map:z.array(dv).optional().meta(St),ui_path_id:z.string().optional().meta(St),promotion_id:z.string().optional().meta(St),status:z.enum(["draft","active","inactive"]).meta(St),created_at:z.string().datetime().optional().meta({...St,readOnly:true}),updated_at:z.string().datetime().optional().meta({...St,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":sa});({"/api/surface-template-anchors":{get:x({operationId:"listSurfaceTemplateAnchors",requestParams:{query:$},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:G(fA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:x({operationId:"listSurfaceTemplates",requestParams:{query:$},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:G(Pu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:x({operationId:"listMessageBlockRecordAnchors",requestParams:{query:$},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:G(hA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:x({operationId:"listMessageBlocks",requestParams:{query:$},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:G(Iu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:x({operationId:"listCtaPathAnchors",requestParams:{query:$},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:G(pA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:x({operationId:"listCtaPaths",requestParams:{query:$},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:G(Su)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:rl,Pii:bA}=Qe,{Persisted:uv}=pt,{Internal:yA,External:vA}=st,xA=It(et.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...rl,readOnly:true}),name:z.string().min(1).max(120).meta(rl),mode:z.enum(["light","dark","system"]).default("system").meta(rl),tokens:z.record(z.string(),z.string()).default({}).meta(rl)}).meta({id:"Theme","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":vA,...xA});var Mf=Z.merge(ie).extend({user_id:z.string().min(1).meta(bA),scope:z.string().min(1).meta(rl),preferences:z.record(z.string(),z.unknown()).default({}).meta(rl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":yA});({"/api/ui-preferences":{get:x({operationId:"listUiPreferences",requestParams:{query:$},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:G(Mf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:x({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Wn(Mf))}}},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:kt,Financial:us}=Qe,{Persisted:mv,Transient:Vc}=pt,{External:qc,Internal:pv}=st,fv=z.object({month:z.string().meta(kt),cohort_size:z.number().int().min(0).meta(kt),retained:z.number().int().min(0).meta(kt),retention_rate:z.number().min(0).max(1).meta(kt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),hv=z.object({step:z.string().meta(kt),label:z.string().meta(kt),count:z.number().int().min(0).meta(kt),conversion_rate:z.number().min(0).max(1).meta(kt),drop_off_rate:z.number().min(0).max(1).meta(kt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),gv=z.object({placement_id:z.string().meta(kt),placement_name:z.string().meta(kt),impressions:z.number().int().min(0).meta(kt),clicks:z.number().int().min(0).meta(kt),conversions:z.number().int().min(0).meta(kt),ctr:z.number().min(0).meta(kt),conversion_rate:z.number().min(0).meta(kt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),_v=z.object({date:z.string().meta(kt),mrr_cents:z.number().int().min(0).meta(us),arr_cents:z.number().int().min(0).meta(us),new_mrr_cents:z.number().int().min(0).meta(us),churned_mrr_cents:z.number().int().min(0).meta(us),expansion_mrr_cents:z.number().int().min(0).meta(us),net_new_mrr_cents:z.number().int().meta(us)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),bv=z.object({metric_key:z.string().min(1).meta(kt),label:z.string().meta(kt),current_value:z.number().meta(us),previous_value:z.number().nullable().default(null).meta(us),change_percent:z.number().nullable().default(null).meta(kt),period:z.string().meta(kt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(kt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),Nf=Z.merge(ie).merge(ue).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(kt),severity:Wo.meta(kt),resource_type:z.string().min(1).meta(kt),resource_id:z.string().min(1).meta(kt),summary:z.string().max(1e3).meta(kt),expected_value:z.unknown().optional().meta(kt),actual_value:z.unknown().optional().meta(kt),affected_customer_count:z.number().int().min(0).default(0).meta(kt),is_resolved:z.boolean().default(false).meta(kt),resolved_at:tn.meta(kt),metadata:Vt.meta(kt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":pv}),zf=Z.merge(ie).merge(ue).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(kt),severity:Wo.meta(kt),title:z.string().min(1).max(300).meta(kt),description:z.string().max(2e3).meta(kt),resource_type:z.string().optional().meta(kt),resource_id:z.string().optional().meta(kt),is_acknowledged:z.boolean().default(false).meta(kt),acknowledged_at:tn.meta(kt),acknowledged_by:z.string().nullable().default(null).meta(kt),metadata:Vt.meta(kt)}).meta({id:"Alert","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":pv});({"/api/analytics/kpis":{get:x({operationId:"listKpiAggregates",requestParams:{query:$},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:G(bv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:x({operationId:"listPlacementPerformance",requestParams:{query:$},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:G(gv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:x({operationId:"listRevenueMetrics",requestParams:{query:$},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:G(_v)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:x({operationId:"listCohortMetrics",requestParams:{query:$},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:G(fv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:x({operationId:"listFunnelSteps",requestParams:{query:$},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:G(hv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:x({operationId:"listDriftReports",requestParams:{query:$},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:G(Nf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:x({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:Nf}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:x({operationId:"listAlerts",requestParams:{query:$},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:G(zf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:x({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:zf}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:q,Pii:il}=Qe,{Persisted:yv,Transient:Hn}=pt,{Internal:aa,External:_r}=st,Kf=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),vv=Z.extend({event_type:z.string().min(1).meta(q),source:Kf.default("sdk").meta(q),tenant_id:z.string().min(1).optional().meta(q),user_id:z.string().min(1).optional().meta(il),session_id:z.string().min(1).optional().meta(il),occurred_at:z.string().datetime().meta(q),request_id:z.string().min(1).meta(q),attributes:z.record(z.string(),z.unknown()).default({}).meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),xv=vv.extend({ingested_at:z.string().datetime().meta(q)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":aa});z.array(z.object({id:z.string().min(1).optional().meta(q),event_type:z.string().min(1).meta(q),occurred_at:z.string().datetime().optional().meta(q),tenant_id:z.string().min(1).optional().meta(q),user_id:z.string().min(1).optional().meta(il),session_id:z.string().min(1).optional().meta(il),attributes:z.record(z.string(),z.unknown()).optional().meta(q),payload:z.record(z.string(),z.unknown()).optional().meta(q),message:z.string().optional().meta(q),level:z.string().optional().meta(q),path:z.string().optional().meta(q)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var Sv=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({user_id:z.string().min(1).meta(il),placement_id:z.string().min(1).meta(q),treatment_id:z.string().min(1).optional().meta(q),surface_slot_id:z.string().min(1).optional().meta(q),surface_template_id:z.string().min(1).optional().meta(q),payload_id:z.string().min(1).optional().meta(q),interaction_type:Sv.meta(q),interaction_at:z.string().datetime().optional().meta(q),message_block_handle:z.string().min(1).optional().meta(q),message_block_id:z.string().min(1).optional().meta(q),experiment_id:z.string().min(1).optional().meta(q),variant_key:z.string().min(1).optional().meta(q),test:z.boolean().optional().meta(q),metadata:z.record(z.string(),z.unknown()).optional().meta(q)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});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":_r});z.object({days_remaining:z.number().int().min(0).optional().meta(q)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({entitlement_handle:z.string().optional().meta(q),current_usage:z.number().min(0).optional().meta(q),usage_limit:z.number().min(0).optional().meta(q),usage_percent:z.number().min(0).max(100).optional().meta(q),threshold:z.number().min(0).optional().meta(q),balance:z.number().min(0).optional().meta(q),allocation:z.number().min(0).optional().meta(q),seats_used:z.number().int().min(0).optional().meta(q),seats_allowed:z.number().int().min(0).optional().meta(q)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({feature:z.string().min(1).meta(q)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({retry_count:z.number().int().min(0).optional().meta(q),renewal_date:z.string().optional().meta(q)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({event_type:z.string().min(1).meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});var Iv=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Tv=z.enum(["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"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({event_type:Tv.meta(q),source:Iv.meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({q:z.string().optional().meta(q),source:Kf.optional().meta(q),event_type:z.string().optional().meta(q),from:z.string().datetime().optional().meta(q),to:z.string().datetime().optional().meta(q),page:z.coerce.number().int().min(1).default(1).meta(q),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(q)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var Cv=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),Rv=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),Tu=Z.merge(ie).merge(ue).extend({event_id:z.string().min(1).meta(q),event_type:z.string().min(1).meta(q),source:Cv.meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q),status:Rv.default("processed").meta(q),processed_at:z.string().datetime().optional().meta(q),error_message:z.string().optional().meta(q)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":aa});z.object({accepted:z.number().int().min(0).meta(q)}).meta({id:"null","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var FA=500,LA=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),kv=z.object({environment_id:z.string().min(1).meta(q),user_id:z.string().min(1).meta(il),account_id:z.string().min(1).meta(q),event_name:z.string().min(1).max(120).meta(q),event_ts:z.string().datetime().meta(q),properties:z.string().optional().meta(q),surface_slot_id:z.string().nullable().optional().meta(q),placement_id:z.string().nullable().optional().meta(q),payload_id:z.string().nullable().optional().meta(q),request_id:z.string().optional().meta(q),experiment_id:z.string().nullable().optional().meta(q),variant_key:z.string().nullable().optional().meta(q),tenant_id:z.string().optional().meta(q),event_id:z.string().nullable().optional().meta(q),origin:LA.nullable().optional().meta(q),playbook_version:z.string().nullable().optional().meta(q),decision_id:z.string().nullable().optional().meta(q),test:z.boolean().optional().meta(q)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({events:z.array(kv).min(1).max(FA).meta(q)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});var BA=10,wv=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Av=z.object({plans:z.number().int().min(0).meta(q),entitlements:z.number().int().min(0).meta(q),entitlement_rules:z.number().int().min(0).meta(q),segments:z.number().int().min(0).meta(q),placements:z.number().int().min(0).meta(q),placement_payloads:z.number().int().min(0).meta(q),content_ui_paths:z.number().int().min(0).meta(q),surface_templates:z.number().int().min(0).meta(q)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Ov=z.object({event_type:wv.meta(q),occurred_at:z.string().datetime().meta(q),request_id:z.string().min(1).optional().meta(q),config_hash_id:z.string().min(1).max(64).optional().meta(q),sdk_version:z.string().min(1).max(64).optional().meta(q),runtime_mode:z.string().min(1).max(64).optional().meta(q),schema_version:z.string().min(1).max(64).optional().meta(q),bundle_version:z.string().min(1).max(64).optional().meta(q),config_shape:Av.optional().meta(q),message:z.string().max(500).optional().meta(q),reason:z.string().min(1).max(64).optional().meta(q),placement_handle:z.string().min(1).max(64).optional().meta(q),slot_handle:z.string().min(1).max(64).optional().meta(q),surface:z.string().min(1).max(64).optional().meta(q),plan_handle:z.string().min(1).max(64).optional().meta(q),entitlement_handle:z.string().min(1).max(64).optional().meta(q)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({events:z.array(Ov).min(1).max(BA).meta(q)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});({"/api/events/search":{get:x({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Sf(xv)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:x({operationId:"listWebhookEvents",requestParams:{query:$},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:G(Tu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:at}=Qe,{Persisted:Mc,Transient:Nc}=pt,{Internal:ms}=st,Fv=It(et.Playbook,{sdkInput:true}),Lv=It(et.Playbook,{inConfig:false,sdkInput:true}),Bv=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Gf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),$f=z.object({name:en.meta(at),handle:xt.meta(at),plan_id:z.string().nullable().optional().meta(at),segment_id:z.string().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(at),grace_period_days:z.number().int().min(0).default(0).meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),require_payment_method:z.boolean().default(false).meta(at),auto_convert:z.boolean().default(true).meta(at),convert_to_plan_id:z.string().optional().meta(at),fallback_plan_id:z.string().optional().meta(at),limit_per_customer:z.number().int().min(1).default(1).meta(at),is_active:z.boolean().default(true).meta(at),metadata:Vt.meta(at)}),Fa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...at,readOnly:true})}).merge($f).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Fv,...Fn()}),VA=yn("FreeTrialRuleAnchor"),Uv=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Wf=z.object({name:en.meta(at),handle:xt.meta(at),premium_plan_id:z.string().min(1).meta(at),fallback_plan_id:z.string().min(1).meta(at),segment_id:z.string().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),start_policy:Uv.default("signup").meta(at),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(at),entitlements_during_trial:z.array(z.string()).default([]).meta(at),is_active:z.boolean().default(true).meta(at),metadata:Vt.meta(at)}),La=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...at,readOnly:true})}).merge(Wf).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Fv,...Fn()}),qA=yn("ReverseTrialRuleAnchor"),Zf=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Yf=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Ba=Z.merge(ie).merge(ue).extend({trial_limit_policy:Zf.default("1_per_lifetime").meta(at),eligibility_scope:Yf.default("per_customer").meta(at)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Lv}),Ua=Z.merge(ie).merge(ue).extend({trial_limit_policy:Zf.default("1_per_lifetime").meta(at),eligibility_scope:Yf.default("per_customer").meta(at)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Lv}),Dc=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(at),rule_id:z.string().min(1).meta(at),rule_type:z.enum(["free_trial","reverse_trial"]).meta(at),plan_id:z.string().min(1).meta(at),status:Bv.default("active").meta(at),started_at:z.string().datetime().meta({...at,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),converted_at:tn.meta(at),cancelled_at:tn.meta(at),metadata:Vt.meta(at)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms});({"/api/free-trial-rule-anchors":{get:x({operationId:"listFreeTrialRuleAnchors",requestParams:{query:$},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:G(VA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:x({operationId:"listFreeTrialRules",requestParams:{query:$},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:G(Fa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:x({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:Fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Fa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"listReverseTrialRuleAnchors",requestParams:{query:$},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:G(qA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:x({operationId:"listReverseTrialRules",requestParams:{query:$},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:G(La)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:x({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:La}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:La.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:La}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"listFreeTrialSettings",requestParams:{query:$},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:G(Ba)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:x({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:Ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:x({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ba.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:x({operationId:"listReverseTrialSettings",requestParams:{query:$},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:G(Ua)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:x({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:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:x({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ua.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:x({operationId:"listTrialInstances",requestParams:{query:$},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:G(Dc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:x({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:x({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:x({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:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:wn}=Qe,{Persisted:Xf,Transient:Vv}=pt,{Internal:zc}=st,qv=It(et.Playbook,{inConfig:false,sdkInput:true}),Dv=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":zc}),Mv=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":zc}),Nv=z.object({variant_id:z.string().min(1),name:en,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc,...qv}),ps=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...wn,readOnly:true}),name:en.meta(wn),handle:xt.meta(wn),description:z.string().max(1e3).optional().meta(wn),experiment_type:Mv.meta(wn),status:Dv.default("draft").meta(wn),target_resource_id:z.string().optional().meta(wn),target_segment_ids:z.array(z.string()).default([]).meta(wn),variants:z.array(Nv).min(2).meta(wn),primary_metric:z.string().min(1).meta(wn),metric_threshold:z.number().default(.05).meta(wn),secondary_metrics:z.array(z.string()).default([]).meta(wn),traffic_allocation:z.number().min(0).max(1).default(1).meta(wn),started_at:tn.meta(wn),ended_at:tn.meta(wn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(wn),winning_variant_id:z.string().nullable().default(null).meta(wn),metadata:Vt.meta(wn)}).meta({id:"Experiment","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc,...qv,...Fn()}),MA=yn("ExperimentAnchor"),zv=Wo,Jf=Z.merge(ie).merge(ue).extend({experiment_id:z.string().optional().meta(wn),resource_type:z.string().min(1).meta(wn),resource_id:z.string().min(1).meta(wn),severity:zv.default("info").meta(wn),title:z.string().min(1).max(300).meta(wn),description:z.string().max(2e3).meta(wn),suggested_action:z.string().max(1e3).optional().meta(wn),estimated_impact:z.number().optional().meta(wn),is_dismissed:z.boolean().default(false).meta(wn),metadata:Vt.meta(wn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc});({"/api/experiment-anchors":{get:x({operationId:"listExperimentAnchors",requestParams:{query:$},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:G(MA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:x({operationId:"listExperiments",requestParams:{query:$},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:G(ps)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:x({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:x({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:ps.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:x({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:x({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:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:x({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:x({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:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:x({operationId:"listOptimizationSuggestions",requestParams:{query:$},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:G(Jf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:x({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Jf}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:xr,Financial:Hv}=Qe,{Persisted:zA,Transient:Kv}=pt,{Internal:Qf}=st,HA=It(et.Playbook,{sdkInput:true}),Gv=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Kv,"x-revturbine-schema-exposure":Qf}),$v=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Kv,"x-revturbine-schema-exposure":Qf}),Os=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...xr,readOnly:true}),name:en.meta(xr),handle:xt.meta(xr),description:z.string().max(1e3).optional().meta(xr),rt_status:Gv.default("draft").meta(xr),discount_type:$v.meta(xr),discount_value:z.number().min(0).meta(Hv),currency:z.string().length(3).default("USD").meta(Hv),applicable_plan_ids:z.array(z.string()).default([]).meta(xr),applicable_addon_ids:z.array(z.string()).default([]).meta(xr),target_segment_ids:z.array(z.string()).default([]).meta(xr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(xr),current_redemptions:z.number().int().min(0).default(0).meta({...xr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(xr),starts_at:tn.meta(xr),ends_at:tn.meta(xr),stripe_coupon_id:z.string().nullable().default(null).meta(xr),stripe_promotion_code_id:z.string().nullable().default(null).meta(xr),auto_sync_stripe:z.boolean().default(false).meta(xr),metadata:Vt.meta(xr)}).meta({id:"Promotion","x-revturbine-schema-persistence":zA,"x-revturbine-schema-exposure":Qf,...HA,...Fn()}),KA=yn("PromotionAnchor");({"/api/promotion-anchors":{get:x({operationId:"listPromotionAnchors",requestParams:{query:$},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:G(KA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:x({operationId:"listPromotions",requestParams:{query:$},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:G(Os)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:x({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:x({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Os.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:x({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:x({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:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:x({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Vn,Pii:eh}=Qe,{Persisted:th}=pt,{Internal:nh}=st,Wv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),placement_id:z.string().min(1).meta(Vn),payload_id:z.string().nullable().default(null).meta(Vn),variant_id:z.string().nullable().default(null).meta(Vn),surface_type:z.string().meta(Vn),presented_at:z.string().datetime().meta({...Vn,readOnly:true}),dismissed_at:tn.meta(Vn),cta_clicked_at:tn.meta(Vn),cta_action_type:z.string().nullable().default(null).meta(Vn),converted:z.boolean().default(false).meta(Vn),session_id:z.string().optional().meta(Vn),metadata:Vt.meta(Vn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh}),Zv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),placement_id:z.string().min(1).meta(Vn),decision:z.enum(["show","suppress","defer"]).meta(Vn),reason:z.string().max(500).meta(Vn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Vn),experiment_id:z.string().nullable().default(null).meta(Vn),variant_id:z.string().nullable().default(null).meta(Vn),latency_ms:z.number().min(0).optional().meta(Vn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh}),Yv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),entitlement_handle:z.string().min(1).meta(Vn),entitlement_type:z.string().meta(Vn),result:z.enum(["granted","denied","limited","metered"]).meta(Vn),current_usage:z.number().nullable().default(null).meta(Vn),limit:z.number().nullable().default(null).meta(Vn),source:z.enum(["plan","addon","override","trial"]).meta(Vn),source_id:z.string().min(1).meta(Vn),latency_ms:z.number().min(0).optional().meta(Vn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh});({"/api/presentation-records":{get:x({operationId:"listPresentationRecords",requestParams:{query:$},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:G(Wv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:x({operationId:"listDecisionLogs",requestParams:{query:$},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:G(Zv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:x({operationId:"listEntitlementEvalLogs",requestParams:{query:$},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:G(Yv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:g}=Qe,{Persisted:ul,Transient:ut}=pt,{Internal:Ei,External:Dt}=st,Et=It(et.Playbook,{sdkInput:true}),al=It(et.Playbook,{sdkInput:false}),oa=It(et.Playbook,{inConfig:false,sdkInput:false}),Jv=It(et.Playbook,{inConfig:false,sdkInput:true}),sl=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.CodeConstant}),rh=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.Runtime}),ih=It(et.Playbook,{inConfig:false,sdkInput:false,source:Qr.Runtime}),WA=It(et.Billing,{sdkInput:false}),ZA=It(et.Metering,{sdkInput:false}),YA=It(et.Branding,{inConfig:true,sdkInput:true}),JA=It(et.Branding,{sdkInput:false}),Xv="1.0.0",ol=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:en.meta(g),handle:xt.meta(g),description:ui.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:Vt.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...oa,...Fn()}),XA=yn("SeatTypeAnchor"),ll=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.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:Vt.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...oa,...Fn()}),QA=yn("PersonalizationTokenAnchor"),Qv=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),Cu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:Qv.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:Vt.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...WA,...mr()});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":ut,"x-revturbine-schema-exposure":Dt,...JA});var cl=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.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:Vt.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...ZA,...mr()}),sh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),dl=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.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:sh.default("warn").meta(g),hard_limit_action:sh.default("block").meta(g),grace_period_hours:z.number().int().min(0).default(0).meta(g),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...Jv,...mr()}),tO=yn("UsageEnforcementSettingsAnchor"),ex=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":ut,"x-revturbine-schema-exposure":Ei}),tx=z.object({id:z.string().min(1).meta(g),group:z.array(ex).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":ut,"x-revturbine-schema-exposure":Ei}),nx=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),oh=z.object({capRules:z.array(tx).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:nx.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),Ru=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.meta({...g,readOnly:true}),global_frequency_cap:oh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...Jv,...mr()}),nO=yn("PlacementSettingsAnchor"),lh=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":ut,"x-revturbine-schema-exposure":Dt}),ch=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(lh).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_id:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),rx=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:cs.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),ix=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:cs.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...al}),sx=z.object({handle:z.string().min(1).meta(g),plan_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Ea.meta(g),visibility:cs.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:Yo.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),ax=z.object({handle:z.string().min(1).meta(g),addon_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Ea.meta(g),visibility:cs.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:Yo.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),ox=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),lx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),cx=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:oh.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),dx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),ux=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),mx=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:$o.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),px=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(_u).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:$o.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}),...ra.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:Jo.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),fx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),hx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),gx=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":ut,"x-revturbine-schema-exposure":Dt}),_x=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(gx).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),dh=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":ut,"x-revturbine-schema-exposure":Dt}),bx=z.object({name:z.string().min(1).meta(g),action_type:dh.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),yx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),vx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),ah=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":ut,"x-revturbine-schema-exposure":Dt}),xx=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:ah.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:ah})).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":ut,"x-revturbine-schema-exposure":Dt,...Et}),Sx=z.object({label:z.string().meta(g),path:Zo.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),uh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(Sx).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),mh=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":ut,"x-revturbine-schema-exposure":Dt}),Px=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":ut,"x-revturbine-schema-exposure":Dt}),ph=z.object({max_per_period:Px.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),Ix=z.object({id:z.string().min(1).meta(g),target:mh.meta(g),surfaces:z.array(uh).meta(g),caps:ph.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":ut,"x-revturbine-schema-exposure":Dt}),Tx=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:na}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:na}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:na}),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":ut,"x-revturbine-schema-exposure":Dt}),Cx=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),fh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:Cx.meta(g),trigger:Tx.meta(g),payloads:z.array(Ix).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),Rx=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:mh.meta(g),caps:ph.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(uh).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":ut,"x-revturbine-schema-exposure":Dt,...Et}),rO=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),iO=Z.merge($f).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),sO=Z.merge(Wf).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),kx=z.object({plans:z.array(rx).meta({...g,...Et}),addons:z.array(ix).optional().meta({...g,...al}),entitlements:z.array(mx).meta({...g,...Et}),entitlement_rules:z.array(px).meta({...g,...Et}),segments:z.array(ch).meta({...g,...Et}),content_ui_paths:z.array(bx).meta({...g,...Et}),slot_configs:z.array(fx).optional().meta({...g,...Et,...Oc({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,...Et,...Oc({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,...YA,...Oc({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(hx).optional().meta({...g,...Et}),message_blocks:z.array(xx).optional().meta({...g,...Et}),placement_payloads:z.array(Rx).optional().meta({...g,...Et}),placements:z.array(fh).optional().meta({...g,...Et}),content_promotions:z.array(yx).optional().meta({...g,...Et}),personalization_tokens:z.array(vx).optional().meta({...g,...Et}),surface_templates:z.array(_x).optional().meta({...g,...Et}),free_trial_rules:z.array(iO).optional().meta({...g,...al}),reverse_trial_rules:z.array(sO).optional().meta({...g,...al}),plan_variations:z.array(sx).optional().meta({...g,...al}),addon_variations:z.array(ax).optional().meta({...g,...al}),extension_rules:z.array(rO).optional().meta({...g,...Et}),seat_types:z.array(ox).optional().meta({...g,...Et}),enforcement_defaults:z.array(lx).optional().meta({...g,...Et}),placement_settings:z.array(cx).optional().meta({...g,...Et}),segment_dimensions:z.array(dx).optional().meta({...g,...Et}),meter_bindings:z.array(ux).optional().meta({...g,...Et}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...oa}),signal_catalog:z.object({}).strict().optional().meta({...g,...oa})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),Ex=z.object({artifact_type:z.literal("playbook").meta({...g,...sl,readOnly:true}),format_version:z.literal(Xv).meta({...g,...sl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...sl}),playbook_version_id:z.string().nullable().default(null).meta({...g,...rh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...rh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...sl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...sl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...sl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...rh}),ku=Ex.extend(kx.shape).meta({"x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});function aO(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function wx(t){if(!aO(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(wx,ku).meta({id:"Playbook","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});z.preprocess(wx,ku.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});({"/api/seat-type-anchors":{get:x({operationId:"listSeatTypeAnchors",requestParams:{query:$},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:G(XA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:x({operationId:"listSeatTypes",requestParams:{query:$},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:G(ol)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:x({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:x({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:x({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:x({operationId:"listPersonalizationTokenAnchors",requestParams:{query:$},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:G(QA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:x({operationId:"listPersonalizationTokens",requestParams:{query:$},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:G(ll)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:x({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:er(ll)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:x({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ll.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:x({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:x({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Wn(Cu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Cu}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:x({operationId:"listMeteringConfigs",requestParams:{query:$},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:G(cl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:x({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:er(cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:x({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:cl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:x({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:x({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:$},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:G(tO)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:x({operationId:"listUsageEnforcementSettings",requestParams:{query:$},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:G(dl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:x({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:x({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:dl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:x({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:x({operationId:"listPlacementSettingsAnchors",requestParams:{query:$},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:G(nO)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:x({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Wn(Ru)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:js}=Qe,{Persisted:Ax}=pt,{Internal:Ox}=st,jx=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Ox}),hh=Z.merge(ie).merge(ue).extend({action:jx.meta(js),resource_type:z.string().min(1).max(100).meta(js),resource_id:z.string().min(1).meta(js),resource_name:z.string().max(200).optional().meta(js),actor_id:z.string().min(1).meta(js),actor_email:z.string().email().optional().meta(js),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(js),summary:z.string().max(1e3).optional().meta(js),metadata:Vt.meta(js)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Ox});({"/api/changelog":{get:x({operationId:"listChangeLogEntries",requestParams:{query:$},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:G(hh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:x({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:hh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Eu}=Qe,{Persisted:uO,Transient:mO}=pt,{Internal:Fx}=st,Lx=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":mO,"x-revturbine-schema-exposure":Fx}),Ls=Z.merge(ie).extend({name:en.meta(Eu),handle:xt.meta(Eu),status:Lx.default("active").meta(Eu),metadata:Vt.meta(Eu)}).meta({id:"Tenant","x-revturbine-schema-persistence":uO,"x-revturbine-schema-exposure":Fx});({"/api/tenants":{get:x({operationId:"listTenants",requestParams:{query:$},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:G(Ls)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:x({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:x({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Ls.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:x({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:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:x({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:wi}=Qe,{Persisted:fO,Transient:Bx}=pt,{Internal:gh}=st,Ux=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Bx,"x-revturbine-schema-exposure":gh}),Va=Z.merge(ie).merge(ue).extend({name:en.meta(wi),handle:xt.meta(wi),description:ui.meta(wi),is_production:z.boolean().default(false).meta({...wi,readOnly:true}),status:Ux.default("active").meta(wi),cloned_from_environment_id:z.string().nullable().default(null).meta({...wi,readOnly:true}),cloned_at:tn.meta({...wi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...wi,readOnly:true}),requires_approval:z.boolean().default(false).meta(wi),auto_deploy_on_approval:z.boolean().default(false).meta(wi),created_by:z.string().optional().meta(wi),metadata:Vt.meta(wi)}).meta({id:"Environment","x-revturbine-schema-persistence":fO,"x-revturbine-schema-exposure":gh}),Vx=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":Bx,"x-revturbine-schema-exposure":gh});({"/api/environments":{get:x({operationId:"listEnvironments",requestParams:{query:$},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:G(Va)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:x({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:Va}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:x({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:x({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Va.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:x({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:Va}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:x({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Vx}}},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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ye,Pii:Hc}=Qe,{Transient:fs,Persisted:gO}=pt,{External:Di}=st,qx=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({superseded_output_id:z.string().min(1).meta(Ye),superseded_by:z.string().min(1).meta(Ye),reason:qx.meta(Ye)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":gO,"x-revturbine-schema-exposure":Di,...Qe.Operational});var Dx=z.enum(Ac).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),_h=z.object({output_id:z.string().meta(Ye),category:z.string().meta(Ye),surface:z.object({template:z.string().optional().meta(Ye),type:wc.meta(Ye),slot_id:z.string().optional().meta(Ye)}).meta(Ye),content:z.record(z.string(),z.unknown()).meta(Ye),promotion:z.record(z.string(),z.unknown()).optional().meta(Ye),cta_path:z.record(z.string(),z.unknown()).optional().meta(Ye),ui_path:z.record(z.string(),z.unknown()).optional().meta(Ye),rule_id:z.string().meta(Ye),decision_id:z.string().meta(Ye),config_version:z.string().meta(Ye),present_upsell:z.boolean().meta(Ye),experiment_id:z.string().optional().meta(Ye),variant_key:z.string().optional().meta(Ye),experiment_version_id:z.string().optional().meta(Ye)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Mx=z.object({status:Dx.meta(Ye),allowed:z.boolean().meta(Ye),reason:z.string().optional().meta(Ye),current_tier:z.string().optional().meta(Ye),limit:z.number().optional().meta(Ye),used:z.number().optional().meta(Ye),remaining:z.number().optional().meta(Ye),placement:_h.optional().meta(Ye)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({id:z.string().meta(Ye),name:z.string().optional().meta(Ye),discount:z.string().optional().meta(Ye),type:z.string().optional().meta(Ye),status:z.string().optional().meta(Ye)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});var Nx=z.object({id:z.string().meta(Hc),anonymous_id:z.string().optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Hc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),zx=z.object({slot_id:z.string().optional().meta(Ye),entitlement_handle:z.string().optional().meta(Ye),plan_handle:z.string().optional().meta(Ye),placement_handle:z.string().optional().meta(Ye),visible:z.boolean().meta(Ye),output:_h.optional().meta(Ye),reason_codes:z.array(z.string()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Hx=Mx,Kx=Bc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Gx=z.object({segments:z.array(z.string()).optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Hc),usage_balances:z.record(z.string(),z.number()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({version:z.literal("1.0.0").meta(Ye),request_id:z.string().meta(Ye),tenant_id:z.string().meta(Ye),evaluated_at:z.string().datetime().meta(Ye),ttl_seconds:z.number().int().min(0).max(86400).meta(Ye),user:Nx.meta(Hc),decisions:z.array(zx).meta(Ye),entitlements:z.record(z.string(),Hx).optional().meta(Ye),theme:z.record(z.string(),z.unknown()).optional().meta(Ye),trial_status:Kx.optional().meta(Ye),user_context:Gx.optional().meta(Hc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});var {Unrestricted:cn}=Qe,{Persisted:vO,Transient:wu}=pt,{Internal:Kc}=st,$x=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),ml=Z.merge(ie).merge(ue).extend({environment_id:z.string().min(1).meta(cn),name:en.meta(cn),description:z.string().max(2e3).optional().meta(cn),status:$x.default("draft").meta(cn),labels:z.array(z.string()).default([]).meta(cn),created_by:z.string().min(1).meta(cn),submitted_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),submitted_at:tn.meta({...cn,readOnly:true}),reviewed_at:tn.meta({...cn,readOnly:true}),deployed_at:tn.meta({...cn,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(cn),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(cn),review_notes:z.string().max(2e3).optional().meta(cn),rejection_reason:z.string().max(2e3).optional().meta(cn),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...cn,readOnly:true}),bundle:z.string().nullable().default(null).meta({...cn,readOnly:true}),metadata:Vt.meta(cn)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":vO,"x-revturbine-schema-exposure":Kc}),bh=z.object({handle:z.string().meta(cn),resource_type:z.string().meta(cn),resource_name:z.string().optional().meta(cn),action:z.enum(["create","update","delete"]).meta(cn),has_conflict:z.boolean().meta(cn)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Wx=z.object({playbook_version_id:z.string().meta(cn),entries:z.array(bh).meta(cn),total_entries:z.number().int().min(0).meta(cn),total_conflicts:z.number().int().min(0).meta(cn),deployable:z.boolean().meta(cn)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Zx=z.object({playbook_version_id:z.string().meta(cn),deployed_count:z.number().int().min(0).meta(cn),superseded_count:z.number().int().min(0).meta(cn),skipped_conflicts:z.number().int().min(0).meta(cn),deployed_at:z.string().datetime().meta(cn)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:x({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:x({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:x({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:x({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:Zx}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:x({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:ml}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:x({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:Wx}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:x({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:$},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:G(bh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:x({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:x({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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Mt,Pii:SO}=Qe,{Persisted:Mi}=pt,{Internal:Ni}=st,Yx=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Gc=Z.merge(ie).merge(ue).extend({name:en.meta(Mt),key_hash:z.string().min(1).meta({...SO,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Mt,readOnly:true}),key_last4:z.string().length(4).meta({...Mt,readOnly:true}),status:Yx.default("active").meta(Mt),last_used_at:tn.meta({...Mt,readOnly:true}),expires_at:tn.meta(Mt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Jx=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),la=Z.merge(ie).merge(ue).extend({key:z.string().min(1).max(100).meta(Mt),value_type:Jx.default("boolean").meta(Mt),value:z.string().max(4e3).default("false").meta(Mt),description:ui.meta(Mt),enabled:z.boolean().default(true).meta(Mt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Au=Z.merge(ie).merge(ue).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(30).meta(Mt),activity_high_min:z.number().int().min(1).default(10).meta(Mt),activity_medium_min:z.number().int().min(1).default(3).meta(Mt),activity_low_min:z.number().int().min(1).default(1).meta(Mt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Ou=Z.merge(ie).merge(ue).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":Mi,"x-revturbine-schema-exposure":Ni}),$c=Z.merge(ie).merge(ue).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:tn.meta({...Mt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Xx=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Qx=Z.merge(ue).extend({environment_id:z.string().min(1).default("production").meta(Mt),actor_type:Xx.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":Mi,"x-revturbine-schema-exposure":Ni}),eS=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Wc=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...Mt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Mt),identifier_type:eS.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":Mi,"x-revturbine-schema-exposure":Ni,...mr()});({"/api/settings/api-keys":{get:x({operationId:"listApiKeys",requestParams:{query:$},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:G(Gc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:x({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(Gc)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Gc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:x({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:Gc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:x({operationId:"listFeatureFlags",requestParams:{query:$},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:G(la)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:x({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(la)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:x({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:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:x({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(la).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:x({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:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:x({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(Au).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Au}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:x({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(Ou).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:x({operationId:"listOnboardingSteps",requestParams:{query:$},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:G($c)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:x({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:$c}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:x({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn($c).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:$c}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:x({operationId:"listAuditEvents",requestParams:{query:$},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:G(Qx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:x({operationId:"listPlacementTestUsers",requestParams:{query:$},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:G(Wc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:x({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(Wc)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:x({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:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:he,Pii:Mr}=Qe,{Persisted:ni,Transient:yh}=pt,{Internal:Sr}=st,tS=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({name:en.meta(he),email:z.string().email().meta(Mr),email_verified:z.boolean().default(false).meta(he),image:z.string().url().nullable().default(null).meta(Mr),role:tS.default("user").meta(he),banned:z.boolean().default(false).meta({...he,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...he,readOnly:true}),ban_expires:tn.meta({...he,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...he,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({expires_at:z.string().datetime().meta(he),token:z.string().min(1).meta({...Mr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Mr),user_agent:z.string().nullable().default(null).meta(Mr),user_id:z.string().min(1).meta({...he,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(he),impersonated_by:z.string().nullable().default(null).meta({...he,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({account_id:z.string().min(1).meta(he),provider_id:z.string().min(1).meta(he),user_id:z.string().min(1).meta({...he,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),access_token_expires_at:tn.meta({...he,readOnly:true}),refresh_token_expires_at:tn.meta({...he,readOnly:true}),scope:z.string().nullable().default(null).meta(he),password:z.string().nullable().default(null).meta({...Mr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({identifier:z.string().min(1).meta(Mr),value:z.string().min(1).meta({...Mr,readOnly:true}),expires_at:z.string().datetime().meta(he)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({secret:z.string().min(1).meta({...Mr,readOnly:true}),backup_codes:z.string().min(1).meta({...Mr,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),verified:z.boolean().default(false).meta({...he,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({name:en.meta(he),slug:z.string().min(1).max(100).nullable().default(null).meta(he),logo:z.string().url().nullable().default(null).meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),metadata:z.string().nullable().default(null).meta(he)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var vh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var xh=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr}),Sh=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr});z.object({resource:xh,action:Sh}).meta({id:"Permission","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr});var AO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],OO=["plans","entitlements","placements","targeting","content","experiments"],jO=["plans","entitlements","placements","targeting","content","experiments"],FO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],LO=["read","create","update","delete","publish","approve","invite","manage_roles"];function ju(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var BO=ju(AO,["read"]),UO=[...BO,...ju(OO,["create","update"])];[...UO,...ju(jO,["publish","approve","delete"])];ju(FO,LO);var VO=xh.options.flatMap(t=>Sh.options.map(e=>`${t}:${e}`));z.enum(VO).meta({id:"McpTokenScope","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({organization_id:z.string().min(1).meta({...he,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),role:vh.default("viewer").meta(he),created_at:z.string().datetime().meta({...he,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var nS=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({organization_id:z.string().min(1).meta({...he,readOnly:true}),email:z.string().email().meta(Mr),role:vh.nullable().default(null).meta(he),status:nS.default("pending").meta(he),expires_at:z.string().datetime().meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),inviter_id:z.string().min(1).meta({...he,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({name:z.string().max(200).nullable().default(null).meta(he),public_key:z.string().min(1).meta({...Mr,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),credential_id:z.string().min(1).meta({...he,readOnly:true}),counter:z.number().int().default(0).meta({...he,readOnly:true}),device_type:z.string().min(1).meta(he),backed_up:z.boolean().default(false).meta(he),transports:z.string().nullable().default(null).meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),aaguid:z.string().nullable().default(null).meta(he)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({config_id:z.string().min(1).meta(he),name:z.string().max(200).nullable().default(null).meta(he),start:z.string().nullable().default(null).meta(he),reference_id:z.string().min(1).meta(he),prefix:z.string().nullable().default(null).meta(he),key:z.string().min(1).meta({...Mr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(he),refill_amount:z.number().int().nullable().default(null).meta(he),last_refill_at:tn.meta({...he,readOnly:true}),enabled:z.boolean().default(true).meta(he),rate_limit_enabled:z.boolean().default(false).meta(he),rate_limit_time_window:z.number().int().nullable().default(null).meta(he),rate_limit_max:z.number().int().nullable().default(null).meta(he),request_count:z.number().int().default(0).meta({...he,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...he,readOnly:true}),last_request:tn.meta({...he,readOnly:true}),expires_at:tn.meta(he),permissions:z.string().nullable().default(null).meta(he),metadata:z.string().nullable().default(null).meta(he)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({issuer:z.string().min(1).meta(he),oidc_config:z.string().nullable().default(null).meta(he),saml_config:z.string().nullable().default(null).meta(he),user_id:z.string().min(1).meta({...he,readOnly:true}),provider_id:z.string().min(1).meta(he),organization_id:z.string().nullable().default(null).meta(he),domain:z.string().min(1).meta(he)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});async function sS(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 rS(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var pl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function GO(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new pl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!rS(n))throw new pl("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(!rS(r)||r>n)throw new pl("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 aS(t,e){let n=K_,r=G_,i=GO(t);if(i.minReadableSchemaVersion>n)throw new pl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${i.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(i.schemaVersion>n)throw new pl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);if(i.schemaVersion<r)throw new pl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);return i}var oS=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),iS=z.string().datetime({offset:true}),$O=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),Ph=z.object({url:z.string().min(1),sha256:oS,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),WO=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:$O}).strict(),ZO=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:ZO,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:Ph,standby:Ph.optional(),previous:Ph.optional(),not_before:iS,expires_at:iS,rollback_to:oS.optional(),signature:WO.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 YO=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),Da=class{constructor(){w(this,"types",new Map);w(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(s=>s.surface.type===e.surfaceType)};this.types.set(r.id,r);let i=this.surfaceIndex.get(r.surfaceType)??[];i.includes(r.id)||(i.push(r.id),this.surfaceIndex.set(r.surfaceType,i));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let i=r.filter(s=>s!==e);i.length>0?this.surfaceIndex.set(n.surfaceType,i):this.surfaceIndex.delete(n.surfaceType);}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 r=(this.surfaceIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,s)=>s.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())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function Ih(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=s=>{if(typeof s=="number"&&Number.isFinite(s))return s;if(typeof s=="string"&&s.trim().length>0){let a=Number(s);if(Number.isFinite(a))return a}},i=s=>{let a="_usage_remaining";if(s==="usage_remaining"){let p=r(e.usage_current??e.current_usage),v=r(e.usage_limit);return p!==void 0&&v!==void 0?Math.max(0,v-p):void 0}if(!s.endsWith(a))return;let o=s.slice(0,-a.length);if(!o)return;let l=r(e[`${o}_usage_current`]),b=r(e[`${o}_usage_limit`]);if(!(l===void 0||b===void 0))return Math.max(0,b-l)};return t.replace(/\{\{(\w+)\}\}/g,(s,a)=>{let o=n[a]??a,l=e[o];if(l!=null)return String(l);let b=i(o);return b!=null?String(b):`{{${a}}}`})}function fl(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=Ih(i,e):n[r]=i;return n}function Bu(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,i]of Object.entries(t))YO.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 Uu(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 qa=null,Fu=null,Lu=false;function lS(t){Fu=t,qa&&!Lu&&(Lu=true,t(qa));}function cS(t){Fu?.(t);}function Vu(){return qa||(qa=new Da,Fu&&(Lu=true,Fu(qa))),qa}function dS(){qa=null,Lu=false;}var Du=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();}},qu=null;function Ma(){return qu||(qu=new Du),qu}function JO(){qu=null;}function XO(t,e){Ma().register(t,e);}function QO(t){return Ma().unregister(t)}function Th(t,e=Ma()){let n=new Map;for(let[r,i]of Object.entries(t)){if(e.has(r))continue;let s=(a,o)=>{let l=o.placement.cta_path??o.placement.ui_path??{};Promise.resolve().then(()=>i(l)).catch(b=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,b);});};e.register(r,s),n.set(r,s);}return ()=>{for(let[r,i]of n)e.get(r)===i&&e.unregister(r);}}function Ch(t,e=Ma()){if(e.has("snooze"))return ()=>{};let n=(r,i)=>{let s=i.placement,a=typeof s.remind_later_minutes=="number"?s.remind_later_minutes:void 0;t(i.placement.output_id,a!==void 0?a*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}function Mu(t,e,n,r){let i=n.get(t.type);return i?(i(t,e),true):(r?.(t),false)}var Zc={recommended_plan_handle:"",recommended_plan_name:""};function uS(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:i}=t;if(i.length===0)return Zc;if(e==="custom"){let o=n??"";if(o===""||o===r)return Zc;let l=i.find(b=>b.unique_handle===o);return l?{recommended_plan_handle:l.unique_handle,recommended_plan_name:l.name}:Zc}if(r==="")return Zc;let s=zm(r,i);if(s===null)return Zc;let a=i.find(o=>o.unique_handle===s);return {recommended_plan_handle:s,recommended_plan_name:a?.name??s}}var Rh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",zu=Rh.length,e2=zu-1,t2=10,Nu=16;function n2(t){let e=t,n="";for(let r=0;r<t2;r+=1){let i=e%zu;n=Rh[i]+n,e=Math.floor(e/zu);}return n}function mS(){let t=new Uint8Array(Nu);crypto.getRandomValues(t);let e=new Array(Nu);for(let n=0;n<Nu;n+=1)e[n]=t[n]%zu;return e}function r2(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<e2)return t[e]+=1,true;t[e]=0;}return false}function pS(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Nu?r2(e)||(t+=1,e=mS()):(t=n,e=mS());let r=n2(t);for(let i=0;i<e.length;i+=1)r+=Rh[e[i]];return r}}}var kh=pS();var i2=new Set([408,429,500,502,503,504]);function s2(t){return new Promise(e=>setTimeout(e,t))}async function Eh(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??s2,s;for(let a=0;a<=n;a+=1){try{let o=await t();if(o.ok)return {delivered:!0,status:o.status,attempts:a+1};if(!i2.has(o.status))return {delivered:!1,status:o.status,attempts:a+1};s=new Error(`ingest_status_${o.status}`);}catch(o){s=o instanceof Error?o:new Error(String(o));}a<n&&await i(r*(a+1));}return {delivered:false,error:s,attempts:n+1}}function wh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function fS(){let t=typeof IntersectionObserver<"u",e=new Map;function n(i,s,a,o){a.fired||(a.fired=true,a.timer!==null&&(clearTimeout(a.timer),a.timer=null),i.io.unobserve(s),i.tracked.delete(s),a.onExposed(o));}function r(i,s){let a=`${i}|${s}`,o=e.get(a);if(o)return o;let l=new Map,p={io:new IntersectionObserver(v=>{let P=e.get(a);if(P)for(let S of v){let y=l.get(S.target);!y||y.fired||(S.isIntersecting?y.minVisibleMs<=0?n(P,S.target,y,"viewport"):y.timer===null&&(y.timer=setTimeout(()=>n(P,S.target,y,"viewport"),y.minVisibleMs)):y.timer!==null&&(clearTimeout(y.timer),y.timer=null));}},{threshold:i,rootMargin:s}),tracked:l};return e.set(a,p),p}return {supported:t,observe(i,s,a){if(!t){let v=false;return Promise.resolve().then(()=>{v||a("render_fallback");}),()=>{v=true;}}let o=s.threshold??.5,l=s.rootMargin??"0px",b=r(o,l),p={onExposed:a,minVisibleMs:s.minVisibleMs??0,timer:null,fired:false};return b.tracked.set(i,p),b.io.observe(i),()=>{p.fired||(p.timer!==null&&(clearTimeout(p.timer),p.timer=null),b.io.unobserve(i),b.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var Na=fS();var a2="data-rt-event",o2="data-rt-ref",l2="data-rt-no-capture",hS="data-rt-prop-";var c2=new Set(["password","file","hidden"]),d2=/(^|\s)(cc-|current-password|new-password|one-time-code)/;function u2(t){if(t.tagName.toLowerCase()!=="input")return false;let n=(t.getAttribute("type")??"text").toLowerCase();if(c2.has(n))return true;let r=(t.getAttribute("autocomplete")??"").toLowerCase();return d2.test(r)}function m2(t,e){let n=e instanceof Document?e.documentElement.parentElement:e.parentElement,r=t,i=null;for(;r&&r!==n;){if(r instanceof HTMLElement){if(r.hasAttribute(l2))return null;if(!i){let s=r.getAttribute(a2);if(s){if(u2(r))return null;i={el:r,event:s};}}}r=r.parentElement;}return i}function p2(t,e,n){let r={},i=0;for(let a of Array.from(t.attributes)){if(i>=e)break;if(!a.name.startsWith(hS))continue;let o=a.name.slice(hS.length);o&&(r[o]=String(a.value).slice(0,n),i+=1);}let s=t.getAttribute(o2);return s&&(r.ref=s.slice(0,n)),r}function Ah(t,e,n={}){let r=n.events??["click"],i=n.maxProps??24,s=n.maxValueLen??256,a=o=>{let l=o.target;if(!(l instanceof Element))return;let b=m2(l,t);b&&e(b.event,p2(b.el,i,s));};for(let o of r)t.addEventListener(o,a,true);return ()=>{for(let o of r)t.removeEventListener(o,a,true);}}var Fh=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],f2=new Set(Fh),h2=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,g2=ha();function Oh(t){g2&&console.warn(t);}var vS=new Set(su.options),xS=["usage","account_id","email","email_type","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],gS=new Set(xS);function I8(t,e){return Wu(e,"defineUiPathResolvers(resolvers)")}function Wu(t,e){if(!t)return {};let n={};for(let[r,i]of Object.entries(t)){let s=String(r||"").trim();if(!s)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 '${s}'.`);n[s]=i;}return n}var Hu={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function hl(t){return t?.playbook??t?.exportedConfig}function T8(t){return {...t,runtimeMode:"revturbine_server"}}function C8(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function _2(t){let e=Wu(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function R8(t){return _2(t)}function k8(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function E8(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function w8(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function ca(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function A8(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function O8(t,e,n){return {eventType:t,payload:e,options:n}}var _S="revturbine:sdk-route-change",$u="sdk_validation_warning",b2="revturbine:decision-cache",y2="revturbine:interaction-state",v2="revturbine:presentation-caps",x2="/api/track",S2="/api/sdk/meta",P2="/api/events/interactions",I2="/api/placements/interactions",T2="revturbine-web-sdk",Lh="user_context_observed",C2=20,R2=5e3;function SS(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=PS(t);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function PS(t){return we(t.payload)?t.payload:null}var k2=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function E2(t){let e={};for(let n of k2)e[n]=SS(t,n);return e}var w2=["placement_","gate_","slot_","engagement_"],A2=new Set(["impression","segment_enrolled","segment_unenrolled",Lh]);function O2(t){let e=Dl(t);return e===$u?"derived":A2.has(e)||w2.some(n=>e.startsWith(n))?"automatic":"explicit"}var j2=["decision_id"];function F2(t){let e={};for(let n of j2)e[n]=SS(t,n);return e}function L2(t){return qm(t,Mh(8))}async function bS(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Ud(new Uint8Array(e))}function Mh(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 s=n[i].toString(16).padStart(2,"0");r+=s;}return r.slice(0,t)}function Pr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Mh(16)}`}function Ku(){return So()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function yS(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function B2(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 fp(t,n)}function U2(t,e,n){if(t.length===0)return true;let r=new Map;for(let i of t){let s=n.get(i)??"__no_dim__",a=r.get(s)??[];a.push(i),r.set(s,a);}for(let i of r.values())if(!i.some(s=>e.has(s)))return false;return true}var Bh=class{constructor(e){w(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Zu=class Zu{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<Zu.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 sS(new TextEncoder().encode(r))!==i)return this.cached;let s=JSON.parse(r);aS(s);let a=vs(s,"GET /api/sdk/config",this.legacyTargetDefaults);return a&&(this.cached=a,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};w(Zu,"REFRESH_TTL_MS",6e4);var Uh=Zu,Vh=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=vs(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},qh=class{constructor(e,n){w(this,"source");w(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return vs(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return vs(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Yc=class Yc{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"ingestPublicKey");w(this,"environmentId");w(this,"testTraffic");w(this,"analyticsEnabled");w(this,"anonymousTelemetryEnabled");w(this,"previewMode");w(this,"telemetryConsent");w(this,"telemetryCounters",wh());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,"unbridgeUiPathCtaResolvers",()=>{});w(this,"unregisterBuiltinSnoozeResolver",()=>{});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,"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);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??C2),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??R2),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Hu.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,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=Wu(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=$s(e.persistentStorage),this.sessionStore=qp(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?yS():{},...e.user||{}},this.pageContext={...this.policy.inferPage?Ku():{},...e.page||{},tags:ql(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),this.sessionId=Pr(),this.providerRegistry=new oc,this.placementTypeRegistry=new Da,this.impressionHistory=new jp({store:new Xd({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),cS(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=Th(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=Ch((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),Fr()&&this.policy.routerAutoTrack&&this.installRouteTracking(),Fr()&&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();}isLocalOnlyMode(){return this.runtimeMode===Hu.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new qh(e.configProvider,n);let r=vs(hl(e.localRuntime),"localRuntime.playbook",n),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new Vh(i,n,r);if(r)return new Bh(r);let s=e.runtimeMode??Hu.Server,a=e.ingestPublicKey??e.apiKey;if(s!==Hu.LocalOnly&&e.endpoint&&a)return new Uh(e.endpoint,e.tenantId,a,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??[],s={enableClientCapsEnforcement:[...n.flatMap(a=>a.payloads??[]),...e?.placement_payloads??[]].some(a=>a.caps?.max_per_period!==void 0||a.caps?.cooldown_days!==void 0||a.remind_later_minutes!==void 0&&a.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(a=>a.category==="gated"),enableTrialAutoTriggers:n.some(a=>a.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:s},s}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 s=String(i.field||"").trim();if(!s)continue;let a=this.segmentIdsByPredicateField.get(s)??new Set;a.add(r.handle),this.segmentIdsByPredicateField.set(s,a);}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=ya({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.userContext.usage,r=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,a=this.userContext.tiers,o=a!==void 0&&Object.keys(a).length>0,l=this.userContext.experiments,b=l!==void 0&&Object.keys(l).length>0;if(!e&&!n&&!o&&!b)return;let p={};if(n&&typeof n=="object"){let P=Ss(n);for(let[S,y]of Object.entries(n)){if(!y||typeof y!="object")continue;let T=typeof y.amount=="number"?y.amount:P[S]??0,E=typeof y.limit=="number"?y.limit:0,A=E>0?Math.max(0,E-T):0;p[S]={used:T,limit:E,remaining:A,unit:typeof y.unit=="string"?y.unit:void 0,reset_date:typeof y.reset_date=="string"?y.reset_date:void 0};}}let v={...r.in_trial!==void 0?{trialActive:r.in_trial}:{},...r.trial_limit_type!==void 0?{trialLimitType:r.trial_limit_type}:{},...r.progress_percent!==void 0?{trialProgressPercent:r.progress_percent}:{},...r.days_remaining!==void 0?{trialDaysRemaining:r.days_remaining}:{},...r.day_number!==void 0&&r.days_remaining!==void 0?{trialDaysTotal:r.day_number+r.days_remaining}:{},...r.state!==void 0?{trialState:r.state}:{},...r.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:r.usage_entitlement_handle}:{},...r.usage_consumed!==void 0?{trialUsageConsumed:r.usage_consumed}:{},...r.usage_limit!==void 0?{trialUsageLimit:r.usage_limit}:{}};return {...e?{plan:{currentPlanHandle:e.id??e.name??"",currentPlanName:e.name,...v,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(p).length>0||o?{entitlements:{entries:{},usage:p,...o?{tiers:a}:{}}}:{},...b?{experiments:{assignments:l}}:{}}}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 Dd(e,n,r)}buildTargetingState(e){return Md(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 s=this.buildTargetingState(e),a=this.buildTargetingState(n),o=new Set,l=new Set([...Object.keys(s.segmentTraits),...Object.keys(a.segmentTraits)]);for(let b of l)s.segmentTraits[b]!==a.segmentTraits[b]&&o.add(b);this.markSegmentsDirtyForFields(o);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return Fr()?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`,s=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:Pr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:ca(i,s,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${Pr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:e.surfaceType??"banner",slot_id:e.slotId},content:{title:r,header:r,body:"This placement is in safe fallback mode because all configured providers failed.",cta_label:"Retry later"},rule_id:"sdk_disabled_provider_failure",decision_id:n,config_version:"sdk-fallback",present_upsell:false}}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 rp(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(i,s)=>!i||!s?true:i===s;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return Nm(e,n.planHandle)}applyCategoryConflictSuppression(e){return Vd(e)}resolveLocalPlacementFromCandidates(e,n){return sp(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,s]of this.localPlacementsByLookupKey.entries()){if(!s)continue;let a=Mm(i);this.localLookupMatchesConfig(a,e)&&this.localOutputMatchesConfig(s,e)&&r.push(s);}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,s]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,s);for(let[i,s]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,s);for(let[i,s]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,s);for(let[i,s]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,s);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 `${b2}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${y2}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${v2}:${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,s])=>{!s||typeof s!="object"||!Number.isFinite(s.expiresAt)||s.expiresAt<=r||this.decisionCache.set(i,s);});}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 s=Array.isArray(i.seenAt)?i.seenAt.filter(o=>Number.isFinite(o)&&o>0):[],a=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:s,cooldownUntil:a});}}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;if(we(e)&&typeof e.id=="string"&&e.id)return e.id;let n=this.userContext.custom;return typeof n?.plan=="string"&&n.plan?n.plan:typeof n?.plan_handle=="string"&&n.plan_handle?n.plan_handle:""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),i=new Set;if(!r)return i;i.add(r);for(let s of e.plans??[]){let a=typeof s.unique_handle=="string"?s.unique_handle.toLowerCase():"";a===r&&i.add(a);}return i}ruleTargetsActivePlan(e,n){let i=(Array.isArray(e.targets)?e.targets:[]).filter(s=>we(s)&&s.kind==="plan");return i.length===0?true:i.some(s=>typeof s.id=="string"&&n.has(s.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 a of i){let o=typeof a.unique_handle=="string"?a.unique_handle:"";o&&r.set(o,o);}let s=e.entitlement_rules??[];for(let a of s){if(!we(a))continue;let o=typeof a.entitlement_id=="string"?a.entitlement_id:"";if(!o)continue;let l=typeof a.kind=="string"?a.kind:"";if(!(l==="usage_limit"||l==="credits"||l==="seat"))continue;let p=r.get(o)??"",v=typeof a.unit=="string"?a.unit:"",P=Hm(v),S=P&&!Km(P)?P:Qa(p||o);S&&(this.usageTokenPrefixByEntitlement.set(o,S),p&&this.usageTokenPrefixByEntitlement.set(p,S));let y=Number(a.limit_value??a.allowance_value);if(!Number.isFinite(y)||y<=0||!this.ruleTargetsActivePlan(a,n))continue;let T=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(o,{limit:y,warningPercent:T}),p&&this.usageLimitByEntitlement.set(p,{limit:y,warningPercent:T});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=dp({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(),s=String(i||"").toLowerCase(),a=e.plans.map(o=>({source_id:o.unique_handle,unique_handle:o.unique_handle,name:o.name,tier_position:o.tier_position??0,sort_order:o.sort_order??0}));return uS({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:s,plans:a})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[i,s]of Object.entries(r))i!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(n[i]=s);if(n.plan_name===void 0){let i=ga(this.getConfiguredExportedConfig(),this.userContext.plan);i?n.plan_name=i:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let i=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=i.recommended_plan_handle,n.recommended_plan_name=i.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...Ss(this.userContext.usage),...this.usageBalances},n={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let s=this.usageTokenPrefixByEntitlement.get(r)??Qa(r)??r,a=this.usageThresholdForEntitlement(r);n[s]={current:i,...a?.limit!==void 0?{limit:a.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return Lp({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(),s=String(i||"").toLowerCase(),a=this.getTargeting(),o=new Set(a.segmentIds??[]),{trialGrantedEntitlementHandles:l,effectivePlanHandle:b}=this.resolveReverseTrialGrants(r);return Hl({handle:e,context:n,currentPlanHandle:s,segmentIds:o,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...l!==void 0?{trialGrantedEntitlementHandles:l}:{},...b!==void 0?{effectivePlanHandle:b}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let s=(e.reverse_trial_rules??[]).find(a=>a.fallback_plan_id===r&&a.is_active!==false);return !s||s.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(s.entitlements_during_trial),effectivePlanHandle:s.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=ga(r,this.userContext.plan),s=i??n?.plan??(this.resolveContextPlanRaw()||void 0),a=[...r?.segments??[]],o=Array.from(new Set(a.flatMap(P=>(P.predicates??[]).map(S=>S.field)))).sort((P,S)=>P.localeCompare(S)),l={...n?.traits??{},...this.userContext.custom??{}};for(let[P,S]of Object.entries(this.userContext.entitlements??{}))l[P]===void 0&&(l[P]=S);i&&l.plan_name===void 0&&(l.plan_name=i),s&&l.plan===void 0&&(l.plan=s);let b={...n?.usage??{},...Ss(this.userContext.usage),...this.usageBalances};for(let[P,S]of Object.entries(b))l[P]===void 0&&(l[P]=S);let p={};for(let[P,S]of Object.entries(l))(typeof S=="string"||typeof S=="number"||typeof S=="boolean")&&(p[P]=S);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),a.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),a.length>0&&this.dirtySegmentIds.size>0){for(let P of this.dirtySegmentIds){let S=this.configuredSegmentsById.get(P)??a.find(T=>T.handle===P);if(!S){this.segmentMembershipBySegmentId.delete(P);continue}let y=Zl([S],p).length>0;this.segmentMembershipBySegmentId.set(P,y);}this.dirtySegmentIds.clear();}let v=a.length>0?a.filter(P=>this.segmentMembershipBySegmentId.get(P.handle)===true).map(P=>P.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:v,traits:l,...s?{plan:s}:{},...Object.keys(b).length>0?{usage:b}:{},configuredSegments:a,configuredTraitFields:o}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),s=this.getPolicy(),a=this.getConfiguredExportedConfig(),o=new Set(r.segmentIds),l=r.configuredSegments.map(L=>{let J=Array.isArray(L.predicates)?L.predicates.map(Ae=>B2(Ae,r.traits)):[],ge=J.length>0?J.every(Ae=>Ae.matched):o.has(L.handle);return {segmentId:L.handle,...L.name?{segmentName:L.name}:{},matched:ge,predicates:J}}),b=new Map,p=new Map;if(Array.isArray(a?.entitlements))for(let L of a.entitlements){let J=Yn(L.unique_handle),ge=J;ge&&J&&b.set(ge,J);let Ae=Yn(L.type);ge&&Ae&&p.set(ge,Ae);}let v=new Map;if(Array.isArray(a?.plans))for(let L of a.plans){let J=Yn(L.unique_handle),ge=J;ge&&J&&v.set(ge,J);}let S=(Yn(r.plan,r.traits.plan,r.traits.plan_handle,r.traits.plan_id)??"").toLowerCase(),y=new Map;if(Array.isArray(a?.segments))for(let L of a.segments){let J=Yn(L.handle),ge=Yn(L.dimension_id);J&&ge&&y.set(J,ge);}let T=Array.isArray(a?.entitlement_rules)?a.entitlement_rules.map((L,J)=>{let ge=Yn(L.id)??`entitlement_rule_${J}`,Ae=Yn(L.entitlement_id),Oe=Ae?b.get(Ae):void 0,lt=Array.isArray(L.targets)?L.targets.filter(je=>je.kind==="plan").map(je=>je.id):[],Je=lt.map(je=>v.get(je)??je),Xe=Array.isArray(L.segment_ids)?L.segment_ids.filter(je=>typeof je=="string"):[],zt=Yn(L.kind),At=!S||lt.some(je=>je.toLowerCase()===S),dn=U2(Xe,o,y),Jt=At&&dn,Ot=Oe?i[Oe]:Ae?i[Ae]:void 0,Y=Jt?Ot?.status??"unknown":"unknown",X;if(Jt)switch(zt){case "feature":X=L.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let je=Yn(L.tier_name);X=je?`unlocks ${je} tier`:"unlocks capability tier";break}case "usage_limit":{let je=typeof L.limit_value=="number"?L.limit_value:void 0,Zn=Yn(L.unit)??"",Gr=Yn(L.period_scope)??"",jt=Gr?` / ${Gr.replace("per_","")}`:"";X=je!=null?`sets limit to ${je.toLocaleString()}${Zn?` ${Zn}`:""}${jt}`:"sets usage limit";break}case "credits":{let je=L.allowance_value,Zn=typeof je=="number"?je:void 0,Gr=Yn(L.unit)??"credits",jt=Yn(L.reset_period)??"",Ir=jt?` / ${jt.replace("per_","")}`:"";X=Zn!=null?`grants ${Zn.toLocaleString()} ${Gr}${Ir}`:"grants credit allowance";break}case "seat":{let je=L.included_count,Zn=typeof je=="number"?je:void 0;X=Zn!=null?`includes ${Zn} seat${Zn===1?"":"s"}`:"includes seats";break}default:if(Ae){let je=p.get(Ae);je==="feature"?X="grants access":je&&(X=`${je.replace(/_/g," ")} entitlement`);}break}return {ruleId:ge,...Ae?{entitlementId:Ae}:{},...Oe?{entitlementHandle:Oe}:{},...zt?{kind:zt}:{},planScopes:Je,planIds:lt,...Xe.length>0?{segmentIds:Xe}:{},matchesPlan:At,matchesSegment:dn,matched:Jt,outcome:Y,...X?{outcomeDescription:X}:{},...Ot?.reason?{reason:Ot.reason}:{}}}):[],E=Yn(n.output?.output_id),A=this.placements.get(e.placementId),k=Yn(A?.name)??"",O=Array.isArray(A?.metadata?.surface_template_ids)?A.metadata.surface_template_ids:[],R=[],C=new Set;if(Array.isArray(a?.placements))for(let L of a.placements){if(!L||typeof L!="object")continue;let J=Yn(L.id)??"",ge=Yn(L.name)??"";if(C.has(J))continue;let Ae=Yn(n.output?.rule_id);if(Ae&&J===Ae){C.add(J),R.push(L);continue}if(k&&(J===k||ge===k||J===`pl_${k}`||ge===`pl_${k}`)){C.add(J),R.push(L);continue}O.length>0&&(L.payloads??[]).some(Je=>(Je.surfaces??[]).some(zt=>{let At=Yn(zt.template_id);return At?O.includes(At):false}))&&(C.add(J),R.push(L));}let D=R.flatMap(L=>(L.payloads??[]).map(ge=>{let Ae=ge.target,Oe=Ae?.plan_ids??[],lt=Oe.map(Y=>v.get(Y)??Y),Je=Ae?.segment_chips??[],zt=(ge.surfaces??[]).map(Y=>Yn(Y.template_id)).filter(Y=>typeof Y=="string"),At=Oe.length===0||!S||Oe.some(Y=>Y.toLowerCase()===S),dn=Je.length===0||Je.some(Y=>o.has(Y)),Jt="active",Ot=Jt==="active"&&At&&dn;return {payloadId:String(ge.id??""),placementId:String(L.id??""),placementName:String(L.name??""),status:Jt,planIds:Oe,planScopes:lt,segmentChips:Je,surfaceTemplateIds:zt,matchesPlan:At,matchesSegment:dn,eligible:Ot,selected:!!E&&E===String(ge.id??"")}})),ae=n.output?this.extractPlacementCapPolicies(n.output).flatMap(L=>L.rules.length===0&&L.cooldownMs===void 0?[]:L.rules.length===0?[{count:0,period:"session",cooldownMs:L.cooldownMs}]:L.rules.map(J=>({count:J.count,period:J.period,...L.cooldownMs!==void 0?{cooldownMs:L.cooldownMs}:{}}))):[],Me={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:ae};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:s,entitlements:i,segments:l,entitlementRules:T,eligiblePayloads:D,placementRules:Me}}usageThresholdForEntitlement(e){return Qm(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return up(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 mp(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=Pr();return this.persistentStore.setItem(e,r),r}catch{return Pr()}}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(So())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(_S,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...s)=>{r(...s),n();});let i=e.replaceState.bind(e);e.replaceState=((...s)=>{i(...s),n();}),window.addEventListener("popstate",n),window.addEventListener(_S,s=>{let a=s.detail;this.onRouteChange({path:a.path,title:a.title,tags:a.tags});}),e.__rtPatched=true;}mergeUserContext(e){return lp(this.userContext,e)}mergePageContext(e){return {...this.pageContext,...e,tags:ql(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?Ku():{},...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(!we(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=PS(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($u,{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:we(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?Ku():{},...this.pageContext},i=r.url||(Fr()?window.location.href:""),s=(()=>{try{return new URL(i).pathname}catch{return Fr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:s,page_title:r.title||(Fr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:ql(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===Lh?{}:{...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&&Fr()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&Fr()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=Yc.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>=Yc.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,s)=>i+(s.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,s=i?`${this.tenantId}:${i}`:this.tenantId,a=(await bS(s)).slice(0,64),l={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Pr(),config_hash_id:a,sdk_version:Oy,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",S2),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(l),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(v=>{let P=Sb(v);return n+=P.redactions,P.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 s=Pr(),a=this.getConfiguredExportedConfig()?.playbook_version_id,o=r.map(v=>{let P=v.user_id||v.anonymous_id,S=Up(this.userContext.account_id||P),y=Bp({level:v.level,message:v.message,path:v.path,url:v.url,page_title:v.page_title,session_id:v.session_id,anonymous_id:v.anonymous_id,tags:v.tags,traits:v.identity.traits??null,payload:v.properties,source:T2});return n+=y.redactions+(S.redacted?1:0),{environment_id:this.environmentId,user_id:P,account_id:S.value,event_name:Dl(v.type).slice(0,120),event_ts:v.event_time,properties:JSON.stringify(y.value),...E2(v.properties),...F2(v.properties),origin:O2(v.type),playbook_version:typeof a=="string"&&a.length>0?a:null,event_id:kh.next(),request_id:Pr(),tenant_id:v.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let l=this.endpointFor("ingestEvents",x2),b={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":s},body:JSON.stringify({events:o}),keepalive:true};(await Eh(()=>fetch(l,b))).delivered?this.telemetryCounters.sent+=o.length:this.telemetryCounters.failed+=o.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=Dl(e),s=this.toEventEnvelope(i,n),a=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],o=[s];if(a.length>0&&o.push(this.buildValidationWarningEvent(i,a,n)),this.telemetryCounters.created+=o.length,r?.immediate){await this.sendEvents(o);return}this.events.push(...o),this.telemetryCounters.queued+=o.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:i,properties:s}=Vp(e,n);await this.capture(i,s,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!Fr()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let i=we(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||{}}},s=await this.fetchUserContext(i.id||""),a=new Set(r.segmentIds||[]),o=new Set(s.segmentIds||[]),l=Array.from(o).filter(p=>!a.has(p)),b=Array.from(a).filter(p=>!o.has(p));for(let p of l)await this.emitSemantic("segment_enrolled",{segment_id:p,user_id:i.id??null});for(let p of b)await this.emitSemantic("segment_unenrolled",{segment_id:p,user_id:i.id??null});if(n){let p=r.usage||{},v={...p,...this.usageBalances},P=this.evaluateUsageThresholdCrossings(p,v);await Promise.all(P);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(Lh,{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);}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(Ku());}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 s of e.decisions??[]){if(!s.output)continue;let a=[this.tenantId,s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),o=we(s.output?.content)?s.output.content:{};this.decisionCache.set(a,{value:{placementId:s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",requestId:e.request_id,visible:s.visible,decisionSource:"cache",reasonCodes:s.reason_codes??[],content:ca(String(o.header??""),String(o.body??""),String(o.cta_label??"")),output:s.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[s,a]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(s,{status:a.status,allowed:a.allowed,reason:a.reason,current_tier:a.current_tier,placement:a.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 np({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:bS,randomHex:Mh})}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:we(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=Pr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),i=L2(e.placementScopeKey||e.id||e.name),s={...we(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},a={name:e.name,slug:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:s},o={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},l=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:o,body:JSON.stringify(a)});if(l.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(l.status!==404)throw new Error(`surface_slot_upsert_failed:${l.status}`);let b=await fetch(r,{method:"POST",headers:o,body:JSON.stringify(a)});if(!b.ok)throw new Error(`surface_slot_create_failed:${b.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=Xa(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),s=[];r||s.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||s.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!we(e.metadata)&&s.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let a=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),o={id:a,route:n,name:i||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...we(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},l=this.placements.get(a),b=l?this.stableStringify(l):null,p=this.stableStringify(o);return (!l||b!==p)&&(this.placements.set(a,o),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(a)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(a)&&await this.upsertSurfaceSlot(o),s.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",s,{surface_slot_id:r||null,placement_id:a,route:n,placement_name:i||null})]),a}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;let n=(Array.isArray(e)?e:[]).map(s=>q2(s)).filter(s=>s!==null);if(n.length===0)return;let r=Pr(),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 xs(e)}decisionCacheKey(e,n){return ip({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 mb({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 pb(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return qd(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,i=this.placementCapKey(e),s=this.presentationCapsByKey.get(i),a=op(e,i,s,Date.now());return a.updatedState&&r&&(this.presentationCapsByKey.set(i,a.updatedState),a.allowed&&this.persistPresentationCaps()),{allowed:a.allowed,reason:a.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 ap(e,n,r,i)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=Pr();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:ca("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),s=this.suppressionForState(this.interactionState.get(i));if(s.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:ca(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let a,o=await this.localRuntime?.getContext?.(),l=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(o||l)&&(a=this.stableStringify({legacyCtx:o??{},providerCtx:l??{}}));let b=this.decisionCacheKey(e,a),p=this.readDecisionCache(b);if(p)return this.gateDecisionByCaps(p,{tick:false});{let P=this.getOrBuildPlacementResolver();if(P){let y={...o,...l?{__providers:l}:{}},T=this.gateDecisionByCaps(await P(e,n,y));return this.localDecisionsByPlacementId.set(e.placementId,T),this.writeDecisionCache(b,T,e.ttlMs),this.persistLocalRuntimeState(),T}let S=this.localDecisionsByPlacementId.get(e.placementId);if(S){let y=this.gateDecisionByCaps({...S,decisionSource:"fallback"});return this.writeDecisionCache(b,y,e.ttlMs),this.persistLocalRuntimeState(),y}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let v={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:ca(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),v}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),s=this.decisionCacheKey(r);this.writeDecisionCache(s,i,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let s=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),a=n.get(s);if(a){a.placementIds.push(r.placementId);continue}n.set(s,{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(s=>r.placementIds.includes(s.placementId)&&s.userId===r.userId);await Promise.allSettled(i.map(s=>this.getPlacementDecision(s)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=e.metadata??{},a={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let o=Number(i.remind_after_seconds);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(a.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let o=Number(i.suppress_duration_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.defaultDismissCooldownMs);}this.interactionState.set(n,a),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",P2),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Pr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",I2),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Pr()},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,s=n.metadata??{},a=Number(s.cooldown_ms),o=Number.isFinite(a)&&a>0?a:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,o);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,o);else if(n.interactionType==="suppress"){let p=Number(s.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,s,Number.isFinite(p)&&p>0?p:void 0);}let l=n.metadata??{},b=typeof l.decision_id=="string"?l.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,...b?{decision_id:b}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:l},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),i=Pr();if(this.isDisabledByProviderFailure()){let o=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:o.content}}if(this.isLocalOnlyMode()){let o=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:o?"remote":"fallback",content:ca(typeof o?.content?.title=="string"?String(o.content.title):`${r?.name??e} treatment`,typeof o?.content?.body=="string"?String(o.content.body):"Local runtime placement content.",typeof o?.content?.cta=="string"?String(o.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:i,decisionSource:"fallback",content:ca("Placement not found","Register the placement before requesting content.","Register placement")};let s=this.userContext.id??this.anonymousId,a=await this.getPlacementDecision({placementId:e,userId:s});return {placementId:e,requestId:i,decisionSource:a.decisionSource==="fallback"?"fallback":"remote",content:a.content??ca(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}normalizePlacementOutput(e){let n=Ld(e,Pr);return n&&we(e)&&typeof e.decision_id!="string"&&this.capture($u,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return Ym(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!vS.has(r))return this.capture($u,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;Pr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let o=await this.localRuntime.resolvers.getPlacement(e);return o&&this.applyPlacementCapsIfNeeded(o).allowed?o:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let s=this.localPlacementForConfig(e);return s&&this.applyPlacementCapsIfNeeded(s).allowed?s: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 s=this.localRuntime?.resolvers?.checkEntitlement;if(s){let a=await s(e,n);return this.localEntitlementsByHandle.set(e,a),this.persistLocalRuntimeState(),a}}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()?"local_runtime_default_allow":"config_unavailable"})}updateUsage(e){let n=this.userContext;this.usageBalances={...this.usageBalances,...e},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true);}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=Pr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let s=await r(e);return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}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(),s={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(a=>typeof a=="string"):[],traits:we(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:we(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,a])=>typeof a=="number")):void 0};return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new lc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e);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){r.status===401&&(this.clientContextToken=void 0);return}let i=await r.json(),s=this.mapClientSafeContext(i);if(Object.keys(s).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:s.trial?{in_trial:s.trial.in_trial,state:s.trial.state,days_remaining:s.trial.days_remaining}:void 0,payment_at_risk:s.payment_at_risk});let a=JSON.parse(JSON.stringify({trial:s.trial??null,plan:s.plan??null})),o=await cp(a)+`:${s.payment_at_risk===!0?1:0}`;if(o===this.lastServerContextHash)return;this.lastServerContextHash=o,this.applyServerContextPatch(s);}catch{}}mapClientSafeContext(e){let n={},i=["active","running_out","expired","converted","none"].find(a=>a===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 s=e.plan?.handle;return typeof s=="string"&&s.length>0&&(n.plan={id:s,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:s}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),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,s){await this.impressionHistory.recordDismissal(e,n,r,i,s);}async recordClickThru(e,n,r,i,s){await this.impressionHistory.recordClickThru(e,n,r,i,s);}async recordConversion(e,n,r,i){await this.impressionHistory.recordConversion(e,n,r,i);}async getTrialStatus(){let e=Pr();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:s}=Ed({...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}:{}}),a=s??{in_trial:false};return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:we(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],i=e.includeProviderHandlers??true,s=Wu(e.resolvers,"validateUiPathResolvers(options.resolvers)"),a={...this.uiPathResolvers,...s};if(i&&this.providerRegistry.has("cta"))try{let p=await this.providerRegistry.resolveAll();we(p.cta)&&we(p.cta.handlers)&&Object.assign(a,p.cta.handlers);}catch{}let o=[],l=0;for(let p of r){let v=we(p)?p:{},P=typeof v.action_type=="string"?v.action_type.trim():"";if(!P){o.push({actionType:"unknown",reason:"missing_action_type",...typeof v.id=="string"?{uiPathId:v.id}:{},...typeof v.name=="string"?{name:v.name}:{}});continue}if(typeof a[P]=="function"){l+=1;continue}o.push({actionType:P,reason:"missing_resolver",...typeof v.id=="string"?{uiPathId:v.id}:{},...typeof v.name=="string"?{name:v.name}:{}});}let b={valid:o.length===0,totalUiPaths:r.length,resolvedUiPaths:l,issues:o};if(!b.valid&&e.throwOnMissing){let p=b.issues.filter(P=>P.reason==="missing_resolver").map(P=>P.actionType),v=p.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(p)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${b.issues.length} issue(s).${v}`)}return b}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=we(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],i=0;for(let o of n){let b=(we(o)?o:{}).action_type,p=typeof b=="string"?b.trim():"";if(!p){i+=1;continue}typeof this.uiPathResolvers[p]!="function"&&r.push(p);}if(i===0&&r.length===0)return;let s=Array.from(new Set(r)),a=[];s.length>0&&a.push(`missing resolvers for action_type: ${s.join(", ")}`),i>0&&a.push(`content_ui_paths with missing action_type: ${i}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${a.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}h2.test(e)&&Oh(`[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=n!=null&&typeof n=="object"&&!Array.isArray(n)&&("account_id"in n||"email"in n||"plan"in n||"plan_handle"in n||"usage"in n||"entitlements"in n||"custom"in n);if(n!=null&&typeof n=="object"&&!Array.isArray(n)){let s=Object.keys(n).filter(a=>!f2.has(a));s.length>0&&Oh(i?`[RevTurbine] identify() ignoring unrecognized user-context key(s): ${s.join(", ")}. Recognized keys: ${Fh.join(", ")}.`:`[RevTurbine] identify() found no recognized user-context key \u2014 treating the object as legacy traits (stored under custom). Keys seen: ${s.join(", ")}; recognized keys: ${Fh.join(", ")}. For plan-scoped rules use { plan: { id, name } } or { plan_handle }.`);}if(i){let s=n;s.usage&&(this.usageBalances={...this.usageBalances,...Ss(s.usage)});let a=!s.plan&&typeof s.plan_handle=="string"&&s.plan_handle.trim()!==""?{id:s.plan_handle,name:s.plan_handle}:void 0;this.userContext=this.mergeUserContext({id:e,account_id:s.account_id,email:s.email,plan:s.plan??a,usage:s.usage,entitlements:s.entitlements,custom:a?{plan_handle:a.id,...s.custom??{}}:s.custom,personalization:s.personalization});}else this.userContext=this.mergeUserContext({id:e,custom:n,usage:{}});this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.emitObservedContextFields(i?n.custom:n);}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?yS():{},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();}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])=>gS.has(a)),s=Object.keys(r).filter(a=>!gS.has(a));s.length>0&&Oh(`[RevTurbine] update() ignored unrecognized key(s): ${s.join(", ")}. Patchable fields: ${xS.join(", ")}. 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:`${Fr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};w(Yc,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var Dh=Yc;function Jc(t){let e=V2(t),n=new Dh(e);if(!e.provider)return n;let r=(p,v)=>{try{return typeof p=="function"?p(e):p}catch(P){return console.warn(`[RevTurbine] Provider factory failed at chain index ${v}.`,P),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((p,v)=>r(p,v+1))].filter(p=>p!==null);if(i.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let s=async(p,v,P)=>{let S=[];for(let y=0;y<i.length;y+=1){let E=i[y][p];if(E){S.push(y);try{return await E(...v)}catch(A){let k=i.slice(y+1).some(O=>typeof O[p]=="function");console.warn(y===0&&k?`[RevTurbine] Primary provider ${p} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${p} failed at chain index ${y}.`,A);}}}return S.length===0||n.disableForProviderFailure(`provider_${p}_chain_failed`),P()},a=n.getPlacement.bind(n),o=n.checkEntitlement.bind(n),l=n.persistPlacementTypes.bind(n),b=n.identify.bind(n);return n.getPlacement=async p=>s("getPlacement",[p],()=>a(p)),n.checkEntitlement=async(p,v)=>s("checkEntitlement",[p,v],()=>o(p,v)),n.persistPlacementTypes=async p=>s("persistPlacementTypes",[p],()=>l(p)),n.identify=(p,v)=>{let P=0;for(let S=0;S<i.length;S+=1){let y=i[S];if(y.identify){P+=1;try{y.identify(p,v);return}catch(T){let E=i.slice(S+1).some(A=>typeof A.identify=="function");console.warn(S===0&&E?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${S}.`,T);}}}if(P>0){n.disableForProviderFailure("provider_identify_chain_failed"),b(p,v);return}b(p,v);},n}var Gu={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function jh(t){return typeof t=="string"&&t.trim().length>0}function V2(t){return hl(t.localRuntime)!==void 0?{...t,tenantId:jh(t.tenantId)?t.tenantId:Gu.tenantId,apiKey:jh(t.apiKey)?t.apiKey:Gu.apiKey,endpoint:jh(t.endpoint)?t.endpoint:Gu.endpoint,mode:t.mode??Gu.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function q2(t){if(!we(t))return null;let e=(l,b)=>String(l??"").trim().slice(0,b),n=e(t.id,256),r=e(t.label,256),i=e(t.description,1024),s=e(t.surfaceType,64);if(!n||!r||!i||!vS.has(s))return null;let a=Number(t.priority),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0;return {id:n,label:r,description:i,surfaceType:s,priority:o}}typeof window<"u"&&(window.RevTurbine={init:Jc});var Nr=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 Bs(t){return t?{id:t.id??Nr.id,name:t.name??Nr.name,version:t.version??Nr.version,colors:{...Nr.colors,...t.colors},typography:{...Nr.typography,...t.typography},shape:{...Nr.shape,...t.shape},shadows:{...Nr.shadows,...t.shadows}}:{...Nr}}var D2="revturbine:theme";function Nh(t){return `${D2}:${t}`}function M2(t,e){try{let n=e.getItem(Nh(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function N2(t,e,n){try{n.setItem(Nh(t),JSON.stringify(e));}catch{}}function IS(t,e){let n=e??$s();try{n.removeItem(Nh(t));}catch{}}async function gl(t,e){let{tenantId:n,endpoint:r,apiKey:i,base:s}=t,a=t.storage??$s(),o=M2(n,a),l=Bs({...s,...o});return t.onOverride?.(o),z2(r,n,i).then(b=>{b&&(o?.version&&b.version===o.version||(N2(n,b,a),t.onOverride?.(b),e?.(Bs({...s,...b}))));}).catch(()=>{}),l}async function z2(t,e,n){let r=t.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,s=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":i}});if(!s.ok)return null;let a=await s.json();return typeof a!="object"||a===null?null:a}var _l=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;r&&(this._impressionTracked=true,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,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 s=this.exposureMode;return s==="legacy_resolution"?this.fireImpression("legacy_resolution"):s==="viewport"&&!Na.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;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,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 Xc(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var bl=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:Xc(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return Xc(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 s=await this.sdk.checkEntitlement(e,n);if(this._result=s,this.emitGateEvaluated(e,s),!r||!Xc(s))this._gatedPlacement=null;else if(s.placement)this._gatedPlacement=s.placement;else {let a=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=a;}return s}catch(s){return this._error=s instanceof Error?s.message:String(s),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:Xc(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);}}notify(){for(let e of this.listeners)e();}},Yu=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 _l(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 bl(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 H2(t){let{bootstrapPlacements:e,...n}=t,r=n,i=Jc(r),s=r.user;s&&typeof s=="object"&&s.id&&i.identify(s.id,s);let a=Nr,l=hl(r.localRuntime)?.theme;if(l&&typeof l=="object"?a=Bs(l):a=await gl({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let b=i.getUserContext().user_id,p=[];for(let v of e){let P=await i.registerPlacement(v.placement),S=v.userId||b;S&&p.push({placementId:P,userId:S,contextMode:v.contextMode,overrides:v.overrides,traits:v.traits,ttlMs:v.ttlMs});}p.length>0&&await i.bootstrapPlacementDecisions(p);}return new Yu(i,a)}var K2=/\{[^{}]+\}/g,G2=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function $2(){return Math.random().toString(36).slice(2,11)}function kS(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:s,pathSerializer:a,headers:o,requestInitExt:l=void 0,...b}={...t};l=G2()?l:void 0,e=RS(e);let p=[];async function v(P,S){let{baseUrl:y,fetch:T=r,Request:E=n,headers:A,params:k={},parseAs:O="json",querySerializer:R,bodySerializer:C=s??Z2,pathSerializer:D,body:ae,middleware:Me=[],...L}=S||{},J=e;y&&(J=RS(y)??e);let ge=typeof i=="function"?i:TS(i);R&&(ge=typeof R=="function"?R:TS({...typeof i=="object"?i:{},...R}));let Ae=D||a||W2,Oe=ae===void 0?void 0:C(ae,CS(o,A,k.header)),lt=CS(Oe===void 0||Oe instanceof FormData?{}:{"Content-Type":"application/json"},o,A,k.header),Je=[...p,...Me],Xe={redirect:"follow",...b,...L,body:Oe,headers:lt},zt,At,dn=new E(Y2(P,{baseUrl:J,params:k,querySerializer:ge,pathSerializer:Ae}),Xe),Jt;for(let X in L)X in dn||(dn[X]=L[X]);if(Je.length){zt=$2(),At=Object.freeze({baseUrl:J,fetch:T,parseAs:O,querySerializer:ge,bodySerializer:C,pathSerializer:Ae});for(let X of Je)if(X&&typeof X=="object"&&typeof X.onRequest=="function"){let je=await X.onRequest({request:dn,schemaPath:P,params:k,options:At,id:zt});if(je)if(je instanceof E)dn=je;else if(je instanceof Response){Jt=je;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!Jt){try{Jt=await T(dn,l);}catch(X){let je=X;if(Je.length)for(let Zn=Je.length-1;Zn>=0;Zn--){let Gr=Je[Zn];if(Gr&&typeof Gr=="object"&&typeof Gr.onError=="function"){let jt=await Gr.onError({request:dn,error:je,schemaPath:P,params:k,options:At,id:zt});if(jt){if(jt instanceof Response){je=void 0,Jt=jt;break}if(jt instanceof Error){je=jt;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(je)throw je}if(Je.length)for(let X=Je.length-1;X>=0;X--){let je=Je[X];if(je&&typeof je=="object"&&typeof je.onResponse=="function"){let Zn=await je.onResponse({request:dn,response:Jt,schemaPath:P,params:k,options:At,id:zt});if(Zn){if(!(Zn instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");Jt=Zn;}}}}let Ot=Jt.headers.get("Content-Length");if(Jt.status===204||dn.method==="HEAD"||Ot==="0"&&!Jt.headers.get("Transfer-Encoding")?.includes("chunked"))return Jt.ok?{data:void 0,response:Jt}:{error:void 0,response:Jt};if(Jt.ok)return {data:await(async()=>{if(O==="stream")return Jt.body;if(O==="json"&&!Ot){let je=await Jt.text();return je?JSON.parse(je):void 0}return await Jt[O]()})(),response:Jt};let Y=await Jt.text();try{Y=JSON.parse(Y);}catch{}return {error:Y,response:Jt}}return {request(P,S,y){return v(S,{...y,method:P.toUpperCase()})},GET(P,S){return v(P,{...S,method:"GET"})},PUT(P,S){return v(P,{...S,method:"PUT"})},POST(P,S){return v(P,{...S,method:"POST"})},DELETE(P,S){return v(P,{...S,method:"DELETE"})},OPTIONS(P,S){return v(P,{...S,method:"OPTIONS"})},HEAD(P,S){return v(P,{...S,method:"HEAD"})},PATCH(P,S){return v(P,{...S,method:"PATCH"})},TRACE(P,S){return v(P,{...S,method:"TRACE"})},use(...P){for(let S of P)if(S){if(typeof S!="object"||!("onRequest"in S||"onResponse"in S||"onError"in S))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");p.push(S);}},eject(...P){for(let S of P){let y=p.indexOf(S);y!==-1&&p.splice(y,1);}}}}function Ju(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 ES(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 o in e)r.push(o,n.allowReserved===true?e[o]:encodeURIComponent(e[o]));let a=r.join(",");switch(n.style){case "form":return `${t}=${a}`;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return a}}for(let a in e){let o=n.style==="deepObject"?`${t}[${a}]`:a;r.push(Ju(o,e[a],n));}let s=r.join(i);return n.style==="label"||n.style==="matrix"?`${i}${s}`:s}function wS(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let s={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",a=(n.allowReserved===true?e:e.map(o=>encodeURIComponent(o))).join(s);switch(n.style){case "simple":return a;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return `${t}=${a}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",i=[];for(let s of e)n.style==="simple"||n.style==="label"?i.push(n.allowReserved===true?s:encodeURIComponent(s)):i.push(Ju(t,s,n));return n.style==="label"||n.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function TS(t){return function(n){let r=[];if(n&&typeof n=="object")for(let i in n){let s=n[i];if(s!=null){if(Array.isArray(s)){if(s.length===0)continue;r.push(wS(i,s,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof s=="object"){r.push(ES(i,s,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Ju(i,s,t));}}return r.join("&")}}function W2(t,e){let n=t;for(let r of t.match(K2)??[]){let i=r.substring(1,r.length-1),s=false,a="simple";if(i.endsWith("*")&&(s=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(a="label",i=i.substring(1)):i.startsWith(";")&&(a="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let o=e[i];if(Array.isArray(o)){n=n.replace(r,wS(i,o,{style:a,explode:s}));continue}if(typeof o=="object"){n=n.replace(r,ES(i,o,{style:a,explode:s}));continue}if(a==="matrix"){n=n.replace(r,`;${Ju(i,o)}`);continue}n=n.replace(r,a==="label"?`.${encodeURIComponent(o)}`:encodeURIComponent(o));}return n}function Z2(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 Y2(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 CS(...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,s]of r)if(s===null)e.delete(i);else if(Array.isArray(s))for(let a of s)e.append(i,a);else s!==void 0&&e.set(i,s);}return e}function RS(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function J2(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),kS({baseUrl:t.baseUrl,headers:e})}var zh=class extends Error{constructor(n,r){super(r);w(this,"status",n);this.name="ApiError";}};var Hh=class extends _b{constructor(n){let{exportedConfig:r,environmentId:i,...s}=n,a=vs(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:i??"default"});if(!a)throw new Error("BrowserRuntime requires exportedConfig");let o=$s(n.storage),l=new Xd({storage:o,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...s,exportedConfig:a,storage:o,impressionStore:l});w(this,"_hydratePromise");let b=n.autoHydrate??true;this._hydratePromise=b?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function X2(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 AS(t){return X2(t)/4294967296}function Q2(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 OS(t,e,n){if(!t)return;let r=Q2(n.variants);if(r.length===0)return;let{exposure:i}=n;if(i!==void 0&&(!(i>0)||i<1&&AS(`${t}:${e}:exposure`)>=i))return;let s=r.reduce((o,[,l])=>o+l,0),a=AS(`${t}:${e}:variant`)*s;for(let[o,l]of r)if(a-=l,a<0)return o;return r[r.length-1][0]}function ej(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[s,a]of Object.entries(e)){let o=OS(r,s,a);o!==void 0&&(i[s]=o);}return {assignments:i}}}}var tj=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function nj(t){let e={};for(let[n,r]of Object.entries(t.properties))e[tj.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 Kh=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=nj(n);if(this.transform){let s=this.transform(r,i);if(s===null)continue;r=s.eventName,i=s.properties;}try{this.handler(r,i);}catch{}}}};function jS(t){let e=new Kh(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function FS(t){let{posthog:e,filter:n,transform:r,name:i}=t;return jS({name:i??"posthog",filter:n,transform:r,handler:(s,a)=>{e.capture(s,a);}})}function rj(t){let{posthog:e,filter:n,transform:r,name:i,syncIdentity:s=false,syncAccountGroup:a=false,mirrorNavigation:o=false}=t,l=i??"posthog",b=FS({posthog:e,filter:n,transform:r,name:l}),p=null,v=null,P=S=>{try{if(s){let y=S.user_id;y&&y!==p?(e.identify?.(y,S.identity.traits),p=y):!y&&p!==null&&(e.reset?.(),p=null);}if(a){let y=S.identity.traits.account_id;typeof y=="string"&&y&&y!==v&&(e.group?.("account",y),v=y);}o&&S.type==="page_view"&&e.capture("$pageview",{$current_url:S.url});}catch{}};return {domain:"events",async resolve(){let y=(await b.resolve())?.consumers??[];return {consumers:[{name:l,consume(E){for(let A of E)P(A);for(let A of y)A.consume(E);}}]}}}}var LS=["banner_placement"],BS=["banner_placement","in_page_card"],US=["toast_message"],VS=["modal_overlay"];var Qc=["banner_placement","in_page_card","usage_counter","button"],ed=["modal_overlay","inline_gate_message"],td=["toast_message","modal_overlay","banner_placement"];function yl(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Xu=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";}},Qu=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 evaluate(e){let n=yl(),r=e.anonymousId??yl(),[i,s,a,o,l]=await Promise.all([this.evaluatePlacements(n,e),this.evaluateEntitlements(n,e),e.includeTrialStatus?this.fetchTrialStatus(n,e.userId):Promise.resolve(void 0),e.includeUserContext?this.fetchUserContext(n,e.userId):Promise.resolve(void 0),e.includeTheme?this.fetchTheme(n):Promise.resolve(void 0)]),b={version:"1.0.0",request_id:n,tenant_id:this.tenantId,evaluated_at:new Date().toISOString(),ttl_seconds:this.defaultTtlSeconds,user:{id:e.userId,anonymous_id:r,traits:e.traits},decisions:i};return s&&Object.keys(s).length>0&&(b.entitlements=s),a&&(b.trial_status=a),o&&(b.user_context=o),l&&(b.theme=l),b}async getPlacement(e,n,r){let i=yl(),s={request_id:i,user_id:e,traits:r??{},slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle};try{let a=await this.apiCall(i,"/api/decision-api/v1/decide-context",s);if(!a.ok)return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:!1,reason_codes:["api_error"]};let o=await a.json(),l=o.decision,b=l?.visible??!1,p={slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:b};return b&&l&&(p.output=l),o.reason_codes&&(p.reason_codes=o.reason_codes),p}catch{return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:false,reason_codes:["network_error"]}}}async checkEntitlement(e,n,r){let i=yl(),s={request_id:i,user_id:e,entitlement_handle:n,...r??{}};try{let a=await this.apiCall(i,"/api/decision-api/v1/check-entitlement",s);if(!a.ok)return {status:"denied",allowed:!1,reason:"api_error"};let o=await a.json();return {status:o.status??"denied",allowed:o.allowed??!1,reason:o.reason,current_tier:o.current_tier}}catch{return {status:"denied",allowed:false,reason:"network_error"}}}can(e,n,r){return this.checkEntitlement(e,n,r)}async getTrialStatus(e){let n=yl();return this.fetchTrialStatus(n,e)}async createClientSession(e){let n=yl(),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 Xu(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}})}async evaluatePlacements(e,n){let r=n.placements??[];return r.length===0?[]:r.length>1?this.evaluatePlacementsBatch(e,n,r):[await this.getPlacement(n.userId,r[0],n.traits)]}async evaluatePlacementsBatch(e,n,r){let i={request_id:e,user_id:n.userId,traits:n.traits??{},usage_balances:n.usageBalances??{},page:n.page??{},placements:r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle}))};try{let s=await this.apiCall(e,"/api/decision-api/v1/bootstrap-context",i);return s.ok?(await s.json()).decisions.map((o,l)=>{let b=r[l]??{},p=o.result.decision?.visible??!1,v={slot_id:b.slotId,entitlement_handle:b.entitlementHandle,plan_handle:b.planHandle,placement_handle:b.placementHandle,visible:p};return p&&o.result.decision&&(v.output=o.result.decision),o.result.reason_codes&&(v.reason_codes=o.result.reason_codes),v}):r.map(o=>({slot_id:o.slotId,entitlement_handle:o.entitlementHandle,plan_handle:o.planHandle,placement_handle:o.placementHandle,visible:!1,reason_codes:["api_error"]}))}catch{return r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle,visible:false,reason_codes:["network_error"]}))}}async evaluateEntitlements(e,n){let r=n.entitlementHandles??[];if(r.length===0)return;let i={},s=await Promise.allSettled(r.map(async a=>{let o=await this.checkEntitlement(n.userId,a);return {handle:a,result:o}}));for(let a of s)a.status==="fulfilled"&&(i[a.value.handle]=a.value.result);return i}async fetchTrialStatus(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/trial-status",{request_id:e,user_id:n});if(!r.ok)return {in_trial:!1};let i=await r.json();return {in_trial:i.in_trial??!1,...i.trial_type!==void 0?{trial_type:i.trial_type}:{},...i.plan_handle!==void 0?{plan_handle:i.plan_handle}:{},...i.trial_limit_type!==void 0?{trial_limit_type:i.trial_limit_type}:{},...i.progress_percent!==void 0?{progress_percent:i.progress_percent}:{},...i.day_number!==void 0?{day_number:i.day_number}:{},...i.days_remaining!==void 0?{days_remaining:i.days_remaining}:{},...i.usage_entitlement_handle!==void 0?{usage_entitlement_handle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{usage_consumed:i.usage_consumed}:{},...i.usage_remaining!==void 0?{usage_remaining:i.usage_remaining}:{},...i.usage_limit!==void 0?{usage_limit:i.usage_limit}:{}}}catch{return {in_trial:false}}}async fetchUserContext(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/user-context",{request_id:e,user_id:n});if(!r.ok)return;let i=await r.json();return {segments:i.segments,traits:i.traits,usage_balances:i.usage_balances}}catch{return}}async fetchTheme(e){try{let n=await this.apiGet(e,"/api/sdk/theme");if(!n.ok)return;let r=await n.json();return typeof r!="object"||r===null?void 0:r}catch{return}}};var sj=/^[a-z0-9._]{1,100}$/,da={Persisted:"persisted",Transient:"transient"},hs={Internal:"internal",External:"external"},zi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},aj="readOnly";function pi(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[aj]===true||(e[n]=r);}return z.object(e)}function zr(t){let e=pi(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(sj)}):e}var {Unrestricted:ri}=zi,{Transient:ii,Persisted:lj}=da,{Internal:za,External:Us}=hs;z.object({page:z.coerce.number().int().min(1).default(1).meta(ri),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ri)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var Kn=z.object({created_at:z.string().datetime().meta({...ri,readOnly:true}),updated_at:z.string().datetime().meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),Ln=z.object({id:z.string().min(1).meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),Gn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var $h=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),DS=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var em=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),MS=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});var Vs=z.string().min(1).max(200),pr=z.string().min(1).max(100),tm=z.string().max(500).optional(),_i=z.record(z.string(),z.unknown()).default({}),Ha=z.number().int().min(10).max(100).multipleOf(10),nm=z.string().datetime().nullable().default(null),or=z.object({environment_id:z.string().min(1).default("production").meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za}),fr=z.object({playbook_version_id:z.string().nullable().default(null).meta(ri),is_current:z.boolean().default(true).meta({...ri,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ri,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ri,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ri,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za}),cj=Ln.merge(Kn).merge(Gn).merge(or).extend({handle:pr.meta({...ri,readOnly:true}),active:z.boolean().default(true).meta({...ri,readOnly:true})});function Hr(t){return cj.meta({id:t,"x-revturbine-schema-persistence":lj,"x-revturbine-schema-exposure":za})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});var NS=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":ii,"x-revturbine-schema-exposure":Us});new Set($h.options);var zS=z.enum(["session","day","week","month"]),HS=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(HS),cap:z.object({count:z.number().int().min(1),period:zS})});var Rj="__self__",kj={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},WS={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_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:Rj,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:kj},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:{}}}};z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var JS={Named:"named",Minted:"minted"},XS="x-revturbine-schema-identity";function _s(t="handle"){return {[XS]:{kind:JS.Named,handleField:t}}}function bs(t="handle"){return {[XS]:{kind:JS.Minted,handleField:t}}}var In={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Hi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},Aj="x-revturbine-context",Oj="x-revturbine-in-config",jj="x-revturbine-sdk-input",Fj="x-revturbine-source",Lj="x-revturbine-deprecation",Bj={[In.Playbook]:Hi.Customer,[In.Branding]:Hi.Customer,[In.Billing]:Hi.Stripe,[In.Metering]:Hi.Customer,[In.CustomerOperations]:Hi.Runtime,[In.EventIngestion]:Hi.Runtime};function nr(t,e){return {[Aj]:t,[Oj]:e.inConfig??t===In.Playbook,[jj]:e.sdkInput,[Fj]:e.source??Bj[t]}}function Wh(t){return {deprecated:true,[Lj]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var pn=t=>z.object({items:z.array(t)}),ir=z.object({error:z.string(),code:z.string(),request_id:z.string()}),U=t=>t,fn=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:ke}=zi,{Persisted:ng,Transient:fi}=da,{Internal:QS,External:si}=hs,eP=nr(In.Playbook,{sdkInput:true}),Uj=nr(In.Playbook,{inConfig:false,sdkInput:false}),tP=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":fi,"x-revturbine-schema-exposure":si}),sm=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Vj=z.enum(DS).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),qj=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),nP=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Zh=z.object({entitlement_id:z.string().min(1).meta(ke),entitlement_handle:z.string().min(1).meta(ke),status:Vj.meta(ke),limit:z.number().optional().meta(ke),used:z.number().optional().meta(ke),allocation:sm.optional().meta(ke),enforcement:nP.optional().meta(ke),source:qj.optional().meta(ke),plan_id:z.string().optional().meta(ke),segment_id:z.string().optional().meta(ke),seat_type_id:z.string().optional().meta(ke),rule_id:z.string().optional().meta(ke)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si,...zi.Operational});z.object({account:z.record(z.string(),Zh).optional().meta(ke),instance:z.record(z.string(),Zh).optional().meta(ke),user:z.record(z.string(),Zh).optional().meta(ke)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si,...zi.Operational});var Dj=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Mj=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),rP=z.object({kind:Mj.meta(ke),id:z.string().min(1).meta(ke)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Nj=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Cl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),name:Vs.meta(ke),handle:pr.meta(ke),customer_facing_description:z.string().max(500).optional().meta(ke),type:em.meta(ke),unit:z.string().max(100).optional().meta(ke),period_scope:tP.optional().meta(ke),allocation:sm.optional().meta(ke),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ke),sort_order:z.number().int().default(0).meta(ke),metadata:_i.meta(ke)}).meta({id:"Entitlement","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":si,...eP,..._s()}),zj=Hr("EntitlementAnchor"),jl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),handle:pr.meta({...ke,readOnly:true}),entitlement_id:z.string().min(1).meta(ke),targets:z.array(rP).min(1).meta(ke),segment_ids:z.array(z.string()).default([]).meta(ke),visibility:Dj.default("public").meta(ke),period_scope:tP.optional().meta(ke),instance:z.string().max(100).optional().meta(ke),reset_period:Nj.optional().meta(ke),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ke),enforcement:nP.optional().meta(ke),warning_threshold_percent:Ha.optional().meta(ke),overage_price_ref:z.string().optional().meta(ke),grace_period_hours:z.number().int().min(0).optional().meta(ke),tier_value:z.string().optional().meta(ke),rate_value:z.number().optional().meta(ke),initial_grant:z.number().optional().meta(ke),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ke),rollover_enabled:z.boolean().optional().meta(ke),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ke),seat_type_id:z.string().optional().meta(ke),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ke),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ke),stripe_metered_price_id:z.string().optional().meta(ke),enabled:z.boolean().optional().meta(ke),allocation:sm.optional().meta(ke),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ke),amount_cents:z.number().int().optional().meta(ke),currency:z.string().optional().meta(ke)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":QS,...eP,...bs()}),Hj=Hr("EntitlementRuleAnchor");jl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 Kj=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Gj=z.object({code:Kj.meta(ke),message:z.string().min(1).meta(ke),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ke)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Yh=jl.extend({warnings:z.array(Gj).optional().meta(ke)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Jh=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({...ke,readOnly:true}),rule_id:z.string().min(1).meta(ke),experiment_id:z.string().min(1).meta(ke),variant_name:z.string().min(1).max(200).meta(ke),is_control:z.boolean().default(false).meta(ke),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ke)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":QS,...Uj,...bs()}),$j=pi(Cl),Wj=pi(jl);({"/api/entitlement-anchors":{get:U({operationId:"listEntitlementAnchors",requestParams:{query:fn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:pn(zj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:U({operationId:"listEntitlementRuleAnchors",requestParams:{query:fn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:pn(Hj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:U({operationId:"listEntitlements",requestParams:{query:fn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:pn(Cl)}}}},"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:zr(Cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cl}}}},"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:Cl}}}},"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:$j}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cl}}}},"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:ir}}}},"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:fn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:pn(jl)}}}},"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:zr(jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yh}}}},"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:Wj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yh}}}},"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:Yh}}}},"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:fn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:pn(Jh)}}}},"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:zr(Jh)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ot}=zi,{Persisted:ad,Transient:od}=da,{Internal:ys}=hs,iP=nr(In.Playbook,{sdkInput:true}),sP=nr(In.Playbook,{inConfig:false,sdkInput:true}),Zj=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),rg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),aP=z.object({name:Vs.meta(ot),handle:pr.meta(ot),plan_id:z.string().nullable().optional().meta(ot),segment_id:z.string().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ot),grace_period_days:z.number().int().min(0).default(0).meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),require_payment_method:z.boolean().default(false).meta(ot),auto_convert:z.boolean().default(true).meta(ot),convert_to_plan_id:z.string().optional().meta(ot),fallback_plan_id:z.string().optional().meta(ot),limit_per_customer:z.number().int().min(1).default(1).meta(ot),is_active:z.boolean().default(true).meta(ot),metadata:_i.meta(ot)}),xl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ot,readOnly:true})}).merge(aP).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...iP,..._s()}),Yj=Hr("FreeTrialRuleAnchor"),Jj=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),oP=z.object({name:Vs.meta(ot),handle:pr.meta(ot),premium_plan_id:z.string().min(1).meta(ot),fallback_plan_id:z.string().min(1).meta(ot),segment_id:z.string().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),start_policy:Jj.default("signup").meta(ot),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(ot),entitlements_during_trial:z.array(z.string()).default([]).meta(ot),is_active:z.boolean().default(true).meta(ot),metadata:_i.meta(ot)}),Sl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ot,readOnly:true})}).merge(oP).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...iP,..._s()}),Xj=Hr("ReverseTrialRuleAnchor"),lP=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),cP=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),Pl=Ln.merge(Kn).merge(Gn).extend({trial_limit_policy:lP.default("1_per_lifetime").meta(ot),eligibility_scope:cP.default("per_customer").meta(ot)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...sP}),Il=Ln.merge(Kn).merge(Gn).extend({trial_limit_policy:lP.default("1_per_lifetime").meta(ot),eligibility_scope:cP.default("per_customer").meta(ot)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...sP}),rm=Ln.merge(Kn).merge(Gn).extend({customer_id:z.string().min(1).meta(ot),rule_id:z.string().min(1).meta(ot),rule_type:z.enum(["free_trial","reverse_trial"]).meta(ot),plan_id:z.string().min(1).meta(ot),status:Zj.default("active").meta(ot),started_at:z.string().datetime().meta({...ot,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),converted_at:nm.meta(ot),cancelled_at:nm.meta(ot),metadata:_i.meta(ot)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys});({"/api/free-trial-rule-anchors":{get:U({operationId:"listFreeTrialRuleAnchors",requestParams:{query:fn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:pn(Yj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:U({operationId:"listFreeTrialRules",requestParams:{query:fn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:pn(xl)}}}},"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:xl}}}},"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:xl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xl}}}},"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:fn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:pn(Xj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:U({operationId:"listReverseTrialRules",requestParams:{query:fn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:pn(Sl)}}}},"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:Sl}}}},"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:Sl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Sl}}}},"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:fn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:pn(Pl)}}}},"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:Pl}}}},"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:Pl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:U({operationId:"listReverseTrialSettings",requestParams:{query:fn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:pn(Il)}}}},"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:Il}}}},"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:Il.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:U({operationId:"listTrialInstances",requestParams:{query:fn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:pn(rm)}}}},"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:rm}}}},"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:rm}}}},"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:rm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:on,Financial:im}=zi,{Persisted:ld,Transient:am}=da,{External:qs}=hs,Qj=nr(In.Playbook,{sdkInput:true}),eF=nr(In.Playbook,{sdkInput:false}),ig=nr(In.Billing,{sdkInput:false}),ma=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),cd=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),om=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),Rl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),name:Vs.meta(on),handle:pr.meta(on),tier_position:z.number().int().min(0).default(0).meta(on),sort_order:z.number().int().default(0).meta(on),visibility:ma.default("public").meta(on),metadata:_i.meta(on)}).meta({id:"Plan","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...Qj,..._s()}),tF=Hr("PlanAnchor"),kl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),handle:pr.meta({...on,readOnly:true}),plan_id:z.string().min(1).meta(on),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(on),segment_id:z.string().nullable().default(null).meta(on),price_amount:z.number().min(0).meta(im),pricing_model:cd.meta(on),visibility:ma.default("public").meta(on),stripe_price_id:z.string().optional().meta(on),price_source:om.default("static").meta(on)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig,...bs()}),nF=Hr("PlanVariationAnchor"),El=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),name:Vs.meta(on),handle:pr.meta(on),sort_order:z.number().int().default(0).meta(on),visibility:ma.default("public").meta(on),metadata:_i.meta(on)}).meta({id:"AddOn","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...eF,..._s()}),rF=Hr("AddOnAnchor"),wl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),handle:pr.meta({...on,readOnly:true}),addon_id:z.string().min(1).meta(on),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(on),segment_id:z.string().nullable().default(null).meta(on),price_amount:z.number().min(0).meta(im),pricing_model:cd.meta(on),visibility:ma.default("public").meta(on),stripe_price_id:z.string().optional().meta(on),price_source:om.default("static").meta(on)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig,...bs()}),iF=Hr("AddOnVariationAnchor"),sF=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),Al=Ln.merge(Kn).merge(Gn).extend({stripe_price_id:z.string().min(1).meta(on),stripe_product_id:z.string().min(1).meta(on),billing_period:sF.meta(on),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(im),currency:MS.meta(im),pricing_model:cd.meta(on),nickname:z.string().nullable().default(null).meta(on),is_mock:z.boolean().default(false).meta(on),last_updated_from_stripe:nm.meta(on)}).meta({id:"StripePrice","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig}),aF=pi(Rl),oF=pi(kl),lF=pi(El),cF=pi(wl),dF=pi(Al);({"/api/plan-anchors":{get:U({operationId:"listPlanAnchors",requestParams:{query:fn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:pn(tF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:U({operationId:"listPlans",requestParams:{query:fn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:pn(Rl)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:zr(Rl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get: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:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:aF}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:ir}}}},"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:fn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:pn(nF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:U({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:fn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:pn(kl)}}}},"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:zr(kl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:kl}}}},"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:kl}}}},"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:oF}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:kl}}}},"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:fn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:pn(rF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:U({operationId:"listAddOns",requestParams:{query:fn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:pn(El)}}}},"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:zr(El)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:El}}}},"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:El}}}},"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:lF}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:El}}}},"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:fn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:pn(iF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:U({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:fn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:pn(wl)}}}},"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:zr(wl)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:wl}}}},"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:wl}}}},"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:cF}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:wl}}}},"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:fn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:pn(Al)}}}},"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:zr(Al)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Al}}}},"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:Al}}}},"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:dF}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Al}}}},"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:_}=zi,{Persisted:Fl,Transient:mt}=da,{Internal:Oi,External:Nt}=hs,wt=nr(In.Playbook,{sdkInput:true}),Ol=nr(In.Playbook,{sdkInput:false}),ua=nr(In.Playbook,{inConfig:false,sdkInput:false}),dP=nr(In.Playbook,{inConfig:false,sdkInput:true}),Tl=nr(In.Playbook,{inConfig:false,sdkInput:true,source:Hi.CodeConstant}),Xh=nr(In.Playbook,{inConfig:false,sdkInput:true,source:Hi.Runtime}),Qh=nr(In.Playbook,{inConfig:false,sdkInput:false,source:Hi.Runtime}),uF=nr(In.Billing,{sdkInput:false}),mF=nr(In.Metering,{sdkInput:false}),pF=nr(In.Branding,{inConfig:true,sdkInput:true}),fF=nr(In.Branding,{sdkInput:false}),hF="1.0.0",nd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),name:Vs.meta(_),handle:pr.meta(_),description:tm.meta(_),is_default:z.boolean().default(false).meta(_),entitlement_ids:z.array(z.string()).default([]).meta(_),metadata:_i.meta(_)}).meta({id:"SeatType","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...ua,..._s()}),gF=Hr("SeatTypeAnchor"),rd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta(_),label:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().nullable().default(null).meta(_),example_value:z.string().nullable().default(null).meta(_),value_map:z.record(z.string(),z.string()).default({}).meta(_),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(_),metadata:_i.meta(_)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...ua,..._s()}),_F=Hr("PersonalizationTokenAnchor"),bF=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),eg=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({..._,readOnly:true}),stripe_account_id:z.string().min(1).meta(_),live_mode:z.boolean().default(false).meta(_),onboarding_state:bF.default("not_started").meta({..._,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({..._,readOnly:true}),charges_enabled:z.boolean().default(false).meta({..._,readOnly:true}),details_submitted:z.boolean().default(false).meta({..._,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({..._,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({..._,readOnly:true}),sync_products:z.boolean().default(true).meta(_),sync_prices:z.boolean().default(true).meta(_),sync_subscriptions:z.boolean().default(true).meta(_),sync_invoices:z.boolean().default(false).meta(_),default_currency:z.string().length(3).default("USD").meta(_),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(_),last_sync_at:z.string().optional().meta({..._,readOnly:true}),metadata:_i.meta(_)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...uF,...bs()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(_),workspace_name:z.string().optional().meta(_),logo_url:z.string().optional().meta(_),support_email:z.string().optional().meta(_)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...fF});var id=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),meter_key:z.string().min(1).max(100).meta(_),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(_),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(_),stripe_meter_id:z.string().nullable().default(null).meta(_),is_active:z.boolean().default(true).meta(_),metadata:_i.meta(_)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...mF,...bs()}),ZS=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),sd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),soft_limit_percent:z.number().min(0).max(100).default(80).meta(_),hard_limit_percent:z.number().min(0).max(100).default(100).meta(_),soft_limit_action:ZS.default("warn").meta(_),hard_limit_action:ZS.default("block").meta(_),grace_period_hours:z.number().int().min(0).default(0).meta(_),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...dP,...bs()}),yF=Hr("UsageEnforcementSettingsAnchor"),vF=z.object({kind:z.enum(["template","slot"]).meta(_),id:z.string().min(1).meta(_),label:z.string().min(1).optional().meta(_)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),xF=z.object({id:z.string().min(1).meta(_),group:z.array(vF).min(1).meta(_),cap:z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month"]).meta(_)}).meta(_)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),SF=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),uP=z.object({capRules:z.array(xF).default([]).meta(_),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(_),remindLaterMinutes:z.number().int().min(0).default(60).meta(_),testMode:SF.default("off").meta(_)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),tg=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta({..._,readOnly:true}),global_frequency_cap:uP.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(_)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...dP,...bs()}),PF=Hr("PlacementSettingsAnchor"),IF=z.object({field:z.string().min(1).meta(_),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(_),value:z.string().meta(_)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),TF=z.object({name:z.string().min(1).meta(_),handle:z.string().min(1).meta(_),predicates:z.array(IF).optional().meta(_),dimension_id:z.string().optional().meta(_),experiment_id:z.string().min(1).optional().meta(_)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),CF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),tier_position:z.number().int().min(0).default(0).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:ma.default("public").meta(_)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),RF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:ma.default("public").meta(_)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...Ol}),kF=z.object({handle:z.string().min(1).meta(_),plan_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:cd.meta(_),visibility:ma.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:om.meta(_)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),EF=z.object({handle:z.string().min(1).meta(_),addon_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:cd.meta(_),visibility:ma.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:om.meta(_)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),wF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),is_default:z.boolean().default(false).meta(_),entitlement_handles:z.array(z.string()).default([]).meta(_)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),AF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().nullable().default(null).meta(_),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),soft_limit_action:z.string().meta(_),hard_limit_action:z.string().meta(_),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(_),notification_channels:z.array(z.string()).default([]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),OF=z.object({handle:z.string().min(1).meta(_),global_frequency_cap:uP.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),jF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:z.string().nullable().default(null).meta(_),visibility_toggle:z.boolean().default(true).meta(_),source_type:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),FF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().min(1).meta(_),meter_handle:z.string().min(1).meta(_),limit:z.number().int().min(0).nullable().default(null).meta(_),reset_period:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),LF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),type:em.meta(_),unit:z.string().optional().meta(_),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),mP=z.object({id:z.string().min(1).meta(_),entitlement_id:z.string().min(1).meta(_),targets:z.array(rP).min(1).meta(_),segment_ids:z.array(z.string()).default([]).meta(_),kind:em.optional().meta({..._,readOnly:true}),unit:z.string().optional().meta({..._,readOnly:true}),tier_name:z.string().optional().meta({..._,readOnly:true}),tier_description:z.string().optional().meta({..._,readOnly:true}),...jl.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(_),allocation:sm.optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),BF=z.object({slot_id:z.string().min(1).meta(_),active:z.boolean().meta(_),triggers:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),UF=z.object({id:z.string().min(1).meta(_),label:z.string().min(1).meta(_),description:z.string().meta(_),surface_type:z.string().meta(_),placement_handle:z.string().min(1).meta(_),template:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),VF=z.object({name:z.string().min(1).meta(_),type:z.string().optional().meta(_),required:z.boolean().optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),qF=z.object({id:z.string().min(1).meta(_),surface_type:z.string().meta(_),fields:z.array(VF).optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),DF=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":mt,"x-revturbine-schema-exposure":Nt}),MF=z.object({name:z.string().min(1).meta(_),action_type:DF.meta(_),plan_handle:z.string().optional().meta(_),promotion_id:z.string().optional().meta(_),placement_handle:z.string().optional().meta(_),url:z.string().optional().meta(_),tour_id:z.string().optional().meta(_),target_billing_period:z.enum(["monthly","annual"]).optional().meta(_),description:z.string().optional().meta(_)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),NF=z.object({id:z.string().meta(_),name:z.string().meta(_),discount:z.string().meta(_),type:z.string().meta(_),status:z.string().meta(_)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),zF=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(_),label:z.string().min(1).meta(_),description:z.string().optional().meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().optional().meta(_),example_value:z.string().optional().meta(_),value_map:z.record(z.string(),z.string()).optional().meta(_),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(_)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),YS=z.object({header:z.string().optional().meta(_),body:z.string().optional().meta(_),cta_label:z.string().optional().meta(_),secondary_cta_label:z.string().optional().meta(_)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),HF=z.object({block_id:z.string().min(1).meta(_),tenant_id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),surface_template_id:z.string().optional().meta(_),default_content:YS.meta(_),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:YS})).optional().meta(_),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(_),tokens_used:z.array(z.string()).optional().meta(_),status:z.enum(["draft","active","archived"]).meta(_),created_at:z.string().datetime().meta({..._,readOnly:true}),updated_at:z.string().datetime().meta({..._,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),KF=z.object({label:z.string().meta(_),path:NS.meta(_),config:z.record(z.string(),z.string()).optional().meta(_)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),pP=z.object({template_id:z.string().min(1).meta(_),fields:z.record(z.string(),z.string()).meta(_),ctas:z.array(KF).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),fP=z.object({plan_ids:z.array(z.string()).meta(_),billing_cadences:z.array(z.string()).optional().meta(_),segment_chips:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),GF=z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month","lifetime"]).meta(_)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),hP=z.object({max_per_period:GF.optional().meta(_),cooldown_days:z.number().int().min(0).optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),$F=z.object({id:z.string().min(1).meta(_),target:fP.meta(_),surfaces:z.array(pP).meta(_),caps:hP.optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().optional().meta({..._,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(_),recommendation_plan_override:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),WF=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:Ha}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ha}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ha}),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":mt,"x-revturbine-schema-exposure":Nt}),ZF=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),YF=z.object({id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:ZF.meta(_),trigger:WF.meta(_),payloads:z.array($F).meta(_),order:z.number().int().min(0).meta(_)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),JF=z.object({payload_id:z.string().min(1).meta(_),placement_id:z.string().min(1).meta(_),target:fP.meta(_),caps:hP.optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().meta({..._,readOnly:true}),updated_at:z.string().datetime().optional().meta({..._,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(_),surfaces:z.array(pP).optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),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(_)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),XF=z.object({kind:z.string().min(1).meta(_),schema_version:z.number().int().nonnegative().meta(_),config:z.unknown().meta(_)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),QF=Ln.merge(aP).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),eL=Ln.merge(oP).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),tL=z.object({plans:z.array(CF).meta({..._,...wt}),addons:z.array(RF).optional().meta({..._,...Ol}),entitlements:z.array(LF).meta({..._,...wt}),entitlement_rules:z.array(mP).meta({..._,...wt}),segments:z.array(TF).meta({..._,...wt}),content_ui_paths:z.array(MF).meta({..._,...wt}),slot_configs:z.array(BF).optional().meta({..._,...wt,...Wh({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({..._,...wt,...Wh({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({..._,...pF,...Wh({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(UF).optional().meta({..._,...wt}),message_blocks:z.array(HF).optional().meta({..._,...wt}),placement_payloads:z.array(JF).optional().meta({..._,...wt}),placements:z.array(YF).optional().meta({..._,...wt}),content_promotions:z.array(NF).optional().meta({..._,...wt}),personalization_tokens:z.array(zF).optional().meta({..._,...wt}),surface_templates:z.array(qF).optional().meta({..._,...wt}),free_trial_rules:z.array(QF).optional().meta({..._,...Ol}),reverse_trial_rules:z.array(eL).optional().meta({..._,...Ol}),plan_variations:z.array(kF).optional().meta({..._,...Ol}),addon_variations:z.array(EF).optional().meta({..._,...Ol}),extension_rules:z.array(XF).optional().meta({..._,...wt}),seat_types:z.array(wF).optional().meta({..._,...wt}),enforcement_defaults:z.array(AF).optional().meta({..._,...wt}),placement_settings:z.array(OF).optional().meta({..._,...wt}),segment_dimensions:z.array(jF).optional().meta({..._,...wt}),meter_bindings:z.array(FF).optional().meta({..._,...wt}),experiments:z.array(z.unknown()).max(0).optional().meta({..._,...ua}),signal_catalog:z.object({}).strict().optional().meta({..._,...ua})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),nL=z.object({artifact_type:z.literal("playbook").meta({..._,...Tl,readOnly:true}),format_version:z.literal(hF).meta({..._,...Tl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({..._,...Tl}),playbook_version_id:z.string().nullable().default(null).meta({..._,...Xh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),environment_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),project_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),exported_at:z.string().datetime().optional().meta({..._,...Xh,readOnly:true}),schema_version:z.string().min(1).optional().meta({..._,...Tl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({..._,...Tl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({..._,...Tl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...Xh}),gP=nL.extend(tL.shape).meta({"x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});function rL(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _P(t){if(!rL(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,gP).meta({id:"Playbook","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});z.preprocess(_P,gP.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});({"/api/seat-type-anchors":{get:U({operationId:"listSeatTypeAnchors",requestParams:{query:fn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:pn(gF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:U({operationId:"listSeatTypes",requestParams:{query:fn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:pn(nd)}}}},"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:zr(nd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nd}}}},"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:nd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nd}}}},"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:fn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:pn(_F)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:U({operationId:"listPersonalizationTokens",requestParams:{query:fn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:pn(rd)}}}},"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:zr(rd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rd}}}},"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:rd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rd}}}},"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:pi(eg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:eg}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:U({operationId:"listMeteringConfigs",requestParams:{query:fn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:pn(id)}}}},"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:zr(id)}}},responses:{201:{description:"Created",content:{"application/json":{schema:id}}}},"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:id.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:id}}}},"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:fn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:pn(yF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:U({operationId:"listUsageEnforcementSettings",requestParams:{query:fn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:pn(sd)}}}},"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:zr(sd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sd}}}},"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:sd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:sd}}}},"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:fn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:pn(PF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:U({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pi(tg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:tg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var lm=new Int32Array(2);new Float32Array(lm.buffer);new Float64Array(lm.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var cm;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(cm||(cm={}));var {Unrestricted:Ke}=zi,{Persisted:um,Transient:pa}=da,{External:ji}=hs,TP=nr(In.Playbook,{sdkInput:true});nr(In.Playbook,{inConfig:false,sdkInput:false});var lL=nr(In.Playbook,{inConfig:false,sdkInput:true}),cL=nr(In.Playbook,{inConfig:false,sdkInput:false,source:Hi.Runtime}),dL=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var CP=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),RP=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),uL=z.object({count:z.number().int().positive().meta(Ke),period:RP.meta(Ke)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji});z.object({surface_type:z.string().min(1).meta(Ke),rules:z.array(uL).meta(Ke),cooldown_ms:z.number().int().nonnegative().optional().meta(Ke)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...zi.Operational,...lL});var mL=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),Ll=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...Ke,readOnly:true}),name:Vs.meta(Ke),handle:pr.meta(Ke),description:tm.meta(Ke),category:CP.meta(Ke),drag_order_in_category:z.number().int().default(0).meta(Ke),surface_slot_id:z.string().optional().meta(Ke),entitlement_id:z.string().optional().meta(Ke),tier_threshold:z.string().optional().meta(Ke),threshold_percent:Ha.optional().meta(Ke),trial_type:z.enum(["free","reverse"]).optional().meta(Ke),trigger_type:z.string().optional().meta(Ke),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ke),days_before_end:z.number().int().min(0).optional().meta(Ke),qualifier:dL.optional().meta(Ke),activation_window_start:z.string().datetime().optional().meta(Ke),activation_window_end:z.string().datetime().optional().meta(Ke),metadata:_i.meta(Ke)}).meta({id:"Placement","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...TP,..._s()}),pL=Hr("PlacementAnchor"),fL=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),hL=z.object({code:fL.meta(Ke),message:z.string().min(1).meta(Ke),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ke)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),IP=Ll.extend({warnings:z.array(hL).optional().meta(Ke)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),gL=z.object({label:z.string().min(1).max(200).meta(Ke),cta_path_type:mL.meta(Ke),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ke)}).meta({id:"CtaObject","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),dd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...Ke,readOnly:true}),handle:pr.meta({...Ke,readOnly:true}),placement_id:z.string().min(1).meta(Ke),drag_order:z.number().int().default(0).meta(Ke),target_plan_ids:z.array(z.string()).default([]).meta(Ke),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ke),target_segments:z.array(z.string()).default([]).meta(Ke),surface_slot_ids:z.array(z.string()).default([]).meta(Ke),surface_template_id:z.string().min(1).meta(Ke),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ke),cta_list:z.array(gL).default([]).meta(Ke),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ke),max_period_unit:RP.default("session").meta(Ke),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ke),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ke),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ke),recommendation_plan_override:z.string().optional().meta(Ke)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...TP,...bs()}),_L=Hr("PlacementPayloadAnchor"),bL=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ke),surface_type:$h.meta(Ke),surface_template_ids:z.array(z.string()).default([]).meta(Ke),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ke),first_seen:z.string().datetime().meta({...Ke,readOnly:true}),last_seen:z.string().datetime().meta({...Ke,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ke),placement_count:z.number().int().min(0).default(0).meta({...Ke,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...cL,..._s("surface_slot_handle")}),yL=pi(Ll),vL=pi(dd);({"/api/placement-anchors":{get:U({operationId:"listPlacementAnchors",requestParams:{query:fn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:pn(pL)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:U({operationId:"listPlacements",requestParams:{query:fn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:pn(Ll)}}}},"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:zr(Ll)}}},responses:{201:{description:"Created",content:{"application/json":{schema:IP}}}},"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:Ll}}}},"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:yL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:IP}}}},"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:ir}}}},"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:Ll}}}},"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:CP,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:fn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:pn(_L)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:U({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:fn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:pn(dd)}}}},"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:zr(dd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:dd}}}},"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:vL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dd}}}},"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:fn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:pn(bL)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var kP=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(kP).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 TL=["web-client","server"],CL=z.enum(TL),RL=["method","meta","component"],kL=z.enum(RL),EL=["ts","python","java","csharp","rust"];z.enum(EL);var wL=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),AL=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:kL,appliesTo:z.array(CL).min(1),composes:z.string().min(1).optional(),perLanguage:wL.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),OL=z.object({version:z.number().int().positive(),functions:z.array(AL).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 s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});OL.parse({version:2,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client","server"],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","server"],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:"evaluate",aliases:[],kind:"method",appliesTo:["server"],description:"Batch-evaluate placements + entitlements for a user, returning a serializable payload the client SDK can hydrate."},{canonical:"getTrialStatus",aliases:[],kind:"method",appliesTo:["server"],description:"Fetch the user's trial status for server-side gating."},{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 jL=[{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 FL(){let t=[];for(let[e,n]of Object.entries(WS))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function LL(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(LL([...FL(),...jL]));var EP=createContext(Nr);function ag({theme:t,children:e}){return jsx(EP.Provider,{value:t,children:e})}function Tn(){return useContext(EP)}var ML={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 24px",lineHeight:"1.5",zIndex:9990,width:"100%",boxSizing:"border-box"},NL={display:"flex",flexDirection:"column",gap:"2px",flex:1},zL={display:"flex",alignItems:"center",gap:"8px",marginLeft:"16px",flexShrink:0};function Ka({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(false),[p,v]=useState(i);i&&!p&&b(false),i!==p&&v(i);let P=t.position||"top",S=t.dismissible!==false,y=useCallback(()=>{b(true),n();},[n]),T=useCallback(()=>{b(true),r?.();},[r]),E=useMemo(()=>{let{colors:A,typography:k,shape:O}=o;return {banner:{...ML,backgroundColor:A.primary,color:A.primaryText,fontFamily:k.fontFamily,fontSize:k.fontSize,position:"sticky",...P==="bottom"?{bottom:0}:{top:0}},header:{fontWeight:600,fontSize:"15px"},body:{opacity:.9},cta:{padding:"6px 16px",backgroundColor:A.primaryText,color:A.primary,border:"none",borderRadius:O.borderRadiusSmall,fontWeight:600,fontSize:k.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap"},dismiss:{padding:"4px 8px",background:"transparent",border:"none",color:A.primaryText,fontSize:"18px",cursor:"pointer",opacity:.7,lineHeight:1},remind:{padding:"4px 8px",background:"transparent",border:"none",color:A.primaryText,fontSize:k.fontSizeSmall,fontWeight:500,cursor:"pointer",opacity:.85,whiteSpace:"nowrap"}}},[o,P]);return !i||l?null:jsxs("div",{className:s,style:{...E.banner,...a},role:"banner","data-rt-placement":"banner",children:[jsxs("div",{style:NL,children:[t.header&&jsx("div",{style:E.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:E.body,children:t.body||t.message})]}),jsxs("div",{style:zL,children:[t.cta_label&&jsx("button",{type:"button",style:E.cta,onClick:e,children:t.cta_label}),r&&S&&jsx("button",{type:"button",style:E.remind,onClick:T,"data-rt-action":"remind-later",children:"Remind me later"}),S&&jsx("button",{type:"button",style:E.dismiss,onClick:y,"aria-label":"Dismiss",children:"\xD7"})]})]})}Ka.displayName="BannerSlot";var GL={position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999},$L={width:"100%",maxHeight:"200px",objectFit:"cover",marginBottom:"16px"},WL={display:"flex",gap:"12px",justifyContent:"flex-end"};function Ga({content:t,onCtaClick:e,onSecondaryCtaClick:n,onDismiss:r,onRemindLater:i,visible:s,className:a,style:o}){let l=Tn(),b=useRef(null),p=t.style||"optional",[v,P]=useState(false),S=useRef(s);useEffect(()=>{s&&!S.current&&P(false),S.current=s;},[s]);let y=useCallback(()=>{P(true),r();},[r]),T=useCallback(()=>{P(true),i?.();},[i]),E=useCallback(O=>{p==="optional"&&O.target===O.currentTarget&&y();},[p,y]),A=useCallback(O=>{O.key==="Escape"&&p==="optional"&&y();},[p,y]);useEffect(()=>{if(s)return document.addEventListener("keydown",A),b.current?.focus(),()=>document.removeEventListener("keydown",A)},[s,A]);let k=useMemo(()=>{let{colors:O,typography:R,shape:C,shadows:D}=l;return {overlay:{...GL,backgroundColor:O.overlay,fontFamily:R.fontFamily},dialog:{position:"relative",maxWidth:"480px",width:"90%",backgroundColor:O.background,borderRadius:C.borderRadiusLarge,boxShadow:D.large,padding:"32px",boxSizing:"border-box"},close:{position:"absolute",top:"12px",right:"12px",background:"transparent",border:"none",fontSize:"20px",color:O.textMuted,cursor:"pointer",padding:"4px 8px",lineHeight:1},image:{...$L,borderRadius:C.borderRadius},header:{fontSize:R.fontSizeHeader,fontWeight:700,color:O.text,marginBottom:"8px",lineHeight:1.3},body:{fontSize:"15px",color:O.textSecondary,lineHeight:1.6,marginBottom:"24px"},primaryBtn:{padding:"10px 24px",backgroundColor:O.primary,color:O.primaryText,border:"none",borderRadius:C.borderRadius,fontWeight:600,fontSize:R.fontSize,cursor:"pointer"},secondaryBtn:{padding:"10px 24px",backgroundColor:"transparent",color:O.textSecondary,border:`1px solid ${O.surfaceBorder}`,borderRadius:C.borderRadius,fontWeight:500,fontSize:R.fontSize,cursor:"pointer"},remindBtn:{padding:"10px 16px",backgroundColor:"transparent",color:O.textMuted,border:"none",borderRadius:C.borderRadius,fontWeight:500,fontSize:R.fontSize,cursor:"pointer",marginRight:"auto"}}},[l]);return !s||v?null:jsx("div",{style:k.overlay,onClick:E,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:b,className:a,style:{...k.dialog,...o},tabIndex:-1,children:[p==="optional"&&jsx("button",{type:"button",style:k.close,onClick:y,"aria-label":"Close",children:"\xD7"}),t.image_url&&jsx("img",{src:t.image_url,alt:"",style:k.image}),t.header&&jsx("div",{style:k.header,children:t.header}),t.body&&jsx("div",{style:k.body,children:t.body}),jsxs("div",{style:WL,children:[i&&p==="optional"&&jsx("button",{type:"button",style:k.remindBtn,onClick:T,"data-rt-action":"remind-later",children:"Remind me later"}),t.secondary_cta_label&&n&&jsx("button",{type:"button",style:k.secondaryBtn,onClick:n,children:t.secondary_cta_label}),t.cta_label&&jsx("button",{type:"button",style:k.primaryBtn,onClick:e,children:t.cta_label})]})]})})}Ga.displayName="ModalSlot";var YL={width:"100%",maxHeight:"180px",objectFit:"cover",marginBottom:"12px"};function pd({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn(),a=useMemo(()=>{let{colors:o,typography:l,shape:b}=s;return {container:{backgroundColor:o.surface,border:`1px solid ${o.surfaceBorder}`,borderRadius:b.borderRadius,padding:"20px",fontFamily:l.fontFamily,boxSizing:"border-box"},header:{fontSize:"16px",fontWeight:600,color:o.text,marginBottom:"6px",lineHeight:1.4},body:{fontSize:l.fontSize,color:o.textSecondary,lineHeight:1.6,marginBottom:"16px"},image:{...YL,borderRadius:b.borderRadiusSmall},cta:{padding:"8px 20px",backgroundColor:o.primary,color:o.primaryText,border:"none",borderRadius:b.borderRadiusSmall,fontWeight:600,fontSize:l.fontSizeSmall,cursor:"pointer"}}},[s]);return n?jsxs("div",{className:r,style:{...a.container,...i},"data-rt-placement":"inline-embed",children:[t.image_url&&jsx("img",{src:t.image_url,alt:"",style:a.image}),t.header&&jsx("div",{style:a.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:a.body,children:t.body||t.message}),t.cta_label&&jsx("button",{type:"button",style:a.cta,onClick:e,children:t.cta_label})]}):null}pd.displayName="InlineEmbedSlot";function Ds(t){return jsx(pd,{...t})}Ds.displayName="InPageSlot";var UP={"top-right":{top:"16px",right:"16px"},"bottom-right":{bottom:"16px",right:"16px"},"bottom-center":{bottom:"16px",left:"50%",transform:"translateX(-50%)"}},tB={position:"absolute",zIndex:9995,maxWidth:"380px",width:"90%",lineHeight:1.5,display:"flex",alignItems:"center",gap:"12px",boxSizing:"border-box"},nB={flex:1};function $a({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(i),[p,v]=useState(i);i&&!p&&b(true),i!==p&&v(i);let P=t.position||"bottom-right",S=typeof t.duration=="number"?t.duration:5,y=useCallback(()=>{b(false),n();},[n]),T=useCallback(()=>{b(false),r?.();},[r]);useEffect(()=>{if(!l||S<=0)return;let k=setTimeout(()=>{y();},S*1e3);return ()=>clearTimeout(k)},[l,S,y]);let E=useMemo(()=>{let{colors:k,typography:O,shape:R,shadows:C}=o;return {container:{...tB,backgroundColor:k.toastBackground,color:k.toastText,borderRadius:R.borderRadius,boxShadow:C.medium,padding:"14px 18px",fontFamily:O.fontFamily,fontSize:O.fontSize},cta:{color:k.info,background:"transparent",border:"none",fontWeight:600,fontSize:O.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap",textDecoration:"underline",padding:0},close:{background:"transparent",border:"none",color:k.textMuted,fontSize:"16px",cursor:"pointer",padding:"2px 4px",lineHeight:1,flexShrink:0},remind:{background:"transparent",border:"none",color:k.textMuted,fontSize:O.fontSizeSmall,fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",padding:"2px 4px",flexShrink:0}}},[o]);if(!l)return null;let A=UP[P]??UP["bottom-right"];return jsxs("div",{className:s,style:{...E.container,...A,...a},role:"status","aria-live":"polite","data-rt-placement":"toast",children:[jsx("div",{style:nB,children:t.message||t.body||t.header}),t.cta_label&&jsx("button",{type:"button",style:E.cta,onClick:e,children:t.cta_label}),r&&jsx("button",{type:"button",style:E.remind,onClick:T,"data-rt-action":"remind-later",children:"Later"}),jsx("button",{type:"button",style:E.close,onClick:y,"aria-label":"Close",children:"\xD7"})]})}$a.displayName="ToastSlot";function Wa({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn();if(!n)return null;let a=t.style||"primary",o={padding:"8px 20px",border:"none",borderRadius:s.shape.borderRadiusSmall,fontWeight:600,fontSize:s.typography.fontSize,cursor:"pointer",fontFamily:s.typography.fontFamily,whiteSpace:"nowrap",lineHeight:1.4},l={primary:{...o,backgroundColor:s.colors.primary,color:s.colors.primaryText},secondary:{...o,backgroundColor:s.colors.secondary,color:s.colors.secondaryText,border:`1px solid ${s.colors.surfaceBorder}`},accent:{...o,backgroundColor:s.colors.accent,color:s.colors.accentText}},b=l[a]??l.primary;return jsx("button",{type:"button",className:r,style:{...b,...i},onClick:e,"data-rt-placement":"button",children:t.cta_label||"Upgrade"})}Wa.displayName="ButtonSlot";function ug(t){if(typeof t.usage_percent=="number")return t.usage_percent;let e=typeof t.usage_current=="number"?t.usage_current:0,n=typeof t.usage_limit=="number"?t.usage_limit:100;return n>0?Math.min(100,Math.round(e/n*100)):0}function VP(t,e){return t>=90?e.colors.danger:t>=70?e.colors.warning:e.colors.primary}function sB({content:t,theme:e}){let n=ug(t),r=t.usage_current??n,i=t.usage_limit??100;return jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted,marginBottom:"8px",display:"flex",justifyContent:"space-between",alignItems:"baseline"},children:[jsx("span",{children:typeof t.header=="string"?t.header:"Usage"}),jsxs("span",{style:{fontWeight:600,color:e.colors.text},children:[String(r)," / ",String(i)]})]}),jsx("div",{style:{width:"100%",height:"8px",backgroundColor:e.colors.track,borderRadius:e.shape.borderRadiusSmall,overflow:"hidden",marginBottom:"12px"},children:jsx("div",{style:{height:"100%",borderRadius:e.shape.borderRadiusSmall,transition:"width 0.3s ease",width:`${Math.min(100,n)}%`,backgroundColor:VP(n,e)}})})]})}function aB({content:t,theme:e}){let n=t.usage_current??0,r=t.usage_limit??100;return jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:"24px",fontWeight:700,color:e.colors.text,marginBottom:"4px"},children:[String(n)," / ",String(r)]}),jsx("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted,marginBottom:"12px"},children:typeof t.header=="string"?t.header:"Usage"})]})}var Ki=80,cg=8,dg=(Ki-cg)/2,lg=2*Math.PI*dg;function oB({content:t,theme:e}){let n=ug(t),r=t.usage_current??n,i=t.usage_limit??100,s=lg-n/100*lg,a=VP(n,e);return jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",marginBottom:"12px"},children:[jsxs("svg",{width:Ki,height:Ki,style:{flexShrink:0},children:[jsx("circle",{cx:Ki/2,cy:Ki/2,r:dg,fill:"none",stroke:e.colors.track,strokeWidth:cg}),jsx("circle",{cx:Ki/2,cy:Ki/2,r:dg,fill:"none",stroke:a,strokeWidth:cg,strokeLinecap:"round",strokeDasharray:lg,strokeDashoffset:s,transform:`rotate(-90 ${Ki/2} ${Ki/2})`,style:{transition:"stroke-dashoffset 0.3s ease"}}),jsxs("text",{x:Ki/2,y:Ki/2+1,textAnchor:"middle",dominantBaseline:"central",fontSize:"16",fontWeight:"700",fill:e.colors.text,children:[n,"%"]})]}),jsxs("div",{children:[jsxs("div",{style:{fontSize:e.typography.fontSize,fontWeight:600,color:e.colors.text},children:[String(r)," / ",String(i)]}),jsx("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted},children:typeof t.header=="string"?t.header:"Usage"})]})]})}function Bl({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn();if(!n)return null;let a=t.display_style||"progress_bar",o=typeof t.show_at=="number"?t.show_at:0,l=ug(t);if(o>0&&l<o)return null;let b={backgroundColor:s.colors.surface,border:`1px solid ${s.colors.surfaceBorder}`,borderRadius:s.shape.borderRadius,padding:"16px 20px",fontFamily:s.typography.fontFamily,boxSizing:"border-box"},p={padding:"6px 16px",backgroundColor:s.colors.primary,color:s.colors.primaryText,border:"none",borderRadius:s.shape.borderRadiusSmall,fontWeight:600,fontSize:s.typography.fontSizeSmall,cursor:"pointer"};return jsxs("div",{className:r,style:{...b,...i},"data-rt-placement":"quota-meter",children:[a==="numeric_counter"?jsx(aB,{content:t,theme:s}):a==="circular_gauge"?jsx(oB,{content:t,theme:s}):jsx(sB,{content:t,theme:s}),t.cta_label&&jsx("button",{type:"button",style:p,onClick:e,children:t.cta_label})]})}Bl.displayName="QuotaMeterSlot";var lB={maxWidth:"800px",margin:"0 auto",padding:"40px 24px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},cB={fontSize:"28px",fontWeight:700,color:"#111827",textAlign:"center",marginBottom:"12px",lineHeight:1.3},dB={fontSize:"16px",color:"#4b5563",textAlign:"center",lineHeight:1.6,marginBottom:"32px",maxWidth:"600px",marginLeft:"auto",marginRight:"auto"},uB={display:"flex",justifyContent:"center",gap:"16px"},mB={padding:"12px 32px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"8px",fontWeight:600,fontSize:"16px",cursor:"pointer"},pB={padding:"12px 32px",backgroundColor:"transparent",color:"#4b5563",border:"1px solid #d1d5db",borderRadius:"8px",fontWeight:500,fontSize:"16px",cursor:"pointer"};function Ul({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){return r?jsxs("div",{className:i,style:{...lB,...s},"data-rt-placement":"full-page",children:[t.header&&jsx("h1",{style:cB,children:t.header}),t.body&&jsx("p",{style:dB,children:t.body}),jsxs("div",{style:uB,children:[t.cta_label&&jsx("button",{type:"button",style:mB,onClick:e,children:t.cta_label}),t.secondary_cta_label&&n&&jsx("button",{type:"button",style:pB,onClick:n,children:t.secondary_cta_label})]})]}):null}Ul.displayName="FullPageSlot";var fB={backgroundColor:"#1e1e1e",color:"#d4d4d4",fontFamily:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',fontSize:"13px",lineHeight:1.6,padding:"16px 20px",borderRadius:"6px",boxSizing:"border-box"},hB={whiteSpace:"pre-wrap",marginBottom:"12px"},gB={display:"flex",gap:"16px"},MP={color:"#569cd6",background:"transparent",border:"none",cursor:"pointer",fontFamily:"inherit",fontSize:"inherit",padding:0,textDecoration:"underline"};function fd({content:t,onCtaClick:e,visible:n,className:r,style:i}){if(!n)return null;let s=t.message||t.body||"",a=t.action_links,o=Array.isArray(a)?a.filter(l=>typeof l=="string"):[];return jsxs("div",{className:r,style:{...fB,...i},"data-rt-placement":"cli",children:[s&&jsx("div",{style:hB,children:s}),(o.length>0||t.cta_label)&&jsxs("div",{style:gB,children:[t.cta_label&&jsx("button",{type:"button",style:MP,onClick:e,children:t.cta_label}),o.map(l=>jsx("button",{type:"button",style:MP,onClick:e,children:l},l))]})]})}fd.displayName="CliSlot";var _B={backgroundColor:"#ffffff",border:"1px solid #e2e8f0",borderRadius:"8px",padding:"16px 20px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},bB={display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"4px"},yB={fontSize:"13px",color:"#6b7280"},vB={fontSize:"28px",fontWeight:700,color:"#111827"},xB={fontSize:"12px",color:"#9ca3af",marginBottom:"12px"},SB={width:"100%",height:"6px",backgroundColor:"#e5e7eb",borderRadius:"3px",overflow:"hidden",marginBottom:"12px"},PB={height:"100%",borderRadius:"3px",transition:"width 0.3s ease"},IB={display:"flex",gap:"8px"},TB={padding:"6px 16px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"6px",fontWeight:600,fontSize:"13px",cursor:"pointer"};function CB(t,e){if(e<=0)return "#1e40af";let n=t/e*100;return n<=10?"#dc2626":n<=25?"#f59e0b":"#1e40af"}function hd({content:t,onCtaClick:e,visible:n,className:r,style:i}){if(!n)return null;let s=typeof t.credits_remaining=="number"?t.credits_remaining:0,a=typeof t.credits_total=="number"?t.credits_total:s,o=typeof t.show_at=="number"?t.show_at:0,l=t.show_burn_rate===true,b=t.display_style||"numeric_balance";if(o>0&&s>o)return null;let p=a>0?s/a*100:0;return jsxs("div",{className:r,style:{..._B,...i},"data-rt-placement":"credit-balance",children:[jsxs("div",{style:bB,children:[jsx("span",{style:yB,children:typeof t.header=="string"?t.header:"Credits Remaining"}),jsx("span",{style:vB,children:String(s)})]}),l&&typeof t.burn_rate_label=="string"&&jsx("div",{style:xB,children:t.burn_rate_label}),(b==="balance_bar"||b==="balance_burn_rate")&&a>0&&jsx("div",{style:SB,children:jsx("div",{style:{...PB,width:`${Math.min(100,p)}%`,backgroundColor:CB(s,a)}})}),jsx("div",{style:IB,children:t.cta_label&&jsx("button",{type:"button",style:TB,onClick:e,children:t.cta_label})})]})}hd.displayName="CreditBalanceSlot";var kB={position:"absolute",top:"16px",right:"16px"};function EB(t,e,n){return e==="top"?{position:"fixed",left:`${t.left+t.width/2}px`,top:`${t.top-n}px`,transform:"translate(-50%, -100%)"}:e==="left"?{position:"fixed",left:`${t.left-n}px`,top:`${t.top+t.height/2}px`,transform:"translate(-100%, -50%)"}:e==="right"?{position:"fixed",left:`${t.left+t.width+n}px`,top:`${t.top+t.height/2}px`,transform:"translate(0, -50%)"}:{position:"fixed",left:`${t.left+t.width/2}px`,top:`${t.top+t.height+n}px`,transform:"translate(-50%, 0)"}}function gd({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(false),[p,v]=useState(null),P=t.anchor_selector||void 0,S=t.position||"top",y=typeof t.anchor_gap=="number"?t.anchor_gap:10,T=useCallback(()=>{if(!P||typeof window>"u"){v(null);return}let R=window.document.querySelector(P);if(!R){v(null);return}let C=R.getBoundingClientRect();v({top:C.top,left:C.left,width:C.width,height:C.height});},[P]);useEffect(()=>{i&&b(false);},[i]),useEffect(()=>{if(!i||(T(),typeof window>"u"))return;let R=()=>T();return window.addEventListener("resize",R),window.addEventListener("scroll",R,true),()=>{window.removeEventListener("resize",R),window.removeEventListener("scroll",R,true);}},[i,T]);let E=useCallback(()=>{b(true),n();},[n]),A=useCallback(()=>{b(true),r?.();},[r]),k=useMemo(()=>{let{colors:R,typography:C,shape:D,shadows:ae}=o;return {container:{zIndex:9996,maxWidth:"320px",width:"max-content",lineHeight:1.45,display:"flex",flexDirection:"column",gap:"10px",boxSizing:"border-box",backgroundColor:R.toastBackground,color:R.toastText,borderRadius:D.borderRadius,boxShadow:ae.medium,padding:"12px 14px",fontFamily:C.fontFamily,fontSize:C.fontSizeSmall},body:{margin:0},actions:{display:"flex",alignItems:"center",gap:"10px"},cta:{color:R.info,background:"transparent",border:"none",fontWeight:600,fontSize:C.fontSizeSmall,cursor:"pointer",textDecoration:"underline",padding:0},close:{marginLeft:"auto",background:"transparent",border:"none",color:R.textMuted,fontSize:"14px",cursor:"pointer",lineHeight:1,padding:"2px 4px"},remind:{background:"transparent",border:"none",color:R.textMuted,fontSize:C.fontSizeSmall,fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",padding:"2px 4px"}}},[o]);if(!i||l)return null;let O=p?EB(p,S,y):kB;return jsxs("div",{className:s,style:{...k.container,...O,...a},role:"status","aria-live":"polite","data-rt-placement":"tooltip",children:[jsx("p",{style:k.body,children:t.message||t.body||t.header}),jsxs("div",{style:k.actions,children:[t.cta_label&&jsx("button",{type:"button",style:k.cta,onClick:e,children:t.cta_label}),r&&jsx("button",{type:"button",style:k.remind,onClick:A,"data-rt-action":"remind-later",children:"Later"}),jsx("button",{type:"button",style:k.close,onClick:E,"aria-label":"Close tooltip",children:"\xD7"})]})]})}gd.displayName="TooltipSlot";function AB(t){return t==="connected"?"#22c55e":t==="pending"?"#f59e0b":"#ef4444"}function OB(t){return t==="connected"?"Connected":t==="pending"?"Pending":"Disconnected"}function _d({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn(),a=t.connection_state||"disconnected",o=useMemo(()=>{let{colors:l,typography:b,shape:p,shadows:v}=s;return {card:{backgroundColor:l.surface,border:`1px solid ${l.surfaceBorder}`,borderRadius:p.borderRadius,boxShadow:v.medium,padding:"16px",display:"flex",flexDirection:"column",gap:"12px",fontFamily:b.fontFamily,maxWidth:"420px"},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px"},heading:{margin:0,color:l.text,fontSize:"15px",fontWeight:600},body:{margin:0,color:l.textSecondary,fontSize:b.fontSizeSmall,lineHeight:1.45},badge:{display:"inline-flex",alignItems:"center",gap:"6px",borderRadius:"999px",border:`1px solid ${l.surfaceBorder}`,padding:"3px 8px",fontSize:"12px",color:l.textSecondary},dot:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:AB(a)},cta:{alignSelf:"flex-start",backgroundColor:l.primary,color:l.primaryText,border:"none",borderRadius:p.borderRadiusSmall,padding:"7px 12px",fontWeight:600,fontSize:b.fontSizeSmall,cursor:"pointer"}}},[s,a]);return n?jsxs("section",{className:r,style:{...o.card,...i},"data-rt-placement":"agent-connector",children:[jsxs("div",{style:o.row,children:[jsx("h3",{style:o.heading,children:t.header||"Connect your assistant"}),jsxs("span",{style:o.badge,children:[jsx("span",{style:o.dot}),OB(a)]})]}),jsx("p",{style:o.body,children:t.body||"Enable your agent connector to automate premium workflows."}),t.cta_label&&jsx("button",{type:"button",style:o.cta,onClick:e,children:t.cta_label})]}):null}_d.displayName="AgentConnectorSlot";var yd=(t,e="")=>t==null||t===""?e:String(t);function FB(t){let e=[];return t.cta_label&&e.push({kind:"primary",label:t.cta_label}),t.secondary_cta_label&&e.push({kind:"secondary",label:t.secondary_cta_label}),e}var hg={fontSize:"10px",textTransform:"uppercase",letterSpacing:"0.05em",color:"#94a3b8"};function gg({content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:r,accentText:i}){let s=FB(t);if(s.length===0)return null;let a={padding:"5px 12px",borderRadius:"6px",fontSize:"12px",fontWeight:600,cursor:"pointer",whiteSpace:"nowrap"};return jsx("div",{style:{display:"flex",gap:"8px",marginTop:"8px",alignItems:"center"},children:s.map(o=>o.kind==="primary"?jsx("button",{type:"button","data-rt-cta":"primary",onClick:e,style:{...a,backgroundColor:r,color:i,border:"none"},children:o.label},"primary"):n&&jsx("button",{type:"button","data-rt-cta":"secondary",onClick:n,style:{...a,backgroundColor:"transparent",color:r,border:`1px solid ${r}`},children:o.label},"secondary"))})}function _g(){let t=Tn();return useMemo(()=>({accent:t.colors.primary,accentText:t.colors.primaryText}),[t])}function bm({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"email",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",...s},children:[jsxs("div",{style:{borderBottom:"1px solid #f1f5f9",padding:"8px 12px"},children:[jsx("p",{style:{...hg,margin:0},children:"Email preview"}),jsx("p",{style:{margin:"2px 0 0",fontSize:"14px",fontWeight:600,color:"#1e293b"},children:yd(t.subject,"(no subject)")})]}),jsxs("div",{style:{padding:"8px 12px",fontSize:"12px",color:"#475569",whiteSpace:"pre-wrap"},children:[yd(t.body,"(empty body)"),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]})]}):null}bm.displayName="EmailPreviewSlot";function ym({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"sms",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",padding:"12px",...s},children:[jsx("p",{style:{...hg,margin:0},children:"SMS preview"}),jsx("div",{style:{display:"inline-block",maxWidth:"85%",marginTop:"4px",borderRadius:"16px",backgroundColor:"#dcfce7",padding:"8px 12px",fontSize:"12px",color:"#1e293b"},children:yd(t.body??t.message,"(empty message)")}),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]}):null}ym.displayName="SmsPreviewSlot";function vm({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"push",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",padding:"12px",boxShadow:"0 1px 2px rgba(0,0,0,0.05)",...s},children:[jsx("p",{style:{...hg,margin:0},children:"Push preview"}),jsx("p",{style:{margin:"4px 0 0",fontSize:"14px",fontWeight:600,color:"#1e293b"},children:yd(t.header??t.title,"(no title)")}),jsx("p",{style:{margin:0,fontSize:"12px",color:"#475569"},children:yd(t.body,"(empty body)")}),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]}):null}vm.displayName="PushPreviewSlot";function bg(t){t.register({id:"banner",label:"Banner",description:"Full-width banner placement at the top or bottom of the page.",surfaceType:"banner",component:Ka,defaultProps:{content:{position:"top",dismissible:true}}}),t.register({id:"modal",label:"Modal Overlay",description:"Centered overlay dialog. Supports optional (dismissible) and blocking modes.",surfaceType:"modal",component:Ga}),t.register({id:"in_page",label:"Inline Embed",description:"Content card or message embedded in the page flow.",surfaceType:"in_page",component:Ds}),t.register({id:"plans_cta",label:"Plans CTA",description:"Pricing page CTA-focused module with concise upgrade actions.",surfaceType:"in_page",component:Ds,priority:30,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["plans_cta","pricing_page_cta","plans_pricing_cta"].includes(e.surface.template)}),t.register({id:"plans_full",label:"Plans Full Page",description:"Dedicated plans and pricing full-page experience.",surfaceType:"full_page",component:Ul,priority:30,accepts:e=>typeof e.surface.template=="string"&&["plans_full","pricing_page_full","plans_pricing_full"].includes(e.surface.template)}),t.register({id:"inline_gate_message",label:"Inline Gate Message",description:"Inline entitlement gate message with upgrade CTA.",surfaceType:"in_page",component:Ds,priority:40,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["inline_gate_message","inline_feature_gate","feature_gate_inline"].includes(e.surface.template)}),t.register({id:"tooltip",label:"Tooltip",description:"Compact tooltip-like guidance near a feature surface.",surfaceType:"toast",component:gd,priority:50,accepts:e=>{let n=typeof e.surface.template=="string"?e.surface.template:"";return n==="tooltip"||n==="feature_tooltip"||n==="inline_tooltip"},defaultProps:{content:{position:"top-right",duration:0}}}),t.register({id:"toast",label:"Toast Notification",description:"Small transient notification that auto-dismisses.",surfaceType:"toast",component:$a,defaultProps:{content:{position:"bottom-right",duration:5}}}),t.register({id:"button",label:"Button",description:"Persistent button in the product navigation or UI.",surfaceType:"button",component:Wa,defaultProps:{content:{style:"primary"}}}),t.register({id:"full_page",label:"Full Page",description:"Dedicated managed page (e.g. plans & pricing).",surfaceType:"full_page",component:Ul}),t.register({id:"quota_meter",label:"Quota Meter",description:"Visual usage meter with upgrade CTA. Triggers at configurable threshold.",surfaceType:"in_page",component:Bl,accepts:e=>e.surface.type==="in_page"&&(e.surface.template==="quota_meter"||e.surface.template==="quota_meter_counter_upgrade_button")}),t.register({id:"trial_counter",label:"Trial Counter",description:"Trial countdown/counter with conversion CTA.",surfaceType:"in_page",component:Bl,priority:35,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["trial_counter","trial_countdown","trial_days_counter"].includes(e.surface.template),defaultProps:{content:{display_style:"numeric_counter"}}}),t.register({id:"cli",label:"CLI Message",description:"Message in a CLI or chat-style interface with action links.",surfaceType:"cli",component:fd}),t.register({id:"email",label:"Email Preview",description:"Static email channel preview (subject + body + CTAs).",surfaceType:"email",component:bm}),t.register({id:"sms",label:"SMS Preview",description:"Static SMS channel preview (message bubble + CTAs).",surfaceType:"sms",component:ym}),t.register({id:"push",label:"Push Preview",description:"Static push-notification channel preview (title + body + CTAs).",surfaceType:"push",component:vm}),t.register({id:"agent_connector",label:"Agent Connector",description:"Agent-surface placement for assistant/connector experiences.",surfaceType:"agent",component:_d,priority:30,accepts:e=>{let n=typeof e.surface.template=="string"?e.surface.template:"";return e.surface.type==="agent"||n==="agent_connector"}}),t.register({id:"credit_balance",label:"Credit Balance Counter",description:"Depleting credit balance display with purchase/upgrade CTA.",surfaceType:"in_page",component:hd,accepts:e=>e.surface.type==="in_page"&&(e.surface.template==="credit_balance_counter"||e.surface.template==="credit_balance")});}lS(bg);var yg=createContext({sdk:null,isReady:false,error:"",setContext:()=>{}});function ai(){return useContext(yg)}var qB=[];function _9({options:t,bootstrapPlacements:e,domCapture:n,children:r}){let i=e??qB,[s,a]=useState(null),[o,l]=useState(false),[b,p]=useState(""),[v,P]=useState(Nr),[S,y]=useState(0),T=useRef(null),E=useRef(null);useEffect(()=>{if(Fg()){T.current=t,E.current=i;return}T.current&&T.current!==t&&console.warn("[RevTurbine] RevTurbineProvider options prop identity changed. Memoize options to avoid unnecessary SDK re-initialization."),E.current&&E.current!==i&&console.warn("[RevTurbine] RevTurbineProvider bootstrapPlacements identity changed. Memoize bootstrap arrays to avoid repeated preloads."),T.current=t,E.current=i;},[t,i]),useEffect(()=>!s||!n||typeof document>"u"?void 0:Ah(document,(R,C)=>{s.capture(R,C).catch(()=>{});},typeof n=="object"?n:{}),[s,n]),useEffect(()=>{let O=true;async function R(){let C;try{C=Jc(t);let D=t.user;D&&typeof D=="object"&&D.id&&C.identify(D.id,D);let Me=hl(t.localRuntime)?.theme,L=Me&&typeof Me=="object"?Me:void 0;if(t.fetchThemeOverride){let Ae=C,Oe=await gl({tenantId:t.tenantId??"local",endpoint:t.endpoint??"https://api.revturbine.local",apiKey:t.apiKey??"local-only",base:L,onOverride:lt=>{Ae.setApiBranding(lt&&Object.keys(lt).length>0?{theme:lt}:void 0);}},lt=>{O&&P(lt);});O&&P(Oe);}else O&&P(Bs(L));let J=C.getUserContext().user_id,ge=[];for(let Ae of i){let Oe=await C.registerPlacement(Ae.placement),lt=Ae.userId||J;lt&&ge.push({placementId:Oe,userId:lt,contextMode:Ae.contextMode,overrides:Ae.overrides,traits:Ae.traits,ttlMs:Ae.ttlMs});}if(ge.length>0&&await C.bootstrapPlacementDecisions(ge),!O)return;a(C),l(!0);}catch(D){if(!O)return;console.error("[RevTurbine] SDK provider initialization failed:",D);let ae=D instanceof Error?D.message:String(D);C?.reportSdkError("provider_init_failed",ae),p(`Failed to initialize RevTurbine SDK provider: ${ae}`),l(false);}}return R(),()=>{O=false;}},[t,i]);let A=useCallback(O=>{s&&(s.setUserContext(O),y(R=>R+1));},[s]),k=useMemo(()=>({sdk:s,isReady:o,error:b,setContext:A}),[s,o,b,A,S]);return jsx(yg.Provider,{value:k,children:jsx(ag,{theme:v,children:r})})}function Sm({placement:t,surfaceSlot:e,userId:n,contextMode:r="auto",overrides:i,traits:s,ttlMs:a,autoLoad:o=true,autoTrackImpression:l,placementExposure:b}){let{sdk:p,isReady:v}=ai(),[,P]=useState(0),S=useRef(null),y=useRef(null),T=n||(p?p.getUserContext().user_id:""),E=useMemo(()=>JSON.stringify({placement:t??null,surfaceSlot:e??null}),[t,e]);useEffect(()=>{if(!p){S.current=null;return}let C=new _l(p,{placement:t??void 0,surfaceSlot:e??void 0,userId:T||void 0,contextMode:r,overrides:i,traits:s,ttlMs:a,autoTrackImpression:l,placementExposure:b});S.current=C,P(ae=>ae+1);let D=C.onChange(()=>{P(ae=>ae+1);});return ()=>{D(),S.current=null;}},[p,E]),useEffect(()=>{S.current;},[T,r,i,s,a,p]);let A=useCallback(async()=>{let C=S.current;!C||!v||!T||await C.load();},[v,T]);useEffect(()=>{o&&A();},[o,A]);let k=useCallback(C=>{y.current?.(),y.current=null,C&&(S.current?.markRendered(),y.current=Na.observe(C,{},D=>{S.current?.markVisible(D);}));},[]);useEffect(()=>()=>{y.current?.(),y.current=null;},[]);let O=S.current,R=O?.state;return {isLoading:R?.isLoading??false,error:R?.error??"",placementId:R?.placementId??"",visible:R?.visible??false,decision:R?.decision??null,content:R?.content??null,refresh:async()=>{await O?.refresh();},dismiss:async(C=1440*60*1e3)=>{await O?.dismiss(C);},snooze:async(C=3600)=>{await O?.snooze(C);},remindMeLater:async(C=3600)=>{await O?.remindMeLater(C);},ctaClick:async C=>{await O?.ctaClick(C);},ctaComplete:async C=>{await O?.ctaComplete(C);},exposureRef:k,exposureBasis:R?.exposureBasis??null}}function NB({placement:t,userId:e,contextMode:n,overrides:r,traits:i,ttlMs:s,autoLoad:a,fallback:o=null,children:l}){let b=Sm({placement:t,userId:e,contextMode:n,overrides:r,traits:i,ttlMs:s,autoLoad:a});return b.visible?jsx(Fragment,{children:l(b)}):jsx(Fragment,{children:o})}function Tm({placement:t,personalization:e={},registry:n,ctaResolvers:r,onCtaClick:i,onSecondaryCtaClick:s,onDismiss:a,onRemindLater:o,onImpression:l,exposureRef:b,visible:p=true,className:v,style:P,fallback:S=null}){let y=n??Vu(),T=r??Ma(),E=useRef(false),A=useMemo(()=>y.resolve(t),[y,t]),k=useMemo(()=>fl(t.content,e),[t.content,e]),O=useMemo(()=>Bu(t.cta_path??t.ui_path??{}),[t.cta_path,t.ui_path]),R=useMemo(()=>Uu(t.promotion),[t.promotion]),C=useCallback(()=>{Mu(O,{placement:t,kind:"primary"},T,i);},[O,t,T,i]),D=useCallback(()=>{Mu(O,{placement:t,kind:"secondary"},T,s);},[O,t,T,s]),ae=useCallback(()=>{a?.(t.output_id);},[a,t.output_id]),Me=useCallback(()=>{o?.(t.output_id);},[o,t.output_id]);if(useEffect(()=>{p&&A&&!E.current&&(E.current=true,l?.(t.output_id));},[p,A,l,t.output_id]),!A)return jsx(Fragment,{children:S});let L=A.component,J=A.defaultProps?.content,ge=J?{...J,...k}:k,Ae={placement:t,content:ge,uiPath:O,promotion:R,onCtaClick:C,onSecondaryCtaClick:D,onDismiss:ae,...o?{onRemindLater:Me}:{},...b?{exposureRef:b}:{},visible:p,className:v,style:P};return jsx(L,{...Ae})}Tm.displayName="PlacementRenderer";function xg(t){if(!t||typeof t.getTargeting!="function")return {};try{let n=t.getTargeting()?.traits;if(!n||typeof n!="object"||Array.isArray(n))return {};let r={};for(let[i,s]of Object.entries(n))typeof s=="string"||typeof s=="number"?r[i]=s:typeof s=="boolean"&&(r[i]=s?"true":"false");return r}catch{return {}}}function Sg(t,e){let n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return false;for(let i of n)if(t[i]!==e[i])return false;return true}function xd({userId:t,personalization:e,refreshKey:n}){let{sdk:r,isReady:i}=ai(),s=t||(r?r.getUserContext().user_id:void 0),[a,o]=useState({});return useEffect(()=>{let l=false;async function b(){if(!r||!i){if(!l){let p={...xg(r),...e??{}};o(v=>Sg(v,p)?v:p);}return}try{let p=await r.providerRegistry.resolveAll();if(l)return;let v=to({userId:s,providers:p,base:e}),P={...xg(r),...v};o(S=>Sg(S,P)?S:P);}catch{if(!l){let p={...xg(r),...e??{}};o(v=>Sg(v,p)?v:p);}}}return b(),()=>{l=true;}},[r,i,s,e,n]),useMemo(()=>a,[a])}function Ms(t){let{surfaceSlot:e,personalization:n,registry:r,onCtaClick:i,className:s,style:a,...o}=t,l=Sm({...o,surfaceSlot:e}),b=xd({personalization:n,refreshKey:l.decision?.requestId}),p=useCallback(y=>{l.ctaClick(y.type),i?.(y);},[l.ctaClick,i]),v=useCallback(()=>{l.dismiss();},[l.dismiss]),P=useMemo(()=>!l.decision||!l.visible?null:l.decision.output?l.decision.output:{output_id:l.placementId,category:"dynamic",surface:{type:"in_page"},content:l.content?{header:l.content.header,body:l.content.body,cta_label:l.content.cta_label}:{},cta_path:{},ui_path:{},rule_id:"",decision_id:l.decision.requestId,config_version:"",present_upsell:false},[l.decision,l.visible,l.placementId,l.content]),S=useMemo(()=>!P||!l.visible?null:jsx(Tm,{placement:P,personalization:b,registry:r,onCtaClick:p,onDismiss:v,exposureRef:l.exposureRef,visible:l.visible,className:s,style:a}),[P,l.visible,b,r,p,v,l.exposureRef,s,a]);return {...l,element:S}}function Cm({id:t,name:e,category:n,surfaceTemplateIds:r,metadata:i,fallback:s=null,...a}){let o=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:r,metadata:{...i,...n?{surface_slot_category:n}:void 0}}),[t,e,n,r,i]),{element:l,visible:b,isLoading:p}=Ms({...a,autoLoad:true,surfaceSlot:o});return p?null:!b||!l?jsx(Fragment,{children:s}):jsx(Fragment,{children:l})}Cm.displayName="SurfaceSlotComponent";function aI({id:t,name:e,surfaceTemplateIds:n=Qc,metadata:r,fallback:i=null,...s}){let a=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:n,metadata:{...r,surface_slot_category:"fixed"}}),[t,e,n,r]),{element:o,visible:l}=Ms({...s,autoLoad:true,surfaceSlot:a});return l&&o?jsx(Fragment,{children:o}):jsx(Fragment,{children:i})}aI.displayName="FixedSurfaceSlot";function Rm({handle:t,context:e,autoCheck:n=true,autoGate:r=false,gatePlacementRequest:i}){let{sdk:s,isReady:a}=ai(),[,o]=useState(0),l=useRef(null);useEffect(()=>{if(!s){l.current=null;return}let v=new bl(s,{handle:t,context:e,autoGate:r,gatePlacementRequest:i});l.current=v;let P=v.onChange(()=>{o(S=>S+1);});return ()=>{P(),l.current=null;}},[s,t]);let b=useCallback(async()=>{await l.current?.check();},[]);useEffect(()=>{n&&a&&l.current&&l.current.check();},[n,a]);let p=l.current?.state;return {isLoading:p?.isLoading??false,error:p?.error??null,result:p?.result??null,allowed:p?.allowed??false,limited:p?.limited??false,denied:p?.denied??false,gatedPlacement:p?.gatedPlacement??null,recheck:b}}function lI(){let{sdk:t,isReady:e}=ai(),[n,r]=useState(0),i=useCallback(()=>{r(a=>a+1);},[]);return useEffect(()=>{e&&i();},[e,i]),{usage:useMemo(()=>!t||!e?{}:t.getUsage(),[t,e,n]),refresh:i}}function aU(t,e){let n=[];return t&&n.push({entitlement:t}),e&&n.push(...Array.isArray(e)?e:[e]),n}function Pg({id:t,name:e,can:n,check:r,children:i,deniedFallback:s=null,limitedFallback:a,surfaceTemplateIds:o,metadata:l,onDenied:b,...p}){let v=aU(n,r),P=v.find(J=>"entitlement"in J),S=P?.entitlement??"",{result:y,isLoading:T}=Rm({handle:S,context:P?.context,autoCheck:!!S,autoGate:true}),E=v.filter(J=>"usage"in J),{usage:A}=lI(),k=E.some(J=>{let ge=A[J.usage];return !ge||ge.limit==null||ge.limit===0?false:ge.current/ge.limit*100>=J.threshold}),R=!!S&&!!y&&(y.status==="denied"||y.allowed===false)||k,C=!!S&&y?.status==="limited",D=Lm.useRef(b);D.current=b,Lm.useEffect(()=>{R&&y&&D.current?.(y);},[R,y]);let ae=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:o??ed,metadata:{...l,surface_slot_category:"gated",entitlement_handle:S??null}}),[t,e,o,l,S]),{element:Me,visible:L}=Ms({...p,autoLoad:R,surfaceSlot:ae});return T&&S?null:R?L&&Me?jsx(Fragment,{children:Me}):jsx(Fragment,{children:s}):C&&a!==void 0?jsx(Fragment,{children:a}):jsx(Fragment,{children:i})}Pg.displayName="AccessGateSurfaceSlot";var pI=Lm.forwardRef(function({id:e,name:n,trigger:r="on_mount",intervalMs:i=6e4,surfaceTemplateIds:s,metadata:a,onPresented:o,onDismissed:l,...b},p){let v=r==="on_mount"||r==="on_interval",P=useMemo(()=>({id:e,name:n||e,surfaceTemplateIds:s??td,metadata:{...a,surface_slot_category:"triggered",trigger_type:r}}),[e,n,s,a,r]),{element:S,visible:y,decision:T,refresh:E,dismiss:A}=Ms({...b,autoLoad:v,surfaceSlot:P}),k=useCallback(()=>{E();},[E]);Lm.useImperativeHandle(p,()=>({triggerEvent:k,refresh:E}),[k,E]),useEffect(()=>{if(r!=="on_interval")return;let ae=setInterval(()=>E(),i);return ()=>clearInterval(ae)},[r,i,E]);let O=useRef(false),R=useRef(o);R.current=o,useEffect(()=>{y&&T?.output&&!O.current&&(O.current=true,R.current?.(T.output)),y||(O.current=false);},[y,T]);let C=useRef(l);C.current=l;useCallback(()=>{A(),C.current?.();},[A]);return !y||!S?null:jsx(Fragment,{children:S})});pI.displayName="MessageSurfaceSlot";function gI({content:t,onCtaClick:e,onSecondaryCtaClick:n,onDismiss:r,visible:i,className:s,style:a,modalType:o,layout:l,accentColor:b,accentBg:p,dialogWidth:v,dialogHeight:P,badge:S,sideContent:y,sidePanelWidth:T=420,ctaLabel:E,secondaryCtaLabel:A,children:k}){let O=Tn(),R=useRef(null),C=o??t.style??"optional",D=l??"centered",[ae,Me]=useState(false),L=useRef(i);useEffect(()=>{i&&!L.current&&Me(false),L.current=i;},[i]);let J=useCallback(()=>{Me(true),r();},[r]),ge=useCallback(dn=>{C==="optional"&&dn.target===dn.currentTarget&&J();},[C,J]),Ae=useCallback(dn=>{dn.key==="Escape"&&C==="optional"&&J();},[C,J]);useEffect(()=>{if(i)return document.addEventListener("keydown",Ae),R.current?.focus(),()=>document.removeEventListener("keydown",Ae)},[i,Ae]);let Oe=b??O.colors.primary,lt=p??O.colors.secondary,Je=useMemo(()=>{let{colors:dn,typography:Jt,shape:Ot,shadows:Y}=O,X=D==="two_column",je=X?"1024px":"480px",Zn=v!=null?typeof v=="number"?`${v}px`:v:je,Gr=X?P!=null?typeof P=="number"?`${P}px`:P:"600px":void 0;return {overlay:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,backgroundColor:dn.overlay,fontFamily:Jt.fontFamily},dialog:{position:"relative",maxWidth:Zn,width:X?Zn:"90%",height:Gr,backgroundColor:dn.background,borderRadius:Ot.borderRadiusLarge,boxShadow:Y.large,padding:X?0:"32px",boxSizing:"border-box",display:X?"flex":void 0,overflow:X?"hidden":void 0},leftColumn:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",padding:"32px",gap:"24px"},sidePanel:{width:T,flexShrink:0,position:"relative",overflow:"hidden",backgroundColor:dn.surface},close:{position:"absolute",top:"12px",right:"12px",background:X?"rgba(255,255,255,0.8)":"transparent",border:"none",fontSize:"20px",color:dn.textMuted,cursor:"pointer",padding:"4px 8px",lineHeight:1,borderRadius:X?Ot.borderRadiusSmall:void 0,zIndex:1},image:{width:"100%",maxHeight:"200px",objectFit:"cover",marginBottom:"16px",borderRadius:Ot.borderRadius},header:{fontSize:Jt.fontSizeHeader,fontWeight:700,color:dn.text,marginBottom:"8px",lineHeight:1.3},body:{fontSize:"15px",color:dn.textSecondary,lineHeight:1.6,marginBottom:"24px"},primaryBtn:{padding:"10px 24px",backgroundColor:Oe,color:dn.primaryText,border:"none",borderRadius:Ot.borderRadius,fontWeight:600,fontSize:Jt.fontSize,cursor:"pointer"},secondaryBtn:{padding:"10px 24px",backgroundColor:"transparent",color:dn.textSecondary,border:`1px solid ${dn.surfaceBorder}`,borderRadius:Ot.borderRadius,fontWeight:500,fontSize:Jt.fontSize,cursor:"pointer"}}},[O,D,v,P,T,Oe]);if(!i||ae)return null;let Xe=E??t.cta_label,zt=A??t.secondary_cta_label,At=jsxs("div",{style:{display:"flex",gap:"12px",alignItems:"center"},children:[Xe&&jsx("button",{type:"button",style:Je.primaryBtn,onClick:e,children:Xe}),zt&&n&&jsx("button",{type:"button",style:Je.secondaryBtn,onClick:n,children:zt})]});return D==="two_column"?jsx("div",{style:Je.overlay,onClick:ge,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:R,className:s,style:{...Je.dialog,...a},tabIndex:-1,children:[jsxs("div",{style:Je.leftColumn,children:[S,t.header&&jsx("div",{style:Je.header,children:t.header}),k??(t.body&&jsx("div",{style:Je.body,children:t.body})),At]}),jsx("div",{style:Je.sidePanel,children:y??(t.image_url?jsx("img",{src:t.image_url,alt:"",style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover"}}):jsx("div",{style:{position:"absolute",inset:0,background:`linear-gradient(135deg, ${lt} 0%, ${Oe}44 100%)`}}))}),C==="optional"&&jsx("button",{type:"button",style:Je.close,onClick:J,"aria-label":"Close",children:"\xD7"})]})}):jsx("div",{style:Je.overlay,onClick:ge,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:R,className:s,style:{...Je.dialog,...a},tabIndex:-1,children:[C==="optional"&&jsx("button",{type:"button",style:Je.close,onClick:J,"aria-label":"Close",children:"\xD7"}),S,t.image_url&&jsx("img",{src:t.image_url,alt:"",style:Je.image}),t.header&&jsx("div",{style:Je.header,children:t.header}),k??(t.body&&jsx("div",{style:Je.body,children:t.body})),jsxs("div",{style:{display:"flex",gap:"12px",justifyContent:"flex-end"},children:[zt&&n&&jsx("button",{type:"button",style:Je.secondaryBtn,onClick:n,children:zt}),Xe&&jsx("button",{type:"button",style:Je.primaryBtn,onClick:e,children:Xe})]})]})})}gI.displayName="ModalFrame";function bI({content:t,onCtaClick:e,onDismiss:n,visible:r,className:i,style:s,position:a,variant:o,accentColor:l,accentTextColor:b,dismissible:p,ctaLabel:v,ctaVariant:P,icon:S,children:y}){let T=Tn(),[E,A]=useState(false),[k,O]=useState(r);r&&!k&&A(false),r!==k&&O(r);let R=a??t.position??"top",C=p??t.dismissible!==false,D=o??"default",ae=P??"button",Me=useCallback(()=>{A(true),n();},[n]),L=useMemo(()=>{let{colors:ge,typography:Ae,shape:Oe}=T,lt,Je;switch(D){case "info":lt=l??ge.surface,Je=b??ge.accent;break;case "upsell":lt=l??ge.secondary,Je=b??ge.accent;break;case "warning":lt=l??"#FEF3C7",Je=b??ge.warning;break;default:lt=l??ge.primary,Je=b??ge.primaryText;}return {banner:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 24px",lineHeight:"1.5",zIndex:9990,width:"100%",boxSizing:"border-box",backgroundColor:lt,color:Je,fontFamily:Ae.fontFamily,fontSize:Ae.fontSize,position:"sticky",...R==="bottom"?{bottom:0}:{top:0}},header:{fontWeight:600,fontSize:"15px"},body:{opacity:.9},ctaButton:{padding:"6px 16px",backgroundColor:Je,color:lt,border:"none",borderRadius:Oe.borderRadiusSmall,fontWeight:600,fontSize:Ae.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap"},ctaLink:{padding:0,background:"none",border:"none",color:Je,fontWeight:500,fontSize:Ae.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap",textDecoration:"none"},dismiss:{padding:"4px 8px",background:"transparent",border:"none",color:Je,fontSize:"18px",cursor:"pointer",opacity:.7,lineHeight:1}}},[T,R,D,l,b]);if(!r||E)return null;let J=v??t.cta_label;return jsxs("div",{className:i,style:{...L.banner,...s},role:"banner","data-rt-placement":"banner",children:[y??jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",flex:1},children:[S,jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[t.header&&jsx("div",{style:L.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:L.body,children:t.body||t.message})]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginLeft:"16px",flexShrink:0},children:[J&&jsx("button",{type:"button",style:ae==="link"?L.ctaLink:L.ctaButton,onClick:e,children:J}),C&&jsx("button",{type:"button",style:L.dismiss,onClick:Me,"aria-label":"Dismiss",children:"\xD7"})]})]})}bI.displayName="BannerFrame";function vI({content:t,onCtaClick:e,visible:n,className:r,style:i,ctaLabel:s,alignment:a,ctaVariant:o,accentColor:l,icon:b,children:p}){let v=Tn(),P=a??"left",S=o??"filled",y=useMemo(()=>{let{colors:E,typography:A,shape:k}=v,O=l??E.primary,R=P==="center",C={backgroundColor:E.surface,border:`1px solid ${E.surfaceBorder}`,borderRadius:k.borderRadius,padding:"20px",fontFamily:A.fontFamily,boxSizing:"border-box",display:R?"flex":void 0,flexDirection:R?"column":void 0,alignItems:R?"center":void 0,justifyContent:R?"center":void 0,gap:R?"16px":void 0,textAlign:R?"center":void 0},D={fontSize:"16px",fontWeight:600,color:E.text,marginBottom:R?0:"6px",lineHeight:1.4},ae={fontSize:A.fontSize,color:E.textSecondary,lineHeight:1.6,marginBottom:R?0:"16px",maxWidth:R?"400px":void 0},Me={width:"100%",maxHeight:"180px",objectFit:"cover",marginBottom:"12px",borderRadius:k.borderRadiusSmall},L={borderRadius:k.borderRadiusSmall,fontWeight:600,fontSize:A.fontSizeSmall,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"6px"},J;switch(S){case "outline":J={...L,padding:"8px 16px",backgroundColor:"transparent",color:E.text,border:`1px solid ${E.surfaceBorder}`};break;case "inline":J={...L,padding:"4px 8px",backgroundColor:O,color:E.primaryText,border:"none"};break;default:J={...L,padding:"8px 20px",backgroundColor:O,color:E.primaryText,border:"none"};}return {container:C,header:D,body:ae,image:Me,ctaButton:J}},[v,P,S,l]);if(!n)return null;let T=s??t.cta_label;return jsxs("div",{className:r,style:{...y.container,...i},"data-rt-placement":"inline-embed",children:[p??jsxs(Fragment,{children:[b,t.image_url&&!b&&jsx("img",{src:t.image_url,alt:"",style:y.image}),t.header&&jsx("div",{style:y.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:y.body,children:t.body||t.message})]}),T&&jsx("button",{type:"button",style:y.ctaButton,onClick:e,children:T})]})}vI.displayName="InlineCardPlacement";function gU(t,e){return e>0?Math.min(100,Math.round(t/e*100)):0}function II(t){return t>=90?"#dc2626":t>=70?"#f59e0b":"#1e40af"}var _U={backgroundColor:"#ffffff",border:"1px solid #e2e8f0",borderRadius:"8px",padding:"16px 20px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},bU={fontSize:"13px",color:"#6b7280",marginBottom:"8px",display:"flex",justifyContent:"space-between",alignItems:"baseline"},yU={width:"100%",height:"8px",backgroundColor:"#e5e7eb",borderRadius:"4px",overflow:"hidden",marginBottom:"12px"},vU={height:"100%",borderRadius:"4px",transition:"width 0.3s ease"},xU={fontSize:"24px",fontWeight:700,color:"#111827",marginBottom:"4px"},SU={fontSize:"13px",color:"#6b7280",marginBottom:"12px"},PU={padding:"6px 16px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"6px",fontWeight:600,fontSize:"13px",cursor:"pointer"};function IU({header:t,current:e,limit:n,pct:r}){return jsxs(Fragment,{children:[jsxs("div",{style:bU,children:[jsx("span",{children:t}),jsxs("span",{style:{fontWeight:600,color:"#111827"},children:[e," / ",n]})]}),jsx("div",{style:yU,children:jsx("div",{style:{...vU,width:`${Math.min(100,r)}%`,backgroundColor:II(r)}})})]})}function TU({header:t,current:e,limit:n}){return jsxs(Fragment,{children:[jsxs("div",{style:xU,children:[e," / ",n]}),jsx("div",{style:SU,children:t})]})}var Wi=80,Rg=8,kg=(Wi-Rg)/2,Cg=2*Math.PI*kg;function CU({header:t,current:e,limit:n,pct:r}){let i=Cg-r/100*Cg,s=II(r);return jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",marginBottom:"12px"},children:[jsxs("svg",{width:Wi,height:Wi,style:{flexShrink:0},children:[jsx("circle",{cx:Wi/2,cy:Wi/2,r:kg,fill:"none",stroke:"#e5e7eb",strokeWidth:Rg}),jsx("circle",{cx:Wi/2,cy:Wi/2,r:kg,fill:"none",stroke:s,strokeWidth:Rg,strokeLinecap:"round",strokeDasharray:Cg,strokeDashoffset:i,transform:`rotate(-90 ${Wi/2} ${Wi/2})`,style:{transition:"stroke-dashoffset 0.3s ease"}}),jsxs("text",{x:Wi/2,y:Wi/2+1,textAnchor:"middle",dominantBaseline:"central",fontSize:"16",fontWeight:"700",fill:"#111827",children:[r,"%"]})]}),jsxs("div",{children:[jsxs("div",{style:{fontSize:"14px",fontWeight:600,color:"#111827"},children:[e," / ",n]}),jsx("div",{style:{fontSize:"13px",color:"#6b7280"},children:t})]})]})}var RU=16,Eg=6.5,SI=2.5,PI=2*Math.PI*Eg;function kU(t){return t<.1?{arc:"#DC2626",track:"#FEE2E2"}:t<.33?{arc:"#CA8A04",track:"#FEF9C3"}:{arc:"#2563EB",track:"#E5E7EB"}}function TI({ratio:t,size:e,arcColor:n,trackColor:r}){let i=e??RU,s=kU(t),a=n??s.arc,o=r??s.track,l=t*PI;return jsxs("svg",{viewBox:"0 0 16 16",style:{width:i,height:i,transform:"rotate(-90deg)",flexShrink:0},children:[jsx("circle",{cx:"8",cy:"8",r:Eg,fill:"none",stroke:o,strokeWidth:SI}),jsx("circle",{cx:"8",cy:"8",r:Eg,fill:"none",stroke:a,strokeWidth:SI,strokeDasharray:`${l} ${PI}`,strokeLinecap:"round"})]})}function CI({content:t,onCtaClick:e,visible:n,className:r,style:i,displayStyle:s,size:a,usageCurrent:o,usageLimit:l,showAtPercent:b,ctaLabel:p,ctaVariant:v,accentColor:P,children:S}){let y=s??t.display_style??"progress_bar",T=a??"standard",E=v??"button",A=o??(typeof t.usage_current=="number"?t.usage_current:0),k=l??(typeof t.usage_limit=="number"?t.usage_limit:100),O=typeof t.usage_percent=="number"?t.usage_percent:gU(A,k),R=k>0?Math.max(0,Math.min(1,A/k)):0,C=b??(typeof t.show_at=="number"?t.show_at:0),D=typeof t.header=="string"?t.header:"Usage",ae=p??t.cta_label,Me=useMemo(()=>T==="compact"?{display:"flex",alignItems:"center",gap:"12px",...i}:{..._U,...i},[i,T]),L=useMemo(()=>E==="link"?{marginLeft:"auto",fontSize:"13px",fontWeight:500,color:P??"#762DCC",background:"none",border:"none",padding:0,cursor:"pointer"}:PU,[E,P]);return !n||C>0&&O<C?null:T==="compact"?jsxs("div",{className:r,style:Me,"data-rt-placement":"quota-meter",children:[jsx(TI,{ratio:R}),jsxs("div",{style:{display:"flex",flexDirection:"column"},children:[t.header&&jsx("span",{style:{fontSize:13,fontWeight:500,color:"#212121",lineHeight:"18px"},children:t.header}),t.body&&jsx("span",{style:{fontSize:12,color:"#9E9E9E",lineHeight:"16px"},children:t.body})]}),S,ae&&jsx("button",{type:"button",style:L,onClick:e,children:ae})]}):jsxs("div",{className:r,style:Me,"data-rt-placement":"quota-meter",children:[y==="numeric_counter"?jsx(TU,{header:D,current:A,limit:k}):y==="circular_gauge"?jsx(CU,{header:D,current:A,limit:k,pct:O}):jsx(IU,{header:D,current:A,limit:k,pct:O}),S,ae&&jsx("button",{type:"button",style:L,onClick:e,children:ae})]})}CI.displayName="QuotaMeterFrame";function Pd(t,e){let n=xd({userId:e.userId,personalization:e.personalization,refreshKey:e.personalizationRefreshKey});return useMemo(()=>fl(t,n),[t,n])}function AJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Wa,{...r,content:i})}function OJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ds,{...r,content:i})}function jJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ka,{...r,content:i})}function FJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ga,{...r,content:i})}function LJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx($a,{...r,content:i})}function kI({targeting:t,title:e="User Profile",className:n,style:r}){let i=Tn().colors,s=Object.entries(t.usage??{}).sort(([o],[l])=>o.localeCompare(l)),a=Object.entries(t.traits??{}).sort(([o],[l])=>o.localeCompare(l));return jsxs("section",{className:n,style:{border:`1px solid ${i.surfaceBorder}`,borderRadius:8,padding:10,background:i.surface,color:i.text,...r},"data-rt-inspector":"user-profile",children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:e}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["userId: ",jsx("code",{children:t.userId})]}),jsxs("div",{children:["plan: ",jsx("strong",{children:t.plan??"n/a"})]}),jsxs("div",{children:["matched segments: ",t.segmentIds.length>0?t.segmentIds.join(", "):"none"]})]}),s.length>0&&jsxs("details",{style:{marginTop:8},children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Usage (",s.length,")"]}),jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:s.map(([o,l])=>jsxs("li",{children:[o,": ",String(l)]},o))})]}),a.length>0&&jsxs("details",{style:{marginTop:8},children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Traits (",a.length,")"]}),jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:a.map(([o,l])=>jsxs("li",{children:[o,": ",JSON.stringify(l)]},o))})]})]})}function AI(t){let e=new Map;for(let n of t){let r=n.planScopes.length>0?n.planScopes.join(" | "):"all plans",i=e.get(r)??[];i.push(n),e.set(r,i);}return Array.from(e.entries()).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>({planScope:n,rules:r}))}function GJ({placement:t,surfaceSlot:e,userId:n,contextMode:r="auto",overrides:i,traits:s,ttlMs:a,autoLoad:o=true,className:l,style:b,showRawJson:p=false}){let{sdk:v,isReady:P}=ai(),S=Tn(),y=S.colors,T=(Y,X)=>`color-mix(in srgb, ${Y} ${X}%, ${y.background})`,[E,A]=useState(""),[k,O]=useState(null),[R,C]=useState(false),[D,ae]=useState(""),Me=useRef(0),L=useRef(""),J=n||(v?v.getUserContext().user_id:""),ge=useMemo(()=>JSON.stringify(e??t),[e,t]);useEffect(()=>{L.current="",A(""),O(null),ae("");},[ge]);let Ae=useCallback(async()=>{if(!v||!P||!J)return;let Y=Me.current+1;Me.current=Y,C(true),ae("");try{let X=E;if(!X||L.current!==ge){if(e)X=await v.registerSurfaceSlot({id:e.id,name:e.name??e.id,surfaceTemplateIds:e.surfaceTemplateIds});else if(t)X=await v.registerPlacement(t);else throw new Error("Either surfaceSlot or placement must be provided.");if(Y!==Me.current)return;L.current=ge,A(X);}let je=await v.explainPlacementDecision({placementId:X,userId:J,contextMode:r,overrides:i,traits:s,ttlMs:a});if(Y!==Me.current)return;O(je);}catch{Y===Me.current&&ae("Failed to load placement decision explanation.");}finally{Y===Me.current&&C(false);}},[v,P,J,E,t,e,ge,r,i,s,a]);useEffect(()=>{o&&Ae();},[o,Ae]);let Oe=k?.segments.filter(Y=>Y.matched)??[],lt=k?.segments.filter(Y=>!Y.matched)??[],Je=k?.entitlementRules.filter(Y=>Y.matched)??[],Xe=k?.entitlementRules.filter(Y=>!Y.matched)??[],zt=k?.eligiblePayloads??[],At=zt.find(Y=>Y.selected),dn=zt.filter(Y=>!Y.selected),Jt=AI(Je),Ot=AI(Xe);return jsxs("section",{className:l,style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:10,padding:14,background:y.background,fontFamily:S.typography.fontFamily,color:y.text,...b},"data-rt-inspector":"placement-decision",children:[jsxs("header",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:12},children:[jsxs("div",{children:[jsx("h3",{style:{margin:0,fontSize:16},children:"Placement Decision Inspector"}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:2},children:[e?`Slot: ${e.id}`:t?`Placement: ${t.name}`:"(no target)"," | User: ",J||"(missing)"]})]}),jsx("button",{type:"button",onClick:()=>{Ae();},disabled:R||!J,children:R?"Refreshing...":"Refresh"})]}),!J&&jsx("p",{style:{marginTop:12,color:y.warning},children:"No userId is available. Provide `userId` or set `user.id` in RevTurbineProvider options."}),D&&jsx("p",{style:{marginTop:12,color:y.danger},children:D}),!k&&!D&&J&&jsx("p",{style:{marginTop:12,color:y.textMuted},children:R?"Loading explanation...":"No explanation loaded yet."}),k&&jsxs(Fragment,{children:[jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Decision Summary"}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["visible: ",jsx("strong",{children:String(k.decision.visible)})]}),jsxs("div",{children:["source: ",jsx("strong",{children:k.decision.decisionSource})]}),jsxs("div",{children:["placementId: ",jsx("code",{children:k.decision.placementId})]}),jsxs("div",{children:["ruleId: ",jsx("code",{children:k.placementRules.ruleId??"n/a"})]}),jsxs("div",{children:["decisionId: ",jsx("code",{children:k.placementRules.decisionId??"n/a"})]}),jsxs("div",{children:["suppression: ",jsx("code",{children:k.placementRules.suppressionReason??"none"})]}),jsxs("div",{children:["reasonCodes: ",k.placementRules.reasonCodes.length>0?k.placementRules.reasonCodes.join(", "):"none"]})]})]}),jsx("section",{style:{marginTop:14},children:jsx(kI,{targeting:k.targeting,title:"User Context"})}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Segments"}),jsxs("div",{style:{fontSize:13,color:y.textSecondary,marginBottom:6},children:["matched IDs: ",k.targeting.segmentIds.length>0?k.targeting.segmentIds.join(", "):"none"]}),jsxs("div",{style:{display:"grid",gap:8},children:[Oe.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:T(y.success,8)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.segmentName??Y.segmentId})," (",Y.segmentId,")"," ","\u2192 matched"]}),Y.predicates.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:Y.predicates.map((X,je)=>jsxs("li",{children:[X.field," ",X.operator," ",JSON.stringify(X.expected)," ","| actual: ",JSON.stringify(X.actual)," ","| ",X.matched?"pass":"fail"]},`${Y.segmentId}-${X.field}-${je}`))})]},Y.segmentId)),lt.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Unmatched segments (",lt.length,")"]}),jsx("div",{style:{display:"grid",gap:8,marginTop:8},children:lt.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:y.surface},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.segmentName??Y.segmentId})," (",Y.segmentId,")"," ","\u2192 not matched"]}),Y.predicates.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:Y.predicates.map((X,je)=>jsxs("li",{children:[X.field," ",X.operator," ",JSON.stringify(X.expected)," ","| actual: ",JSON.stringify(X.actual)," ","| ",X.matched?"pass":"fail"]},`${Y.segmentId}-${X.field}-${je}`))})]},Y.segmentId))})]})]})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Entitlement Rules"}),k.entitlementRules.length===0?jsx("div",{style:{fontSize:13,color:y.textMuted},children:"No entitlement rules found in exported config."}):jsxs("div",{style:{display:"grid",gap:8},children:[Jt.map(Y=>jsxs("section",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8},children:[jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginBottom:6},children:[jsx("strong",{children:"Plan scope:"})," ",Y.planScope]}),jsx("div",{style:{display:"grid",gap:6},children:Y.rules.map(X=>jsxs("div",{style:{border:`1px solid ${T(y.success,35)}`,borderRadius:8,padding:8,background:T(y.success,8)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:X.entitlementHandle??X.entitlementId??X.ruleId}),X.kind?jsx("span",{style:{color:y.textMuted},children:` (${X.kind})`}):""," ","\u2192"," ",jsx("span",{style:{color:X.outcome==="denied"?y.danger:y.success},children:X.outcomeDescription??X.outcome})]}),X.reason&&jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:2},children:["reason: ",X.reason]})]},X.ruleId))})]},`matched-${Y.planScope}`)),Xe.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13,color:y.textMuted},children:[Xe.length," rule",Xe.length===1?"":"s"," for other plans"]}),jsx("div",{style:{display:"grid",gap:6,marginTop:8},children:Ot.map(Y=>jsxs("section",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8},children:[jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginBottom:4},children:[jsx("strong",{children:"Plan scope:"})," ",Y.planScope]}),jsx("ul",{style:{margin:0,paddingLeft:18,fontSize:12,color:y.textMuted},children:Y.rules.map(X=>jsxs("li",{children:[X.entitlementHandle??X.entitlementId??X.ruleId,X.kind?` (${X.kind})`:""," ","\u2014 ",X.matchesPlan?X.matchesSegment?"skipped":"segment mismatch":"plan mismatch"]},X.ruleId))})]},`unmatched-${Y.planScope}`))})]})]})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Other Rule Signals"}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["category: ",k.placementRules.category??"n/a"]}),jsxs("div",{children:["cap policies: ",k.placementRules.capPolicies.length]})]}),k.placementRules.capPolicies.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:k.placementRules.capPolicies.map((Y,X)=>jsxs("li",{children:["max_per_period: ",Y.count," / ",Y.period,typeof Y.cooldownMs=="number"?` | cooldownMs: ${Y.cooldownMs}`:""]},`${Y.period}-${Y.count}-${X}`))})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Eligible Placement Payloads"}),zt.length===0?jsx("div",{style:{fontSize:13,color:y.textMuted},children:"No payload records found for this placement in exported config."}):jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:13,color:y.textSecondary,marginBottom:8},children:["selected payload: ",At?At.payloadId:"none"]}),jsxs("div",{style:{display:"grid",gap:8},children:[At&&jsxs("div",{style:{border:`2px solid ${y.success}`,borderRadius:8,padding:8,background:T(y.success,16)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:At.payloadId})," ","\u2192 ",At.eligible?"eligible":"not eligible"," (selected)"]}),jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:4},children:["status: ",At.status," | plan scopes: ",At.planScopes.length>0?At.planScopes.join(", "):"all plans"," | segment chips: ",At.segmentChips.length>0?At.segmentChips.join(", "):"none"," | templates: ",At.surfaceTemplateIds.length>0?At.surfaceTemplateIds.join(", "):"none"]}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:4},children:["gate checks \u2192 planMatch: ",String(At.matchesPlan)," | segmentMatch: ",String(At.matchesSegment)]})]},At.payloadId),dn.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Unselected payloads (",dn.length,")"]}),jsx("div",{style:{display:"grid",gap:8,marginTop:8},children:dn.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:Y.eligible?T(y.success,8):y.surface},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.payloadId})," ","\u2192 ",Y.eligible?"eligible":"not eligible"]}),jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:4},children:["status: ",Y.status," | plan scopes: ",Y.planScopes.length>0?Y.planScopes.join(", "):"all plans"," | segment chips: ",Y.segmentChips.length>0?Y.segmentChips.join(", "):"none"," | templates: ",Y.surfaceTemplateIds.length>0?Y.surfaceTemplateIds.join(", "):"none"]}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:4},children:["gate checks \u2192 planMatch: ",String(Y.matchesPlan)," | segmentMatch: ",String(Y.matchesSegment)]})]},Y.payloadId))})]})]})]})]}),p&&jsx("section",{style:{marginTop:14},children:jsxs("details",{children:[jsx("summary",{style:{cursor:"pointer",fontSize:13},children:"Raw Explanation JSON"}),jsx("pre",{style:{marginTop:8,background:y.cliBackground,color:y.cliText,borderRadius:8,padding:10,overflowX:"auto",fontSize:12},children:JSON.stringify(k,null,2)})]})})]})]})}var Cd=createContext({});function FI({children:t,...e}){let n=useContext(Cd),r=useMemo(()=>({area:e.area??n.area,action:e.action??n.action,purpose:e.purpose??n.purpose}),[e.area,e.action,e.purpose,n]);return jsx(Cd.Provider,{value:r,children:t})}function JJ(){return useContext(Cd)}var VU=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time","event_id","request_id","origin","playbook_version","decision_id"]),LI=false;function qU(t){if(!t)return {};let e={},n=false;for(let[r,i]of Object.entries(t)){if(VU.has(r)){n=true;continue}e[r]=i;}return n&&!LI&&typeof console<"u"&&(LI=true,console.warn("[RevTurbine] Dropped reserved property name(s) from a tracked event \u2014 these are RevTurbine canonical/provenance fields and cannot be overwritten from event data.")),e}function Yi(){let{sdk:t}=ai(),e=useContext(Cd),n=useRef(new Set);return useCallback((r,i,s)=>{if(!t)return;let a=s?.dedupeKey??(s?.once?`once:${r}`:null);if(a!==null){if(n.current.has(a))return;n.current.add(a);}let o=s?.area??e.area,l=s?.action??e.action,b=s?.purpose??e.purpose,p={...qU(i)};o!=null&&(p.area=o),l!=null&&(p.action=l),b!=null&&(p.purpose=b),t.capture(r,p,{immediate:s?.immediate}).catch(()=>{});},[t,e])}function oX({event:t,data:e,options:n,threshold:r,minVisibleMs:i,as:s="div",className:a,style:o,children:l}){let b=Yi(),p=useRef(false),v=useRef(null),P=useRef({event:t,data:e,options:n,track:b});P.current={event:t,data:e,options:n,track:b};let S=useCallback(y=>{v.current?.(),v.current=null,!(!y||p.current)&&(v.current=Na.observe(y,{threshold:r,minVisibleMs:i},()=>{if(p.current)return;p.current=true;let T=P.current;T.track(T.event,T.data,T.options);}));},[r,i]);return useEffect(()=>()=>{v.current?.(),v.current=null;},[]),Lm.createElement(s,{ref:S,className:a,style:o},l)}function mX({area:t,viewEvent:e="engagement_view",dwellEvent:n="engagement_dwell",interactionEvent:r="engagement_interaction",purpose:i,threshold:s=.5,as:a="div",className:o,style:l,children:b}){let p=Yi(),v=useRef(p);v.current=p;let P=useRef(false),S=useRef(false),y=useRef(true),T=useRef(null),E=useRef(0),A=useRef(null),k=()=>S.current&&y.current,O=useCallback(()=>{T.current!==null&&(E.current+=Date.now()-T.current,T.current=null);},[]),R=useCallback(()=>{k()&&T.current===null&&(T.current=Date.now());},[]),C=useCallback(()=>{S.current=true,R(),P.current||(P.current=true,v.current(e,{},{area:t,purpose:i}));},[e,t,i,R]),D=useCallback(()=>{O(),S.current=false;},[O]),ae=useCallback(J=>{if(A.current?.disconnect(),A.current=null,!J)return;if(typeof IntersectionObserver>"u"){C();return}let ge=new IntersectionObserver(Ae=>{for(let Oe of Ae)Oe.isIntersecting&&Oe.intersectionRatio>=s?C():D();},{threshold:s});ge.observe(J),A.current=ge;},[s,C,D]);useEffect(()=>{if(typeof document>"u")return;let J=()=>{let ge=document.visibilityState!=="hidden";y.current!==ge&&(y.current=ge,ge?R():O());};return y.current=document.visibilityState!=="hidden",document.addEventListener("visibilitychange",J),()=>document.removeEventListener("visibilitychange",J)},[O,R]),useEffect(()=>()=>{O();let J=E.current;J>0&&v.current(n,{dwell_ms:J},{area:t,purpose:i});},[O,n,t,i]);let Me=useCallback(()=>{v.current(r,{},{area:t,purpose:i});},[r,t,i]),L=Lm.createElement(a,{ref:ae,className:o,style:l,onClickCapture:Me},b);return jsx(FI,{area:t,purpose:i,children:L})}function Ag(t){if(t instanceof Error){let e=t.name.toLowerCase(),n=t.message.toLowerCase();if(e==="aborterror"||n.includes("abort"))return "aborted";if(e==="timeouterror"||n.includes("timeout")||n.includes("timed out"))return "timeout";if(n.includes("network")||n.includes("failed to fetch")||n.includes("fetch"))return "network";if(e==="validationerror"||n.includes("invalid")||n.includes("validation"))return "validation";if(n.includes("permission")||n.includes("forbidden")||n.includes("unauthorized"))return "permission"}return "unknown"}function _X(t,e,n){let r=Yi(),[i,s]=useState(false),[a,o]=useState(null),l=useRef({name:t,fn:e,options:n,track:r});return l.current={name:t,fn:e,options:n,track:r},{run:useCallback(async(...p)=>{let{name:v,fn:P,options:S,track:y}=l.current;s(true),o(null),y(`${v}_started`,{},S);try{let T=await P(...p);return y(`${v}_completed`,{},S),T}catch(T){let E=Ag(T);throw o(E),y(`${v}_failed`,{error_category:E},S),T}finally{s(false);}},[]),isRunning:i,error:a}}function PX(t,e,n,r){let{sdk:i}=ai(),s=Yi(),[a,o]=useState(false),[l,b]=useState(false),[p,v]=useState(null),[P,S]=useState(null),y=useRef({action:t,fn:e,context:n,options:r,track:s,sdk:i});return y.current={action:t,fn:e,context:n,options:r,track:s,sdk:i},{run:useCallback(async(...E)=>{let{action:A,fn:k,context:O,options:R,track:C,sdk:D}=y.current;if(!D){let ae={ran:false,entitlement:{status:"denied",allowed:false}};return b(true),ae}o(true),S(null);try{let ae=await D.gate(A,async()=>{C(`${A}_started`,{},R);try{let Me=await k(...E);return C(`${A}_completed`,{},R),Me}catch(Me){let L=Ag(Me);throw S(L),C(`${A}_failed`,{error_category:L},R),Me}},O);return b(!ae.ran),v(ae.entitlement),ae}finally{o(false);}},[]),isRunning:a,denied:l,entitlement:p,error:P}}function kX({event:t,data:e,options:n,asChild:r,as:i="span",className:s,style:a,children:o}){let l=Yi(),b=useCallback(p=>{p.defaultPrevented||l(t,e,n);},[l,t,e,n]);if(r){let p=Lm.Children.toArray(o),v=p.length===1?p[0]:null;if(!v||!Lm.isValidElement(v))return Lg("<Track asChild> requires a single React element child; rendering children unchanged."),jsx(Fragment,{children:o});let P=v,S=P.props.onClick,y=T=>{S?.(T),b(T);};return Lm.cloneElement(P,{onClick:y})}return Lm.createElement(i,{className:s,style:a,onClick:b},o)}function EX(t,e,n){let r=Yi();return {onClick:useCallback(s=>{s.defaultPrevented||r(t,e,n);},[r,t,e,n])}}function jX(t,e){let{denied:n,limited:r,result:i,isLoading:s,error:a}=Rm({handle:t,...e}),o=i!==null;return {can:o&&!n,limited:r&&!n,isLoading:s||!o&&a===null,result:i}}
1
+ import {z}from'zod';import Lm,{createContext,useMemo,useCallback,useEffect,useRef,useState,useContext}from'react';import {jsx,Fragment,jsxs}from'react/jsx-runtime';var qI=Object.defineProperty;var DI=(t,e,n)=>e in t?qI(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var w=(t,e,n)=>DI(t,typeof e!="symbol"?e+"":e,n);function jg(){try{return "production"}catch{return}}function MI(){try{return typeof process<"u"}catch{return false}}function Fg(){return jg()==="production"}function ha(){let t=jg();if(t!==void 0)return t!=="production";if(MI())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}function Lg(t){ha()&&typeof console<"u"&&console.warn(`[RevTurbine] ${t}`);}var Rd="1.0.0",Bg=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],NI=["slot_configs","content_overrides"];function zI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function HI(t,e){if(!ha())return;let n=NI.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 KI(t,e){for(let n of Bg)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function GI(t){return t.artifact_type==="playbook"&&t.format_version===Rd&&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&&Bg.every(e=>Array.isArray(t[e]))}function $I(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 Ug(t,e,n){if(t===void 0)return;if(!zI(t))throw new Error(`Invalid ${e}: expected top-level object`);HI(t,e),KI(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!==Rd)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==Rd)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,s=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(!s)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(!$I(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:a,change_set_id:o,...l}=t,b=r?t.playbook_version_id??null:o??null,p={...l,artifact_type:"playbook",format_version:Rd,playbook_handle:t.playbook_handle??"default",playbook_version_id:b,tenant_id:i,environment_id:s};if(!GI(p))throw new Error(`Invalid ${e}: malformed Playbook header`);return p}function vs(t,e,n){return Ug(t,e,n)}var Bm=864e5,WI=75;function Vg(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function ZI(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=WI?"running_out":"active"}function YI(t,e,n){let r=Math.max(0,e-t),i=Math.max(0,n-t),s=Math.max(0,e-n),a=Math.max(1,Math.round(r/Bm)),o=Math.min(a,Math.floor(i/Bm)),l=Math.max(0,Math.ceil(s/Bm)),b=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:o,daysRemaining:l,daysTotal:a,progressPercent:b}}function JI(t,e){let n=Math.max(1,e),r=Math.max(0,t),i=Math.max(0,n-r),s=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:i,usageLimit:n,progressPercent:s}}function kd(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:i,usageBalances:s}=t,a=Date.parse(e.started_at),o=Date.parse(r);if(Number.isNaN(a)||Number.isNaN(o)||e.status==="not_started"||o<a)return;let l=e.trial_limit_type??"time",b=0,p=false,v,P,S,y,T,E;if(l==="usage"){let C=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),D=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof C!="string"||typeof D!="number"||D<1)return;let ae=s?.[C]??0,Me=JI(ae,D);b=Me.progressPercent,p=Me.isExpiredByBounds,S=Me.usageConsumed,y=Me.usageRemaining,T=Me.usageLimit,E=C;}else {let C=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(C))return;let D=YI(a,C,o);b=D.progressPercent,p=D.isExpiredByBounds,v=D.dayNumber,P=D.daysRemaining;}let A=Vg(e.status,p),k=ZI(A,b),O;e.rule_type==="reverse_trial"?O=i:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(O=n.plan_id);let R=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:A==="active",trial_type:R,...O!==void 0?{plan_handle:O}:{},state:k,trial_limit_type:l,progress_percent:b,...v!==void 0?{day_number:v}:{},...P!==void 0?{days_remaining:P}:{},...E!==void 0?{usage_entitlement_handle:E}:{},...S!==void 0?{usage_consumed:S}:{},...y!==void 0?{usage_remaining:y}:{},...T!==void 0?{usage_limit:T}:{}}}function qg(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let i,s=-1/0;for(let a of t){let o=Date.parse(a.started_at);if(Number.isNaN(o)||r<o)continue;let l=false;if((a.trial_limit_type??"time")==="usage")n&&typeof a.usage_entitlement_handle=="string"&&typeof a.usage_limit_value=="number"&&(l=(n[a.usage_entitlement_handle]??0)>=a.usage_limit_value);else if(a.expires_at){let p=Date.parse(a.expires_at);Number.isNaN(p)||(l=r>=p);}let b=Vg(a.status,l);b!=="active"&&b!=="converted"||o>s&&(i=a,s=o);}return i}function Um(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 Vm(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,i=-1/0;for(let s of t){if(s.status!=="active"&&s.status!=="expired"&&s.status!=="converted")continue;let a=Date.parse(s.started_at);Number.isNaN(a)||n<a||a>i&&(r=s,i=a);}return r}function Ed(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:i,usageBalances:s,basePlanHandle:a}=t,o=Vm(r,i);if(!o)return {trial:void 0,reverseGrants:null};if(o.rule_type==="reverse_trial"){let p=(n??[]).find(S=>S.id===o.rule_id),v=kd({instance:o,...p!==void 0?{rule:p}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),P=p!==void 0?Um(o,p):null;return {trial:v,reverseGrants:P}}let l=(e??[]).find(p=>p.id===o.rule_id);return {trial:kd({instance:o,...l!==void 0?{rule:l}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),reverseGrants:null}}function we(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function ql(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Yn(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function Cn(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 Xa(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function qm(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Dl(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 Dm(t){if(!we(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 Mm(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function Dg(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 Mg(t){let e=t,n=we(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(a=>typeof a=="string"):[];if(r.length>0)return r;let i=we(t.content)?t.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(a=>typeof a=="string"):[]}function Nm(t,e){let n=Mg(t);if(n.length===0||!e)return true;let r=Dg(e);return r.length===0?true:n.some(i=>{let s=i.toLowerCase();return r.some(a=>s===a||s.endsWith(`_${a}`)||s.includes(a))})}function zm(t,e){if(e.length===0)return null;let n=[...e].sort((i,s)=>i.tier_position!==s.tier_position?i.tier_position-s.tier_position:i.sort_order!==s.sort_order?i.sort_order-s.sort_order:i.source_id.localeCompare(s.source_id)),r=n.findIndex(i=>i.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function Qa(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function Hm(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Km(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function Ss(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))we(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function ga(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0?n=e.trim():we(e)&&typeof e.id=="string"&&e.id.trim().length>0&&(n=e.id.trim()),!n)return;let r=n.toLowerCase();for(let i of t.plans){if(!we(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let a=typeof i.name=="string"?i.name.trim():"";if(a.length>0)return a}}}function wd(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function Ns(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 Ml(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.score),Cn(e.ltv_propensity_score),Cn(n.score),Cn(n.ltv_propensity_score),Cn(n.ranking_score)].find(i=>i!==null)??0}function Ad(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.priority),Cn(e.placement_priority),Cn(n.priority),Cn(n.placement_priority)].find(i=>i!==null)??0}function Gm(t){let e=we(t.content)?t.content:{};return [Cn(e.usage_percent),Cn(e.trial_percent_elapsed),Cn(e.threshold_percent)].find(r=>r!==null)??Ml(t)}var XI=new Set(["trial_started","trial_ended","trial_converted"]),QI=new Set(["trial_progress","trial_ending"]);function $m(t){let e=we(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&XI.has(n))return 1;if(n&&QI.has(n))return 3;let r=[Cn(e.usage_percent),Cn(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function Nl(t){let e=t,n=we(t.content)?t.content:{};return [Cn(e.server_order),Cn(e.order),Cn(e.rank),Cn(e.order_index),Cn(n.server_order),Cn(n.order),Cn(n.rank),Cn(n.order_index)].find(i=>i!==null)??null}function Wm(t){let e=we(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=Cn(n);if(r!==null)return String(r);let i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let s=Cn(i);return s!==null?String(s):null}function Zm(t){let n=(we(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(i=>typeof i=="string"?i.trim():Cn(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=Cn(n);return r!==null?[String(r)]:[]}function xs(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>xs(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${xs(r)}`).join(",")}}`}function Ym(t){return we(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 t0=/^[a-z0-9._]{1,100}$/,zs={Persisted:"persisted",Transient:"transient"},Ji={Internal:"internal",External:"external"},Fi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},n0="readOnly";function oi(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[n0]===true||(e[n]=r);}return z.object(e)}function Or(t){let e=oi(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(t0)}):e}var {Unrestricted:$r}=Fi,{Transient:Wr,Persisted:i0}=zs,{Internal:_a,External:Ps}=Ji;z.object({page:z.coerce.number().int().min(1).default(1).meta($r),per_page:z.coerce.number().int().min(1).max(100).default(25).meta($r)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var qn=z.object({created_at:z.string().datetime().meta({...$r,readOnly:true}),updated_at:z.string().datetime().meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),On=z.object({id:z.string().min(1).meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),Dn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var Jm=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),zg=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});var Od=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),Hg=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});var Is=z.string().min(1).max(200),lr=z.string().min(1).max(100),jd=z.string().max(500).optional(),gi=z.record(z.string(),z.unknown()).default({}),ba=z.number().int().min(10).max(100).multipleOf(10),Fd=z.string().datetime().nullable().default(null),sr=z.object({environment_id:z.string().min(1).default("production").meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a}),cr=z.object({playbook_version_id:z.string().nullable().default(null).meta($r),is_current:z.boolean().default(true).meta({...$r,readOnly:true}),is_deleted:z.boolean().default(false).meta({...$r,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...$r,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...$r,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...$r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a}),s0=On.merge(qn).merge(Dn).merge(sr).extend({handle:lr.meta({...$r,readOnly:true}),active:z.boolean().default(true).meta({...$r,readOnly:true})});function jr(t){return s0.meta({id:t,"x-revturbine-schema-persistence":i0,"x-revturbine-schema-exposure":_a})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":_a});var Kg=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ps}),a0=new Set(Jm.options);function Ld(t,e){if(!we(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=we(t.surface)?t.surface:{},i=a0.has(r.type)?r.type:"custom",s=we(t.cta_path)?t.cta_path:we(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:we(t.content)?t.content:{},...we(t.promotion)?{promotion:t.promotion}:{},cta_path:s,ui_path:s,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 o0="__no_dim__";function Wg(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let s of t){let a=n(s)??o0,o=i.get(a)??[];o.push(s),i.set(a,o);}for(let s of i.values())if(!s.some(a=>r.has(a)))return false;return true}var l0=999999;function c0(t){return t==null||t==="unlimited"||t===l0}function zl(t){return c0(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function d0(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 Zg(t,e,n){return t.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(a=>d0(a,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),s=Wg(r.segmentIds,e.segmentIds,a=>n?.[a]);return {rule:r,matchesPlan:i,matchesSegment:s,matched:i&&s}})}function Yg(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return zl(e.limit_value)??0;case "credits":return zl(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return zl(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function Jg(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let i of t){let s=e(i);(n===void 0||s>r)&&(n=i,r=s);}return n}function u0(t){return Jg(t,e=>Yg(e.rule))?.rule}function Xm(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let i=Zg(r,n,t.segmentDimensions);return u0(i.filter(s=>s.matched))}function m0(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 p0(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 Wg(m0(t),e,i=>r.get(i))}function Gg(t,e,n){if(!t)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:n};case "soft_block":return {status:"denied",allowed:false,reason:`${n}_soft_block`};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 Hl(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:i,segmentIds:s,usageBalances:a,userUsage:o,trialGrantedEntitlementHandles:l,effectivePlanHandle:b}=t,v=(r.entitlements??[]).find(Oe=>typeof Oe?.unique_handle=="string"&&Oe.unique_handle===e),P=typeof v?.unique_handle=="string"?v.unique_handle:e,S=typeof v?.unique_handle=="string"?v.unique_handle:void 0,y=!!(l&&l.size>0&&(l.has(e)||l.has(P)||S!==void 0&&l.has(S)));if(y&&(b===void 0||b===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let E=String((y&&b?b:i)||"").toLowerCase(),k=(r.plans??[]).find(Oe=>typeof Oe.unique_handle=="string"&&Oe.unique_handle.toLowerCase()===E),O=typeof k?.unique_handle=="string"?k.unique_handle:E||void 0,C=(r.entitlement_rules??[]).filter(Oe=>{if((typeof Oe.entitlement_id=="string"?Oe.entitlement_id:typeof Oe.entitlementId=="string"?Oe.entitlementId:"")!==P)return false;let Je=Array.isArray(Oe.targets)?Oe.targets.filter(Xe=>we(Xe)&&Xe.kind==="plan"&&typeof Xe.id=="string").map(Xe=>Xe.id):Array.isArray(Oe.plan_ids)?Oe.plan_ids.filter(Xe=>typeof Xe=="string"):Array.isArray(Oe.planIds)?Oe.planIds.filter(Xe=>typeof Xe=="string"):[];return !(O!==void 0&&!Je.includes(O)||!p0(Oe,s,r.segments??[]))});if(C.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let D=(()=>{let Oe=(r.entitlements??[]).find(lt=>lt.unique_handle===P);return Oe&&typeof Oe.type=="string"?Oe.type:void 0})(),ae=Oe=>{let lt=we(Oe)?Oe:{},Xe={...we(lt.type_fields)?lt.type_fields:we(lt.typeFields)?lt.typeFields:{},...lt};return typeof Xe.kind!="string"&&D&&(Xe.kind=D),Xe},Me=Jg(C,Oe=>{let lt=ae(Oe);return Yg({kind:typeof lt.kind=="string"?lt.kind:"",fields:lt})})??C[0],L=ae(Me);typeof L.kind=="string"?L.kind:void 0;let ge=Oe=>{let lt=o?.[Oe];if(we(lt)&&typeof lt.amount=="number")return lt.amount},Ae=n?.used??(Number.isFinite(a[e])?a[e]:void 0)??(Number.isFinite(a[P])?a[P]:void 0)??ge(e)??ge(P)??0;return Bd(L,Ae)}function $g(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function Xg(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Bd(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=zl(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?$g(Gg(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:zl(r),s=Number(t.initial_grant),a=i!==void 0&&i>=0?i:Number.isFinite(s)&&s>=0?s:void 0;return a!==void 0&&Number.isFinite(a)?$g(Gg(e>=a,t.enforcement,"credit_balance_exhausted"),a,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 Qm(t,e,n,r,i=80){let s=e.get(t);if(s)return s;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let o=Number(r[t]);if(o>0)return {limit:o,warningPercent:i}}return null}var f0=0;function h0(){return `core_${Date.now()}_${++f0}`}function Qg(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var ep=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=h0(),n=this.placements.get(t.placementId);if(this.interactionTracker){let s=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(s.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Qg(`${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 s=await this.placementResolver(t,n,i);if(s.visible&&s.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let a=this.capEnforcer.enforce(s.output);if(!a.allowed)return {...s,visible:false,reasonCodes:[...s.reasonCodes,a.reason??"suppressed_by_cap"],suppressionReason:a.reason}}return s}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:Qg("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 s=i.entries[t];if(!s)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let a=i.usage?.[t];if(e.rules){let o=Xm(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(o){let l={kind:o.kind,...o.fields};if(Xg(l.kind))return Bd(l,n?.used??a?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return a&&n?.used!==void 0&&a.limit>0&&n.used>=a.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:a.limit,used:n.used,remaining:Math.max(0,a.limit-n.used)}:{status:s.status,allowed:s.status==="allowed",reason:s.reason,limit:a?.limit,used:a?.used,remaining:a?.remaining}}};function Ud(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Kl(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),Ud(n)}var tp={async sha256Base64Url(t){return Kl(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 e_=z.enum(["session","day","week","month"]),t_=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(t_),cap:z.object({count:z.number().int().min(1),period:e_})});function g0(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 r_(t,e){return `${t}:${e}`}function Gl(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(l=>l.kind==="template"?l.id===n.templateId:l.kind==="slot"?l.id===n.slotId:false))continue;let a=r_(i.id,i.cap.period);if((r.get(a)??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 s of n)for(let a of s.rules){let o=g0(a.period,e);if(r.filter(b=>b>=o&&b<=e).length>=a.count)return {allowed:false,reason:`suppressed_by_payload_cap_${a.period}`}}}return {allowed:true}}async function np(t,e){let n=Xa(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 Kl(r).slice(0,22)}function rp(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function ip(t){let e=xs({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:Xa(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${Kl(e)}`}function s_(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 s=Zm(r);if(s.length!==0)for(let a of t){if(a.output_id===r.output_id||a.surface.template!==i)continue;let o=Wm(a);o&&s.includes(o)&&e.add(a.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(a=>{let o=we(a.content)?a.content:{};return {output:a,order:Cn(o.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(a=>Number.isFinite(a.order));if(i.length<=1)continue;let s=i.reduce((a,o)=>o.order>a.order?o:a);for(let a of i)a.output.output_id!==s.output.output_id&&e.add(a.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function i_(t){let n=(we(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function _0(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 Vd(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],s=t[r];if(i.surface.type!==s.surface.type)continue;let a=Ns(i.category),o=Ns(s.category);if(a!==o){a<o?e.add(s.output_id):e.add(i.output_id);continue}if(a===0||a===1){let{leftKey:l,rightKey:b}=_0(i,s,a);l===b&&e.add(s.output_id);}}return t.filter(n=>!e.has(n.output_id))}function sp(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(l=>Ns(l.category)===1)),r.length===0)return null;let i=s_(r);if(i.length===0)return null;let s=i.some(l=>Nl(l)!==null),a=s?i:Vd(i);return a.length===0?null:[...a].sort((l,b)=>{if(s){let T=Nl(l),E=Nl(b);if(T!==null&&E!==null&&T!==E)return T-E;if(T!==null&&E===null)return -1;if(T===null&&E!==null)return 1}let p=Ns(l.category),v=Ns(b.category),P=p-v;if(P!==0)return P;if(p===2){let T=$m(l)-$m(b);if(T!==0)return T;let E=Gm(b)-Gm(l);if(E!==0)return E}let S=Ml(b)-Ml(l);if(S!==0)return S;let y=Ad(b)-Ad(l);return y!==0?y:l.output_id.localeCompare(b.output_id)})[0]??null}function b0(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function ap(t,e,n,r){let i=we(r)?r:{},s=we(i.decision)?i.decision:{},a=we(i.content)?i.content:we(s.content)?s.content:{},o=typeof s.visible=="boolean"?s.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:t,requestId:typeof i.request_id=="string"?i.request_id:e,visible:o,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(l=>typeof l=="string"):[],content:b0(typeof a.title=="string"?a.title:`${n} recommendation`,typeof a.body=="string"?a.body:"Treatment selected by RevTurbine decisioning.",typeof a.cta=="string"?a.cta:"Continue")}}function qd(t){let e=[],n=[t,t.content,we(t.content)?t.content.payload:void 0,we(t.content)?t.content.placement:void 0,we(t.content)?t.content.surface:void 0];for(let r of n){if(!we(r))continue;let i=we(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=Dm(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),l=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...l!==void 0?{cooldownMs:l}:{}});}return e}function op(t,e,n,r,i="impression"){if(Ns(t.category)<=1)return {allowed:true};let s=qd(t);if(s.length===0)return {allowed:true};let a={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(v=>Number.isFinite(v)&&v>0)},o=Gl({perPayload:{policies:s,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!o.allowed)return {allowed:false,reason:o.reason,updatedState:a};let l=[...a.seenAt,r],b=i==="dismiss"?s.map(v=>v.cooldownMs).filter(v=>typeof v=="number"&&Number.isFinite(v)&&v>0):[],p=b.length>0?r+Math.max(...b):void 0;return {allowed:true,updatedState:{seenAt:l,...p!==void 0?{cooldownUntil:p}:{}}}}function eo(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 $l(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function y0(t,e){let n=eo(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[s,a]of Object.entries(r))if(s.toLowerCase()===i)return eo(a)}}function v0(t){let e=eo(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 to(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[S,y]of Object.entries(t.base))(typeof y=="string"||typeof y=="number")&&(e[S]=y);let r=n?.plan?.currentPlanHandle,i=n?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let s=n?.plan?.trialDaysRemaining;s!==void 0&&Number.isFinite(s)&&(e.trial_days_remaining=s);let a=n?.plan?.trialDaysTotal;a!==void 0&&Number.isFinite(a)&&(e.trial_days_total=a);let o=n?.traits?.traits??{};for(let[S,y]of Object.entries(o))(typeof y=="string"||typeof y=="number")&&(e[S]=y);let l=n?.entitlements?.usage??{};for(let[S,y]of Object.entries(l)){let T=$l(S);if(!T)continue;let E=eo(y.used),A=eo(y.remaining),k=eo(y.limit);if(E!==void 0&&(e[`${T}_usage_current`]=E,e.usage_current===void 0&&(e.usage_current=E),e.current_usage===void 0&&(e.current_usage=E)),k!==void 0&&(e[`${T}_usage_limit`]=k,e.usage_limit===void 0&&(e.usage_limit=k),e.current_limit===void 0&&(e.current_limit=k)),A!==void 0)e[`${T}_usage_remaining`]=A,e.usage_remaining===void 0&&(e.usage_remaining=A);else if(E!==void 0&&k!==void 0){let R=Math.max(0,k-E);e[`${T}_usage_remaining`]=R,e.usage_remaining===void 0&&(e.usage_remaining=R);}if(E!==void 0&&k!==void 0&&k>0){let R=Math.min(100,Math.round(E/k*100));e[`${T}_usage_percent`]=R,e.usage_percent===void 0&&(e.usage_percent=R);}let O=y.reset_date;typeof O=="string"&&O.length>0&&(e[`${T}_reset_date`]=O,e.reset_date===void 0&&(e.reset_date=O));}let b=n?.rules?.entitlementRules??{};for(let[S,y]of Object.entries(b)){if(!Array.isArray(y)||y.length===0)continue;let T=y.find(R=>R.kind==="usage_limit"||R.kind==="usage_rate"||R.kind==="credits"||R.kind==="seat");if(!T)continue;let E=$l(S);if(!E)continue;let A=T.fields??{},k=y0(A,r);k!==void 0&&e[`${E}_usage_limit`]===void 0&&(e[`${E}_usage_limit`]=k);let O=v0(A);O!==void 0&&(e[`${E}_usage_warning_threshold_percent`]=O);}t.userName&&t.userName.length>0&&(e.user_name=t.userName);let p=n?.plan?.currentPlanPrice;typeof p=="string"&&p.length>0&&(e.plan_price=p),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 v=t.effectiveGrants;if(v)for(let[S,y]of Object.entries(v)){if(y.allocation==="per_user"||y.allocation==="per_user_pooled"||!y.allocation){let T=$l(S);if(!T)continue;y.used!==void 0&&e[`${T}_usage_current`]===void 0&&(e[`${T}_usage_current`]=y.used),y.limit!==void 0&&e[`${T}_usage_limit`]===void 0&&(e[`${T}_usage_limit`]=y.limit);}if(y.enforcement&&(y.status==="limited"||y.status==="denied")){let T=$l(S);T&&e[`${T}_enforcement`]===void 0&&(e[`${T}_enforcement`]=y.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=y.enforcement);}}let P=n?.rules?.entitlementRules??{};for(let[S,y]of Object.entries(P)){if(!Array.isArray(y))continue;let T=$l(S);if(T)for(let E of y){if(E.kind==="credits"){let A=e[`${T}_usage_remaining`];A!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=A);}if(E.kind==="seat"){let A=e[`${T}_usage_current`],k=e[`${T}_usage_limit`];A!==void 0&&e.seat_count===void 0&&(e.seat_count=A),k!==void 0&&e.seat_limit===void 0&&(e.seat_limit=k);}}}if(t.featureInteractions&&v){let{invokedFeatureHandles:S,interactionCounts:y,topFeaturesByEngagement:T}=t.featureInteractions,E=new Set(S),A=new Set;for(let[R,C]of Object.entries(v))(C.status==="denied"||C.status==="limited")&&A.add(R);let k=0,O=0;for(let R of S)A.has(R)&&(k++,y&&(O+=y[R]??0));if(e.gated_features_used_count=k,y&&(e.gated_action_count=O),T){let R=T.find(C=>!E.has(C)&&A.has(C));R&&(e.top_unused_gated_feature=R);}if(n?.plan?.trialActive){let R=0;for(let C of S)C in v&&R++;e.trial_features_used=R;}}return e}function lp(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 Dd(t,e,n){let r={};for(let[i,s]of Object.entries(t))(typeof s=="string"||typeof s=="number"||typeof s=="boolean")&&(r[i]=s);e&&r.plan===void 0&&(r.plan=e);for(let[i,s]of Object.entries(n))r[i]===void 0&&(r[i]=s);return r}function Md(t,e,n){let r=ga(e,t.plan),i=r??(typeof t.plan=="object"&&t.plan?.id?t.plan.id:void 0),s={...t.custom??{}};for(let[o,l]of Object.entries(t.entitlements??{}))s[o]===void 0&&(s[o]=l);r&&s.plan_name===void 0&&(s.plan_name=r),i&&s.plan===void 0&&(s.plan=i);let a={...Ss(t.usage),...n??{}};for(let[o,l]of Object.entries(a))s[o]===void 0&&(s[o]=l);return {effectivePlan:i,traits:s,usage:a,segmentTraits:Dd(s,i,a)}}function x0(t){return {plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function cp(t,e=tp){return e.sha256Base64Url(xs(x0(t)))}function dp(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:s}=t,a={};for(let[A,k]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(A)||(a[A]=k);let o={...a},l=ga(n,e.plan);l?o.plan_name=l:typeof e.plan=="object"&&e.plan?.name&&(o.plan_name=e.plan.name);let b={...Ss(e.usage),...r},p=Object.entries(b).filter(([,A])=>Number.isFinite(A)).sort(([A],[k])=>A.localeCompare(k)),v,P,S,y,T=[];for(let[A,k]of p){let O=i.get(A)??Qa(A);if(!O)continue;let C=s(A)?.limit,D=C!==void 0?Math.max(0,C-k):void 0,ae=C!==void 0&&C>0?Math.min(100,Math.round(k/C*100)):void 0;o[`${O}_usage_current`]=k,C!==void 0&&(o[`${O}_usage_limit`]=C),D!==void 0&&(o[`${O}_usage_remaining`]=D),ae!==void 0&&(o[`${O}_usage_percent`]=ae),T.push({prefix:O,current:k,...C!==void 0?{limit:C}:{},...D!==void 0?{remaining:D}:{},...ae!==void 0?{percent:ae}:{}}),v===void 0&&(v=k,P=C,S=D,y=ae);}let E=T.find(A=>A.prefix==="core")??T.find(A=>A.limit!==void 0)??T[0];return E&&(v=E.current,P=E.limit,S=E.remaining,y=E.percent),v!==void 0&&(o.usage_current=v),P!==void 0&&(o.usage_limit=P),S!==void 0&&(o.usage_remaining=S),y!==void 0&&(o.usage_percent=y),o}function up(t,e,n){let r=[];for(let[i,s]of Object.entries(e)){let a=t[i]||0;if(!Number.isFinite(s)||s<=a)continue;let o=n(i);if(!o)continue;let l=a/o.limit*100,b=s/o.limit*100;b>=o.warningPercent&&l<o.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:o.warningPercent}),s>=o.limit&&a<o.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:100});}return r}function mp(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 s=i+Math.max(0,r);if(s>0&&i>=Math.ceil(s/2))return "midpoint"}return "none"}var a_="__self__",S0={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},pp={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_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:a_,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:S0},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 o_=["high","medium","low"];function Wl(t,e){return t==="active"?o_.includes(e):t===e}var P0="activity_level";function l_(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),i=t.value,s=t.field===P0;switch(t.operator){case "eq":return s?Wl(i,r):r===i;case "neq":return s?!Wl(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 a=i.split(",").map(o=>o.trim());return s?a.some(o=>Wl(o,r)):a.includes(r)}default:return false}}function Zl(t,e,n={}){return t.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(n,r.experiment_id))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>l_(s,e))}).map(r=>r.handle)}function c_(t){let e={};for(let n of t)n.experiment_id&&(e[n.handle]=n.experiment_id);return e}function d_(t,e,n={}){for(let r of e){let i=t[r];if(!i)continue;let s=n[i];if(typeof s=="string")return {experiment_id:i,variant_key:s}}}function fp(t,e){let n=String(t.field||""),r=String(t.operator||""),i=String(t.value||""),s=e[n],a=typeof s=="string"||typeof s=="number"||typeof s=="boolean"?s:null,o=l_(t,e);return {field:n,operator:r,expected:i,actual:a,matched:o}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function Pp(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 p_={Named:"named",Minted:"minted"},f_="x-revturbine-schema-identity";function Qi(t="handle"){return {[f_]:{kind:p_.Named,handleField:t}}}function es(t="handle"){return {[f_]:{kind:p_.Minted,handleField:t}}}var vn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Li={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},T0="x-revturbine-context",C0="x-revturbine-in-config",R0="x-revturbine-sdk-input",k0="x-revturbine-source",E0="x-revturbine-deprecation",w0={[vn.Playbook]:Li.Customer,[vn.Branding]:Li.Customer,[vn.Billing]:Li.Stripe,[vn.Metering]:Li.Customer,[vn.CustomerOperations]:Li.Runtime,[vn.EventIngestion]:Li.Runtime};function Jn(t,e){return {[T0]:t,[C0]:e.inConfig??t===vn.Playbook,[R0]:e.sdkInput,[k0]:e.source??w0[t]}}function hp(t){return {deprecated:true,[E0]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var un=t=>z.object({items:z.array(t)}),rr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),B=t=>t,mn=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:ye}=Fi,{Persisted:Ip,Transient:li}=zs,{Internal:h_,External:Zr}=Ji,g_=Jn(vn.Playbook,{sdkInput:true}),A0=Jn(vn.Playbook,{inConfig:false,sdkInput:false}),__=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":li,"x-revturbine-schema-exposure":Zr}),Hd=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),O0=z.enum(zg).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),j0=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),b_=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),gp=z.object({entitlement_id:z.string().min(1).meta(ye),entitlement_handle:z.string().min(1).meta(ye),status:O0.meta(ye),limit:z.number().optional().meta(ye),used:z.number().optional().meta(ye),allocation:Hd.optional().meta(ye),enforcement:b_.optional().meta(ye),source:j0.optional().meta(ye),plan_id:z.string().optional().meta(ye),segment_id:z.string().optional().meta(ye),seat_type_id:z.string().optional().meta(ye),rule_id:z.string().optional().meta(ye)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr,...Fi.Operational});z.object({account:z.record(z.string(),gp).optional().meta(ye),instance:z.record(z.string(),gp).optional().meta(ye),user:z.record(z.string(),gp).optional().meta(ye)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr,...Fi.Operational});var F0=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),L0=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),y_=z.object({kind:L0.meta(ye),id:z.string().min(1).meta(ye)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),B0=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),lo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...ye,readOnly:true}),name:Is.meta(ye),handle:lr.meta(ye),customer_facing_description:z.string().max(500).optional().meta(ye),type:Od.meta(ye),unit:z.string().max(100).optional().meta(ye),period_scope:__.optional().meta(ye),allocation:Hd.optional().meta(ye),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ye),sort_order:z.number().int().default(0).meta(ye),metadata:gi.meta(ye)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":Zr,...g_,...Qi()}),U0=jr("EntitlementAnchor"),go=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...ye,readOnly:true}),handle:lr.meta({...ye,readOnly:true}),entitlement_id:z.string().min(1).meta(ye),targets:z.array(y_).min(1).meta(ye),segment_ids:z.array(z.string()).default([]).meta(ye),visibility:F0.default("public").meta(ye),period_scope:__.optional().meta(ye),instance:z.string().max(100).optional().meta(ye),reset_period:B0.optional().meta(ye),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ye),enforcement:b_.optional().meta(ye),warning_threshold_percent:ba.optional().meta(ye),overage_price_ref:z.string().optional().meta(ye),grace_period_hours:z.number().int().min(0).optional().meta(ye),tier_value:z.string().optional().meta(ye),rate_value:z.number().optional().meta(ye),initial_grant:z.number().optional().meta(ye),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ye),rollover_enabled:z.boolean().optional().meta(ye),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ye),seat_type_id:z.string().optional().meta(ye),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ye),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ye),stripe_metered_price_id:z.string().optional().meta(ye),enabled:z.boolean().optional().meta(ye),allocation:Hd.optional().meta(ye),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ye),amount_cents:z.number().int().optional().meta(ye),currency:z.string().optional().meta(ye)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":h_,...g_,...es()}),V0=jr("EntitlementRuleAnchor");go.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 q0=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),D0=z.object({code:q0.meta(ye),message:z.string().min(1).meta(ye),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ye)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),_p=go.extend({warnings:z.array(D0).optional().meta(ye)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":li,"x-revturbine-schema-exposure":Zr}),bp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...ye,readOnly:true}),rule_id:z.string().min(1).meta(ye),experiment_id:z.string().min(1).meta(ye),variant_name:z.string().min(1).max(200).meta(ye),is_control:z.boolean().default(false).meta(ye),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ye)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":h_,...A0,...es()}),M0=oi(lo),N0=oi(go);({"/api/entitlement-anchors":{get:B({operationId:"listEntitlementAnchors",requestParams:{query:mn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:un(U0)}}},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:B({operationId:"listEntitlementRuleAnchors",requestParams:{query:mn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:un(V0)}}},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:B({operationId:"listEntitlements",requestParams:{query:mn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:un(lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:B({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(lo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:B({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:B({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:M0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:B({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:B({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:mn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:un(go)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:B({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(go)}}},responses:{201:{description:"Created",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:B({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:N0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:B({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:mn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:un(bp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:B({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Or(bp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:rt}=Fi,{Persisted:ec,Transient:tc}=zs,{Internal:ts}=Ji,v_=Jn(vn.Playbook,{sdkInput:true}),x_=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),z0=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),Tp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),S_=z.object({name:Is.meta(rt),handle:lr.meta(rt),plan_id:z.string().nullable().optional().meta(rt),segment_id:z.string().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(rt),grace_period_days:z.number().int().min(0).default(0).meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),require_payment_method:z.boolean().default(false).meta(rt),auto_convert:z.boolean().default(true).meta(rt),convert_to_plan_id:z.string().optional().meta(rt),fallback_plan_id:z.string().optional().meta(rt),limit_per_customer:z.number().int().min(1).default(1).meta(rt),is_active:z.boolean().default(true).meta(rt),metadata:gi.meta(rt)}),ro=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(S_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...v_,...Qi()}),H0=jr("FreeTrialRuleAnchor"),K0=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),P_=z.object({name:Is.meta(rt),handle:lr.meta(rt),premium_plan_id:z.string().min(1).meta(rt),fallback_plan_id:z.string().min(1).meta(rt),segment_id:z.string().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),start_policy:K0.default("signup").meta(rt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(rt),entitlements_during_trial:z.array(z.string()).default([]).meta(rt),is_active:z.boolean().default(true).meta(rt),metadata:gi.meta(rt)}),io=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(P_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...v_,...Qi()}),G0=jr("ReverseTrialRuleAnchor"),I_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),T_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":tc,"x-revturbine-schema-exposure":ts}),so=On.merge(qn).merge(Dn).extend({trial_limit_policy:I_.default("1_per_lifetime").meta(rt),eligibility_scope:T_.default("per_customer").meta(rt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...x_}),ao=On.merge(qn).merge(Dn).extend({trial_limit_policy:I_.default("1_per_lifetime").meta(rt),eligibility_scope:T_.default("per_customer").meta(rt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts,...x_}),Nd=On.merge(qn).merge(Dn).extend({customer_id:z.string().min(1).meta(rt),rule_id:z.string().min(1).meta(rt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(rt),plan_id:z.string().min(1).meta(rt),status:z0.default("active").meta(rt),started_at:z.string().datetime().meta({...rt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(rt),trial_limit_type:Tp.default("time").meta(rt),usage_entitlement_handle:z.string().min(1).optional().meta(rt),usage_limit_value:z.number().int().min(1).optional().meta(rt),converted_at:Fd.meta(rt),cancelled_at:Fd.meta(rt),metadata:gi.meta(rt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":ec,"x-revturbine-schema-exposure":ts});({"/api/free-trial-rule-anchors":{get:B({operationId:"listFreeTrialRuleAnchors",requestParams:{query:mn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:un(H0)}}},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:B({operationId:"listFreeTrialRules",requestParams:{query:mn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:un(ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:B({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:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:B({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"listReverseTrialRuleAnchors",requestParams:{query:mn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:un(G0)}}},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:B({operationId:"listReverseTrialRules",requestParams:{query:mn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:un(io)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:B({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:io}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:B({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:io.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:B({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:B({operationId:"listFreeTrialSettings",requestParams:{query:mn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:un(so)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:B({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:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:B({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:so.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:B({operationId:"listReverseTrialSettings",requestParams:{query:mn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:un(ao)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:B({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:B({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ao.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:B({operationId:"listTrialInstances",requestParams:{query:mn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:un(Nd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:B({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:B({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:B({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:Nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:rn,Financial:zd}=Fi,{Persisted:nc,Transient:Kd}=zs,{External:Ts}=Ji,$0=Jn(vn.Playbook,{sdkInput:true}),W0=Jn(vn.Playbook,{sdkInput:false}),Cp=Jn(vn.Billing,{sdkInput:false}),Ks=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),rc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),Gd=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),co=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),name:Is.meta(rn),handle:lr.meta(rn),tier_position:z.number().int().min(0).default(0).meta(rn),sort_order:z.number().int().default(0).meta(rn),visibility:Ks.default("public").meta(rn),metadata:gi.meta(rn)}).meta({id:"Plan","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...$0,...Qi()}),Z0=jr("PlanAnchor"),uo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),handle:lr.meta({...rn,readOnly:true}),plan_id:z.string().min(1).meta(rn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(rn),segment_id:z.string().nullable().default(null).meta(rn),price_amount:z.number().min(0).meta(zd),pricing_model:rc.meta(rn),visibility:Ks.default("public").meta(rn),stripe_price_id:z.string().optional().meta(rn),price_source:Gd.default("static").meta(rn)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp,...es()}),Y0=jr("PlanVariationAnchor"),mo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),name:Is.meta(rn),handle:lr.meta(rn),sort_order:z.number().int().default(0).meta(rn),visibility:Ks.default("public").meta(rn),metadata:gi.meta(rn)}).meta({id:"AddOn","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...W0,...Qi()}),J0=jr("AddOnAnchor"),po=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...rn,readOnly:true}),handle:lr.meta({...rn,readOnly:true}),addon_id:z.string().min(1).meta(rn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(rn),segment_id:z.string().nullable().default(null).meta(rn),price_amount:z.number().min(0).meta(zd),pricing_model:rc.meta(rn),visibility:Ks.default("public").meta(rn),stripe_price_id:z.string().optional().meta(rn),price_source:Gd.default("static").meta(rn)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp,...es()}),X0=jr("AddOnVariationAnchor"),Q0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Kd,"x-revturbine-schema-exposure":Ts}),fo=On.merge(qn).merge(Dn).extend({stripe_price_id:z.string().min(1).meta(rn),stripe_product_id:z.string().min(1).meta(rn),billing_period:Q0.meta(rn),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(zd),currency:Hg.meta(zd),pricing_model:rc.meta(rn),nickname:z.string().nullable().default(null).meta(rn),is_mock:z.boolean().default(false).meta(rn),last_updated_from_stripe:Fd.meta(rn)}).meta({id:"StripePrice","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":Ts,...Cp}),eT=oi(co),tT=oi(uo),nT=oi(mo),rT=oi(po),iT=oi(fo);({"/api/plan-anchors":{get:B({operationId:"listPlanAnchors",requestParams:{query:mn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:un(Z0)}}},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:B({operationId:"listPlans",requestParams:{query:mn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:un(co)}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:B({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(co)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:co}}},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:B({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:co}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:B({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:eT}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:co}}},default:{description:"Error response",content:{"application/json":{schema:rr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:B({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:B({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:B({operationId:"listPlanVariationAnchors",requestParams:{query:mn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:un(Y0)}}},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:B({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:mn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:un(uo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:B({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(uo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:B({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:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:B({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tT}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:uo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:B({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:B({operationId:"listAddOnAnchors",requestParams:{query:mn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:un(J0)}}},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:B({operationId:"listAddOns",requestParams:{query:mn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:un(mo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:B({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(mo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:B({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:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:B({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:nT}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:B({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:B({operationId:"listAddOnVariationAnchors",requestParams:{query:mn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:un(X0)}}},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:B({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:mn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:un(po)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:B({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(po)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:B({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:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:B({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:rT}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:B({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:B({operationId:"listStripePrices",requestParams:{query:mn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:un(fo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:B({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Or(fo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:B({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:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:B({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:iT}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:B({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:f}=Fi,{Persisted:_o,Transient:ct}=zs,{Internal:vi,External:Ft}=Ji,Tt=Jn(vn.Playbook,{sdkInput:true}),ho=Jn(vn.Playbook,{sdkInput:false}),Hs=Jn(vn.Playbook,{inConfig:false,sdkInput:false}),C_=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),oo=Jn(vn.Playbook,{inConfig:false,sdkInput:true,source:Li.CodeConstant}),yp=Jn(vn.Playbook,{inConfig:false,sdkInput:true,source:Li.Runtime}),vp=Jn(vn.Playbook,{inConfig:false,sdkInput:false,source:Li.Runtime}),sT=Jn(vn.Billing,{sdkInput:false}),aT=Jn(vn.Metering,{sdkInput:false}),oT=Jn(vn.Branding,{inConfig:true,sdkInput:true}),lT=Jn(vn.Branding,{sdkInput:false}),cT="1.0.0",Yl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),name:Is.meta(f),handle:lr.meta(f),description:jd.meta(f),is_default:z.boolean().default(false).meta(f),entitlement_ids:z.array(z.string()).default([]).meta(f),metadata:gi.meta(f)}).meta({id:"SeatType","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...Hs,...Qi()}),dT=jr("SeatTypeAnchor"),Jl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta(f),label:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().nullable().default(null).meta(f),example_value:z.string().nullable().default(null).meta(f),value_map:z.record(z.string(),z.string()).default({}).meta(f),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(f),metadata:gi.meta(f)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...Hs,...Qi()}),uT=jr("PersonalizationTokenAnchor"),mT=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),xp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...f,readOnly:true}),stripe_account_id:z.string().min(1).meta(f),live_mode:z.boolean().default(false).meta(f),onboarding_state:mT.default("not_started").meta({...f,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...f,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...f,readOnly:true}),details_submitted:z.boolean().default(false).meta({...f,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...f,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...f,readOnly:true}),sync_products:z.boolean().default(true).meta(f),sync_prices:z.boolean().default(true).meta(f),sync_subscriptions:z.boolean().default(true).meta(f),sync_invoices:z.boolean().default(false).meta(f),default_currency:z.string().length(3).default("USD").meta(f),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(f),last_sync_at:z.string().optional().meta({...f,readOnly:true}),metadata:gi.meta(f)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...sT,...es()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(f),workspace_name:z.string().optional().meta(f),logo_url:z.string().optional().meta(f),support_email:z.string().optional().meta(f)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...lT});var Xl=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({handle:lr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),meter_key:z.string().min(1).max(100).meta(f),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(f),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(f),stripe_meter_id:z.string().nullable().default(null).meta(f),is_active:z.boolean().default(true).meta(f),metadata:gi.meta(f)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...aT,...es()}),u_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),Ql=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),soft_limit_percent:z.number().min(0).max(100).default(80).meta(f),hard_limit_percent:z.number().min(0).max(100).default(100).meta(f),soft_limit_action:u_.default("warn").meta(f),hard_limit_action:u_.default("block").meta(f),grace_period_hours:z.number().int().min(0).default(0).meta(f),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...C_,...es()}),pT=jr("UsageEnforcementSettingsAnchor"),fT=z.object({kind:z.enum(["template","slot"]).meta(f),id:z.string().min(1).meta(f),label:z.string().min(1).optional().meta(f)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),hT=z.object({id:z.string().min(1).meta(f),group:z.array(fT).min(1).meta(f),cap:z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month"]).meta(f)}).meta(f)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),gT=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),R_=z.object({capRules:z.array(hT).default([]).meta(f),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(f),remindLaterMinutes:z.number().int().min(0).default(60).meta(f),testMode:gT.default("off").meta(f)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":vi}),Sp=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:lr.meta({...f,readOnly:true}),global_frequency_cap:R_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(f)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":_o,"x-revturbine-schema-exposure":vi,...C_,...es()}),_T=jr("PlacementSettingsAnchor"),bT=z.object({field:z.string().min(1).meta(f),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(f),value:z.string().meta(f)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),yT=z.object({name:z.string().min(1).meta(f),handle:z.string().min(1).meta(f),predicates:z.array(bT).optional().meta(f),dimension_id:z.string().optional().meta(f),experiment_id:z.string().min(1).optional().meta(f)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),vT=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),tier_position:z.number().int().min(0).default(0).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Ks.default("public").meta(f)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),xT=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Ks.default("public").meta(f)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...ho}),ST=z.object({handle:z.string().min(1).meta(f),plan_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:rc.meta(f),visibility:Ks.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Gd.meta(f)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),PT=z.object({handle:z.string().min(1).meta(f),addon_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:rc.meta(f),visibility:Ks.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Gd.meta(f)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),IT=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),is_default:z.boolean().default(false).meta(f),entitlement_handles:z.array(z.string()).default([]).meta(f)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),TT=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().nullable().default(null).meta(f),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),soft_limit_action:z.string().meta(f),hard_limit_action:z.string().meta(f),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(f),notification_channels:z.array(z.string()).default([]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),CT=z.object({handle:z.string().min(1).meta(f),global_frequency_cap:R_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),RT=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:z.string().nullable().default(null).meta(f),visibility_toggle:z.boolean().default(true).meta(f),source_type:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),kT=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().min(1).meta(f),meter_handle:z.string().min(1).meta(f),limit:z.number().int().min(0).nullable().default(null).meta(f),reset_period:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),ET=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),type:Od.meta(f),unit:z.string().optional().meta(f),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),k_=z.object({id:z.string().min(1).meta(f),entitlement_id:z.string().min(1).meta(f),targets:z.array(y_).min(1).meta(f),segment_ids:z.array(z.string()).default([]).meta(f),kind:Od.optional().meta({...f,readOnly:true}),unit:z.string().optional().meta({...f,readOnly:true}),tier_name:z.string().optional().meta({...f,readOnly:true}),tier_description:z.string().optional().meta({...f,readOnly:true}),...go.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(f),allocation:Hd.optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),wT=z.object({slot_id:z.string().min(1).meta(f),active:z.boolean().meta(f),triggers:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),AT=z.object({id:z.string().min(1).meta(f),label:z.string().min(1).meta(f),description:z.string().meta(f),surface_type:z.string().meta(f),placement_handle:z.string().min(1).meta(f),template:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),OT=z.object({name:z.string().min(1).meta(f),type:z.string().optional().meta(f),required:z.boolean().optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),jT=z.object({id:z.string().min(1).meta(f),surface_type:z.string().meta(f),fields:z.array(OT).optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),FT=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":ct,"x-revturbine-schema-exposure":Ft}),LT=z.object({name:z.string().min(1).meta(f),action_type:FT.meta(f),plan_handle:z.string().optional().meta(f),promotion_id:z.string().optional().meta(f),placement_handle:z.string().optional().meta(f),url:z.string().optional().meta(f),tour_id:z.string().optional().meta(f),target_billing_period:z.enum(["monthly","annual"]).optional().meta(f),description:z.string().optional().meta(f)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),BT=z.object({id:z.string().meta(f),name:z.string().meta(f),discount:z.string().meta(f),type:z.string().meta(f),status:z.string().meta(f)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),UT=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(f),label:z.string().min(1).meta(f),description:z.string().optional().meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().optional().meta(f),example_value:z.string().optional().meta(f),value_map:z.record(z.string(),z.string()).optional().meta(f),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(f)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),m_=z.object({header:z.string().optional().meta(f),body:z.string().optional().meta(f),cta_label:z.string().optional().meta(f),secondary_cta_label:z.string().optional().meta(f)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),VT=z.object({block_id:z.string().min(1).meta(f),tenant_id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),surface_template_id:z.string().optional().meta(f),default_content:m_.meta(f),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:m_})).optional().meta(f),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(f),tokens_used:z.array(z.string()).optional().meta(f),status:z.enum(["draft","active","archived"]).meta(f),created_at:z.string().datetime().meta({...f,readOnly:true}),updated_at:z.string().datetime().meta({...f,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),qT=z.object({label:z.string().meta(f),path:Kg.meta(f),config:z.record(z.string(),z.string()).optional().meta(f)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),E_=z.object({template_id:z.string().min(1).meta(f),fields:z.record(z.string(),z.string()).meta(f),ctas:z.array(qT).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),w_=z.object({plan_ids:z.array(z.string()).meta(f),billing_cadences:z.array(z.string()).optional().meta(f),segment_chips:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),DT=z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month","lifetime"]).meta(f)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),A_=z.object({max_per_period:DT.optional().meta(f),cooldown_days:z.number().int().min(0).optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),MT=z.object({id:z.string().min(1).meta(f),target:w_.meta(f),surfaces:z.array(E_).meta(f),caps:A_.optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().optional().meta({...f,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(f),recommendation_plan_override:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),NT=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:ba}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ba}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ba}),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":ct,"x-revturbine-schema-exposure":Ft}),zT=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft}),HT=z.object({id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:zT.meta(f),trigger:NT.meta(f),payloads:z.array(MT).meta(f),order:z.number().int().min(0).meta(f)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),KT=z.object({payload_id:z.string().min(1).meta(f),placement_id:z.string().min(1).meta(f),target:w_.meta(f),caps:A_.optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().meta({...f,readOnly:true}),updated_at:z.string().datetime().optional().meta({...f,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(f),surfaces:z.array(E_).optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),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(f)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),GT=z.object({kind:z.string().min(1).meta(f),schema_version:z.number().int().nonnegative().meta(f),config:z.unknown().meta(f)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),$T=On.merge(S_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),WT=On.merge(P_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Hs}),ZT=z.object({plans:z.array(vT).meta({...f,...Tt}),addons:z.array(xT).optional().meta({...f,...ho}),entitlements:z.array(ET).meta({...f,...Tt}),entitlement_rules:z.array(k_).meta({...f,...Tt}),segments:z.array(yT).meta({...f,...Tt}),content_ui_paths:z.array(LT).meta({...f,...Tt}),slot_configs:z.array(wT).optional().meta({...f,...Tt,...hp({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...f,...Tt,...hp({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...f,...oT,...hp({since:"0.1.111",replacement:"SDK branding argument",removeAfter:"one compatibility window",reason:"Branding is independently owned and is not Playbook strategy."})}),placement_slots:z.array(AT).optional().meta({...f,...Tt}),message_blocks:z.array(VT).optional().meta({...f,...Tt}),placement_payloads:z.array(KT).optional().meta({...f,...Tt}),placements:z.array(HT).optional().meta({...f,...Tt}),content_promotions:z.array(BT).optional().meta({...f,...Tt}),personalization_tokens:z.array(UT).optional().meta({...f,...Tt}),surface_templates:z.array(jT).optional().meta({...f,...Tt}),free_trial_rules:z.array($T).optional().meta({...f,...ho}),reverse_trial_rules:z.array(WT).optional().meta({...f,...ho}),plan_variations:z.array(ST).optional().meta({...f,...ho}),addon_variations:z.array(PT).optional().meta({...f,...ho}),extension_rules:z.array(GT).optional().meta({...f,...Tt}),seat_types:z.array(IT).optional().meta({...f,...Tt}),enforcement_defaults:z.array(TT).optional().meta({...f,...Tt}),placement_settings:z.array(CT).optional().meta({...f,...Tt}),segment_dimensions:z.array(RT).optional().meta({...f,...Tt}),meter_bindings:z.array(kT).optional().meta({...f,...Tt}),experiments:z.array(z.unknown()).max(0).optional().meta({...f,...Hs}),signal_catalog:z.object({}).strict().optional().meta({...f,...Hs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt}),YT=z.object({artifact_type:z.literal("playbook").meta({...f,...oo,readOnly:true}),format_version:z.literal(cT).meta({...f,...oo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...f,...oo}),playbook_version_id:z.string().nullable().default(null).meta({...f,...yp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),project_id:z.string().min(1).optional().meta({...f,...vp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...f,...yp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...f,...oo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...f,...oo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...f,...oo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...yp}),O_=YT.extend(ZT.shape).meta({"x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});function JT(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function j_(t){if(!JT(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(j_,O_).meta({id:"Playbook","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});z.preprocess(j_,O_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ct,"x-revturbine-schema-exposure":Ft,...Tt});({"/api/seat-type-anchors":{get:B({operationId:"listSeatTypeAnchors",requestParams:{query:mn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:un(dT)}}},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:B({operationId:"listSeatTypes",requestParams:{query:mn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:un(Yl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:B({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:B({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:B({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:B({operationId:"listPersonalizationTokenAnchors",requestParams:{query:mn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:un(uT)}}},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:B({operationId:"listPersonalizationTokens",requestParams:{query:mn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:un(Jl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:B({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:B({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:B({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:B({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:oi(xp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:xp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:B({operationId:"listMeteringConfigs",requestParams:{query:mn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:un(Xl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:B({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:B({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Xl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:B({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:B({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:mn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:un(pT)}}},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:B({operationId:"listUsageEnforcementSettings",requestParams:{query:mn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:un(Ql)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:B({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Or(Ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ql}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:B({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:B({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:B({operationId:"listPlacementSettingsAnchors",requestParams:{query:mn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:un(_T)}}},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:B({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:oi(Sp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Sp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var $d=new Int32Array(2);new Float32Array($d.buffer);new Float64Array($d.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Wd;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(Wd||(Wd={}));var K_=14,G_=11;var $_=4294967295;var W_=$_;function Ep(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 kp(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Ep(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 Z_(t,e){let n=t.filter(a=>a.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(a=>a.trialTrigger?.kind!=="trial_progress"?false:e>=a.trialTrigger.progressPercent);if(r.length===0)return null;let i=r[0];for(let a of r.slice(1)){let o=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1,l=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(o>l||o===l&&a.entryOrder<i.entryOrder)&&(i=a);}let s=r.filter(a=>a!==i).map(a=>a.ruleId).filter(a=>typeof a=="string"&&a.length>0);return {winner:i,supersededIds:s}}function Y_(t){switch(t.kind){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof t.progressPercent=="number"?{kind:"trial_progress",progressPercent:t.progressPercent}:void 0;case "trial_ending":return typeof t.daysBeforeEnd=="number"?{kind:"trial_ending",daysBeforeEnd:t.daysBeforeEnd}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function J_(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 yo(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(a=>[a.block_id,a])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],i=Array.isArray(t.promotions)?t.promotions:[],s=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:a=>e.filter(o=>o.surface_template_id===a),getMessageBlockById:a=>n.get(a),getUiPathById:a=>r.find(o=>o.id===a||o.name===a),getPromotionById:a=>i.find(o=>o.id===a||o.name===a),listPersonalizationTokens:()=>s}}function vo(t,e){let n={...t};for(let r of e){let i=t[r.token];if(i==null||!r.value_map)continue;let s=String(i),a=r.value_map[s];a!==void 0&&(n[r.token]=a);}return n}function wp(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 s=e[i];if(s===void 0){let a=n[i];a&&(s=e[a]);}return s===void 0?r:String(s)})}function Ap(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 X_(t,e){return Ap(t,e)}function Yd(t,e,n,r,i,s,a){let o=n.filter(P=>P.surface_template_id===t&&P.status==="active");if(o.length===0)return null;let l=new Map(r.map(P=>[P.block_id,P])),b=new Set(e.segmentIds),p=vo(s,i),v=a?.segmentDimensions;for(let P of o){let S=P.default_message_block_id,y,T=P.ui_path_id,E=P.promotion_id;if(P.segment_content_map){if(v&&Object.keys(v).length>0){let R=new Map;for(let C of P.segment_content_map){let D=C.dimension;if(!D)continue;let ae=R.get(D)??[];ae.push(C),R.set(D,ae);}if(R.size>0){let C=true,D;for(let[,ae]of R){let Me=ae.find(L=>b.has(L.segment_id));if(!Me){C=false;break}D||(D=Me);}if(C&&D)S=D.message_block_id,y=D.segment_id,D.ui_path_id&&(T=D.ui_path_id),D.promotion_id&&(E=D.promotion_id);else if(!C)continue}else for(let C of P.segment_content_map)if(b.has(C.segment_id)){S=C.message_block_id,y=C.segment_id,C.ui_path_id&&(T=C.ui_path_id),C.promotion_id&&(E=C.promotion_id);break}}else for(let R of P.segment_content_map)if(b.has(R.segment_id)){S=R.message_block_id,y=R.segment_id,R.ui_path_id&&(T=R.ui_path_id),R.promotion_id&&(E=R.promotion_id);break}}let A=l.get(S);if(!A||A.status!=="active")continue;let k={...A.default_content};if(A.segment_overrides){let R=y?A.segment_overrides.find(C=>C.segment_value_id===y):A.segment_overrides.find(C=>b.has(C.segment_value_id));R&&(k={...k,...R.content},y=R.segment_value_id);}let O=X_(k,p);return {payload:P,messageBlock:A,resolvedContent:O,matchedSegmentId:y,uiPathId:T,promotionId:E}}return null}async function sc(t,e,n,r,i){let a=(await Promise.resolve(n.listPayloads(t))).filter(p=>p.status==="active");if(a.length===0)return null;let o=new Set(e.segmentIds),l=i??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),b=vo(r,l);for(let p of a){let v=p.default_message_block_id,P,S=p.ui_path_id,y=p.promotion_id;if(p.segment_content_map){for(let R of p.segment_content_map)if(o.has(R.segment_id)){v=R.message_block_id,P=R.segment_id,R.ui_path_id&&(S=R.ui_path_id),R.promotion_id&&(y=R.promotion_id);break}}let T=await Promise.resolve(n.getMessageBlockById(v));if(!T||T.status!=="active")continue;let E={...T.default_content};if(T.segment_overrides){let R=P?T.segment_overrides.find(C=>C.segment_value_id===P):T.segment_overrides.find(C=>o.has(C.segment_value_id));R&&(E={...E,...R.content},P=R.segment_value_id);}let A=X_(E,b),k;S&&n.getUiPathById&&(k=await Promise.resolve(n.getUiPathById(S)));let O;return y&&n.getPromotionById&&(O=await Promise.resolve(n.getPromotionById(y))),{payload:p,messageBlock:T,resolvedContent:A,matchedSegmentId:P,uiPathId:S,promotionId:y,uiPath:k??void 0,promotion:O??void 0}}return null}function QT(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 eC(t,e){let n=QT(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 tC(t,e){if(!e)return null;let n=eC(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 D_(t,e){if(!t)return true;let n=tC(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Ne}=Fi,{Persisted:Jd,Transient:Gs}=zs,{External:xi}=Ji,Q_=Jn(vn.Playbook,{sdkInput:true});Jn(vn.Playbook,{inConfig:false,sdkInput:false});var nC=Jn(vn.Playbook,{inConfig:false,sdkInput:true}),rC=Jn(vn.Playbook,{inConfig:false,sdkInput:false,source:Li.Runtime}),iC=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),sC={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function aC(t){return sC[t]??[]}function oC(t,e){return aC(e).includes(t)}var eb=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),tb=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),lC=z.object({count:z.number().int().positive().meta(Ne),period:tb.meta(Ne)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi});z.object({surface_type:z.string().min(1).meta(Ne),rules:z.array(lC).meta(Ne),cooldown_ms:z.number().int().nonnegative().optional().meta(Ne)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Fi.Operational,...nC});var cC=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":xi}),bo=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),name:Is.meta(Ne),handle:lr.meta(Ne),description:jd.meta(Ne),category:eb.meta(Ne),drag_order_in_category:z.number().int().default(0).meta(Ne),surface_slot_id:z.string().optional().meta(Ne),entitlement_id:z.string().optional().meta(Ne),tier_threshold:z.string().optional().meta(Ne),threshold_percent:ba.optional().meta(Ne),trial_type:z.enum(["free","reverse"]).optional().meta(Ne),trigger_type:z.string().optional().meta(Ne),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ne),days_before_end:z.number().int().min(0).optional().meta(Ne),qualifier:iC.optional().meta(Ne),activation_window_start:z.string().datetime().optional().meta(Ne),activation_window_end:z.string().datetime().optional().meta(Ne),metadata:gi.meta(Ne)}).meta({id:"Placement","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Q_,...Qi()}),dC=jr("PlacementAnchor"),uC=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),mC=z.object({code:uC.meta(Ne),message:z.string().min(1).meta(Ne),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ne)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),M_=bo.extend({warnings:z.array(mC).optional().meta(Ne)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),pC=z.object({label:z.string().min(1).max(200).meta(Ne),cta_path_type:cC.meta(Ne),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ne)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Gs,"x-revturbine-schema-exposure":xi}),ic=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),handle:lr.meta({...Ne,readOnly:true}),placement_id:z.string().min(1).meta(Ne),drag_order:z.number().int().default(0).meta(Ne),target_plan_ids:z.array(z.string()).default([]).meta(Ne),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ne),target_segments:z.array(z.string()).default([]).meta(Ne),surface_slot_ids:z.array(z.string()).default([]).meta(Ne),surface_template_id:z.string().min(1).meta(Ne),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ne),cta_list:z.array(pC).default([]).meta(Ne),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ne),max_period_unit:tb.default("session").meta(Ne),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ne),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ne),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ne),recommendation_plan_override:z.string().optional().meta(Ne)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...Q_,...es()}),fC=jr("PlacementPayloadAnchor"),hC=On.merge(qn).merge(Dn).merge(sr).merge(cr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ne),surface_type:Jm.meta(Ne),surface_template_ids:z.array(z.string()).default([]).meta(Ne),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ne),first_seen:z.string().datetime().meta({...Ne,readOnly:true}),last_seen:z.string().datetime().meta({...Ne,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ne),placement_count:z.number().int().min(0).default(0).meta({...Ne,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Jd,"x-revturbine-schema-exposure":xi,...rC,...Qi("surface_slot_handle")}),gC=oi(bo),_C=oi(ic);({"/api/placement-anchors":{get:B({operationId:"listPlacementAnchors",requestParams:{query:mn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:un(dC)}}},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:B({operationId:"listPlacements",requestParams:{query:mn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:un(bo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:B({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Or(bo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:M_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:B({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:B({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:gC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:M_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:B({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:B({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:B({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:eb,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:B({operationId:"listPlacementPayloadAnchors",requestParams:{query:mn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:un(fC)}}},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:B({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:mn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:un(ic)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:B({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Or(ic)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:B({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:_C}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:B({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:B({operationId:"listSurfaceSlots",requestParams:{query:mn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:un(hC)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function N_(t,e,n){if(!t)return true;if(!oC(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 z_(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 s=n?.tiers?.[t.entitlementHandle];return (s?r.indexOf(s):-1)<i}var nb={modal_overlay:"modal",banner_placement:"banner",in_page_card:"in_page",inline_gate_message:"in_page",usage_counter:"in_page",button:"button",email:"email",full_page:"full_page"};function bC(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 yC(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=bC(r,t);continue}e[n]=r;}return e}function rb(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 ib(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function vC(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 ib(e,n)}function xC(t){if(t)return ib(t.kind,t.qualifier)}function sb(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 SC(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 sb(n,e,r)}function PC(t,e){if(t)return sb(t.kind,e,t.thresholdPercent)}function ab(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 IC(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 ab(n,e,r)}function TC(t,e){if(t)return ab(t.kind,e,t.tierThreshold)}function CC(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function RC(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function kC(t,e){let n={...nb};for(let o of t.surface_templates??[])n[o.id]=o.surface_type;let r=new Map;for(let o of t.plans??[])r.set(o.unique_handle,o.unique_handle);let i=new Map;for(let o of t.entitlements??[])o.tier_definitions?.length&&i.set(o.unique_handle,o.tier_definitions.map(l=>l.handle));let s=new Map,a=new Map;for(let o of e.placements){let l=o.payloads[0];if(!l)continue;let b=l.surfaces[0];if(!b)continue;let p=b.template_id,v=n[p]??"custom",P={...b.fields};b.ctas?.[0]&&(P.cta_label=b.ctas[0].label),b.ctas?.[1]&&(P.secondary_cta_label=b.ctas[1].label);let S=rb(b.ctas?.[0]),y=Array.isArray(l.target?.plan_ids)?l.target.plan_ids:[],T=CC(o.trigger),E=RC(o.trigger),A=J_(o.trigger),k=SC(o.trigger,T),O=vC(o.trigger),R=IC(o.trigger,T),C={output_id:l.id,category:o.category,surface:{template:p,type:v,slot_id:o.id},content:{...P,__target_plan_ids:y,...T?{__trigger_entitlement_handle:T}:{},...A?{__trigger_kind:A.kind}:{}},cta_path:S,rule_id:o.id,decision_id:l.id,config_version:wd(t),present_upsell:true},D=s.get(p)??[];D.push({output:C,entryOrder:o.order??0,entryCategory:o.category,triggerEntitlementHandle:T,triggerSlotId:E,trialTrigger:A,thresholdTrigger:k,qualifierTrigger:O,entitlementGateTrigger:R}),s.set(p,D);let ae=o.id.replace(/^pl_/,"");a.set(ae,C),a.set(o.id,C);}for(let o of s.values())o.sort((l,b)=>l.entryOrder-b.entryOrder);return {outputsByTemplate:s,outputsByName:a,planHandleToId:r,tierLaddersByHandle:i}}function EC(t,e){let n=e.trigger;if(n.kind==="entitlement_gate"||n.kind==="usage_threshold"||n.kind==="credit_threshold"||n.kind==="seat_threshold")return t.getEntitlement(n.entitlementIdx)?.uniqueHandle}function wC(t,e){return e.trigger.kind!=="surface_render"?void 0:t.getSlot(e.trigger.slotIdx)?.sourceId}function AC(t){let e={...nb};for(let o=0;o<t.surfaceTemplatesLength();o++){let l=t.getSurfaceTemplate(o);l&&(e[l.sourceId]=l.surfaceType);}let n=new Map;for(let o=0;o<t.plansLength();o++){let l=t.getPlan(o);l&&n.set(l.uniqueHandle,l.sourceId);}let r=new Map;for(let o=0;o<t.entitlementsLength();o++){let l=t.getEntitlement(o);l&&l.tierHandles.length>0&&r.set(l.uniqueHandle,l.tierHandles);}let i=new Map,s=new Map,a=t.header().configVersion;for(let o=0;o<t.placementsLength();o++){let l=t.getPlacement(o);if(!l)continue;let b=l.payloads[0];if(!b)continue;let p=b.surfaces[0];if(!p)continue;let v=p.templateSourceId,P=e[v]??"custom",S={...p.fields};p.ctas[0]&&(S.cta_label=p.ctas[0].label),p.ctas[1]&&(S.secondary_cta_label=p.ctas[1].label);let y=rb(p.ctas[0]),T=[];for(let L of b.target.planIdxs){let J=t.getPlan(L);J&&T.push(J.sourceId);}let E=EC(t,l),A=wC(t,l),k=Y_(l.trigger),O=PC(l.trigger,E),R=xC(l.trigger),C=TC(l.trigger,E),D={output_id:b.sourceId,category:l.category,surface:{template:v,type:P,slot_id:l.sourceId},content:{...S,__target_plan_ids:T,...E?{__trigger_entitlement_handle:E}:{},...k?{__trigger_kind:k.kind}:{}},cta_path:y,rule_id:l.sourceId,decision_id:b.sourceId,config_version:a,present_upsell:true},ae=i.get(v)??[];ae.push({output:D,entryOrder:l.order,entryCategory:l.category,triggerEntitlementHandle:E,triggerSlotId:A,trialTrigger:k,thresholdTrigger:O,qualifierTrigger:R,entitlementGateTrigger:C}),i.set(v,ae);let Me=l.sourceId.replace(/^pl_/,"");s.set(Me,D),s.set(l.sourceId,D);}for(let o of i.values())o.sort((l,b)=>l.entryOrder-b.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:n,tierLaddersByHandle:r}}function OC(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let i=new Map;for(let a of e.placements){let o=a.payloads[0]?.surfaces?.[0]?.template_id;o&&i.set(a.id,o);}let s=[];for(let a of r){let o=a.content_link?.message_block_id;if(!o)continue;let l=i.get(a.placement_id);l&&s.push({payload_id:a.payload_id,tenant_id:"",name:a.payload_id,surface_template_id:l,default_message_block_id:o,ui_path_id:a.content_link?.ui_path_id,promotion_id:a.content_link?.promotion_id,status:"active"});}if(s.length!==0)return yo({payloads:s,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function jC(t){let e=t.messageBlocksLength(),n=t.placementPayloadsLength();if(e===0||n===0)return;let r=new Map;for(let o=0;o<t.placementsLength();o++){let l=t.getPlacement(o);if(!l)continue;let b=l.payloads[0]?.surfaces?.[0]?.templateSourceId;b&&r.set(l.sourceId,b);}let i=[],s=new Map;for(let o=0;o<e;o++){let l=t.getMessageBlock(o);l&&(i.push(l),s.set(o,l.block_id));}let a=[];for(let o=0;o<n;o++){let l=t.getPlacementPayload(o);if(!l||l.messageBlockIdx===W_)continue;let b=s.get(l.messageBlockIdx);if(!b)continue;let p=r.get(l.placementSourceId);p&&a.push({payload_id:l.sourceId,tenant_id:"",name:l.sourceId,surface_template_id:p,default_message_block_id:b,status:"active"});}if(a.length!==0)return yo({payloads:a,messageBlocks:i})}function FC(t){let e={};for(let n=0;n<t.segmentsLength();n++){let r=t.getSegment(n);r?.experimentId&&(e[r.slug]=r.experimentId);}return e}function ob(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:i,planHandleToId:s,tierLaddersByHandle:a}=e.format==="flatbuffer"?AC(e.handle):kC(e.exportedConfig,e.placements),o=e.format==="json"?OC(e.exportedConfig,e.placements):jC(e.handle),l=e.format==="json"?c_(e.exportedConfig.segments??[]):FC(e.handle);function b(p,v,P,S){let y=Array.isArray(p.content.__target_plan_ids)?p.content.__target_plan_ids.filter(E=>typeof E=="string"):[],T=Array.isArray(p.content.__target_billing_periods)?p.content.__target_billing_periods.filter(E=>typeof E=="string"):[];return Pp({target_plan_ids:y,target_billing_periods:T,category:p.category},{currentPlanId:v,planHandle:P,billingPeriod:S}).eligible}return async(p,v,P)=>{let S=P?.__providers,y=S?.plan?.currentPlanHandle,T=S?.plan?.billingPeriod,E=y?s.get(y):void 0,A=Xe=>typeof Xe=="string"?Xe:"",k=Array.isArray(v?.metadata?.surface_template_ids)?v.metadata.surface_template_ids:void 0,O,R=[];if(k&&k.length>0){let Xe=[];for(let jt of k){let Ir=r.get(jt);Ir&&Xe.push(...Ir);}if(Xe.length===0)return H_(p,"no_candidates_for_template","No placements configured for this surface template");Xe.sort((jt,Ir)=>jt.entryOrder-Ir.entryOrder);let zt=v?.metadata?.entitlement_handle,At=v?.metadata?.surface_slot_category,Jt=At?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[At]:void 0,Ot=Xe;if(zt){let jt=Xe.filter(Ir=>Ir.triggerEntitlementHandle===zt);jt.length>0&&(Ot=jt);}let Y=v?.metadata?.surface_slot_id;if(Y){let jt=Ot.filter(Ir=>Ir.triggerSlotId===Y);jt.length>0&&(Ot=jt);}if(v?.metadata?.fixedOnly===true&&(Ot=Ot.filter(jt=>jt.entryCategory==="fixed")),Jt&&At!=="fixed"&&Ot.length>1){let jt=Ot.filter(Ir=>Jt.includes(Ir.entryCategory));jt.length>0&&(Ot=jt);}n&&(Ot=Ot.filter(jt=>!n.isHiddenSync(jt.output.rule_id??""))),Ot=Ot.filter(jt=>kp(jt.trialTrigger,S?.plan)),Ot=Ot.filter(jt=>D_(jt.thresholdTrigger,S?.entitlements)),Ot=Ot.filter(jt=>N_(jt.qualifierTrigger,jt.entryCategory,S?.plan)),Ot=Ot.filter(jt=>z_(jt.entitlementGateTrigger,a,S?.entitlements));let X,je=[],Zn=Ep(S?.plan);if(Zn!==null&&Ot.length>1){let jt=Ot.map(Ja=>({ruleId:Ja.output.rule_id??void 0,entryOrder:Ja.entryOrder,trialTrigger:Ja.trialTrigger,output:Ja.output})),Ir=Z_(jt,Zn);if(Ir){X=Ir.winner,je=Ir.supersededIds;let Ja=Ir.winner.ruleId;Ot=Ot.filter(Og=>Og.trialTrigger?.kind!=="trial_progress"||(Og.output.rule_id??void 0)===Ja);}}let Gr;for(let jt of Ot)if(b(jt.output,E,y,T)){O=jt.output,Gr=jt;break}Gr&&X&&X.ruleId===(Gr.output.rule_id??void 0)&&je.length>0&&(O={...O,content:{...O.content,__superseded_placement_ids:je}}),O||(R=["no_eligible_candidate"]);}else {let Xe=v?.name,zt=(Xe?i.get(Xe):void 0)??i.get(p.placementId),At;if(zt)for(let dn of r.values()){let Jt=dn.find(Ot=>Ot.output===zt);if(Jt){At=Jt;break}}zt&&n?.isHiddenSync(zt.rule_id??"")?R=["placement_retired"]:zt&&!kp(At?.trialTrigger,S?.plan)?R=["trial_trigger_unmet"]:zt&&!D_(At?.thresholdTrigger,S?.entitlements)?R=["threshold_trigger_unmet"]:zt&&!N_(At?.qualifierTrigger,At?.entryCategory??zt.category,S?.plan)?R=["qualifier_trigger_unmet"]:zt&&!z_(At?.entitlementGateTrigger,a,S?.entitlements)?R=["entitlement_gate_unmet"]:zt&&b(zt,E,y,T)?O=zt:zt?R=["plan_target_mismatch"]:R=["placement_not_found"];}if(!O){let Xe=R[0]??"placement_not_found";return H_(p,Xe,"Placement not configured")}let C=O.content,D=O.surface.template;if(o&&D){let Xe={userId:typeof p.userId=="string"?p.userId:"",segmentIds:S?.segments?.segmentIds??[]},zt=await sc(D,Xe,o,{});zt&&(C={...O.content,...zt.resolvedContent});}let ae={...C},Me=typeof ae.entitlement=="string"?ae.entitlement:typeof ae.__trigger_entitlement_handle=="string"?ae.__trigger_entitlement_handle:void 0,L=Me?S?.entitlements?.usage?.[Me]:void 0;if(L){ae.usage_remaining=Number.isFinite(L.remaining)?L.remaining:0,ae.usage_limit=Number.isFinite(L.limit)?L.limit:0,ae.usage_current=Number.isFinite(L.used)?L.used:0,ae.usage_percent=L.limit>0?Math.min(100,Math.round(L.used/L.limit*100)):0;let Xe=L.reset_date;typeof Xe=="string"&&Xe.length>0&&(ae.reset_date=Xe);}let J=yC(ae),ge=d_(l,S?.segments?.segmentIds??[],S?.experiments?.assignments),Ae={...O,content:J,...ge},Je=!((O.category==="upsell"||O.category==="trial_conversion")&&y==="enterprise");return {placementId:p.placementId,requestId:`local_${Date.now()}`,visible:Je,decisionSource:"fallback",reasonCodes:Je?[]:["plan_tier_suppressed"],content:{header:A(Ae.content.header),body:A(Ae.content.body),cta_label:A(Ae.content.cta_label),title:A(Ae.content.header),cta:A(Ae.content.cta_label)},output:Ae}}}function H_(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 ya(t){return ob({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}var lb=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(lb).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)});function So(){return typeof window>"u"||typeof document>"u"}function Fr(){return !So()}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([s,a])=>{let o=this.cache.get(s),l=Date.now();if(o&&o.ttlMs>0&&l-o.resolvedAt<o.ttlMs)return [s,o.value];let b=await a.resolve();return this.cache.set(s,{value:b,resolvedAt:l,ttlMs:a.cacheTtlMs??0}),[s,b]})),n={},r={},i=false;for(let[s,a]of e)if(s==="traits"||s.startsWith("traits:")){let o=a;o?.traits&&(Object.assign(r,o.traits),i=true);}else n[s]=a;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();}},VC=new Set(["cta_completed"]),qC=1440*60*1e3,cb=10080*60*1e3,DC="revturbine:interaction-state",db=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cb,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??{},s={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let a=Number(r.remind_after_seconds);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(s.suppressedUntil=n+300*1e3),this.state.set(e,s),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 `${DC}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},MC="revturbine:presentation-caps";function xo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function NC(t){if(!xo(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 ub=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:[]},s={...i,seenAt:i.seenAt.filter(l=>Number.isFinite(l)&&l>0)},a=Gl({perPayload:{policies:e,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!a.allowed)return this.capsByKey.set(n,s),{allowed:false,reason:a.reason};s.seenAt.push(r);let o=e.map(l=>l.cooldownMs).filter(l=>typeof l=="number"&&Number.isFinite(l)&&l>0);return o.length>0?s.cooldownUntil=r+Math.max(...o):delete s.cooldownUntil,this.capsByKey.set(n,s),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(a=>Number.isFinite(a)&&a>0):[],s=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:i,cooldownUntil:s});}}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 `${MC}:${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,xo(t.content)?t.content.payload:void 0,xo(t.content)?t.content.placement:void 0,xo(t.content)?t.content.surface:void 0];for(let r of n){if(!xo(r))continue;let i=xo(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=NC(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),l=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...l!==void 0?{cooldownMs:l}:{}});}return e}},Po=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 mb(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function pb(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 jp=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??qC,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cb;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}async recordClickThru(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}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 s=i??this.defaultSuppressionMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}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 s={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,s);}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);}},zC=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=fb(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return hb(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return gb(e)}clear(t){this.records.delete(t);}},HC="revturbine:impression-history",Xd=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=fb(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return hb(e)}getSuppressedPlacements(t){let e=this.load(t);return gb(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${HC}:${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 fb(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 hb(t){let e=new Set;for(let n of t)VC.has(n.outcome)&&e.add(n.placementId);return e}function gb(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 s=i.metadata?.suppressUntil;typeof s=="string"&&new Date(s).getTime()>n&&e.set(i.placementId,s);}return e}function KC(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",s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={},o={};for(let l of e.entitlements??[]){a[l.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let b=t.usage?.[l.unique_handle];b&&(o[l.unique_handle]={used:b.used,limit:b.limit,remaining:Math.max(0,b.limit-b.used),unit:l.unit});}return {entries:a,usage:o,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(s);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(s=>s.handle),segmentSlugs:(e.segments??[]).map(s=>s.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:n,resolve:()=>{let s={},a=new Map;for(let l of e.entitlements??[]){let b=l;typeof b.unique_handle=="string"&&typeof b.type=="string"&&a.set(b.unique_handle,b.type);}for(let l of e.entitlement_rules??[]){let b=l.entitlement_id;s[b]||(s[b]=[]);let p=l,v=Array.isArray(p.segment_ids)?p.segment_ids.filter(y=>typeof y=="string"):typeof p.segment_id=="string"&&p.segment_id!=="all"?[p.segment_id]:[],P=Array.isArray(p.plan_ids)?p.plan_ids.filter(y=>typeof y=="string"):[],S={ruleId:l.id,entitlementId:b,planIds:(l.targets??[]).length>0?(l.targets??[]).filter(y=>y.kind==="plan").map(y=>y.id):P,segmentIds:v,kind:(()=>{let y=typeof p.type_fields=="object"&&p.type_fields!==null?p.type_fields:{};return (typeof p.kind=="string"?p.kind:void 0)??(typeof y.kind=="string"?y.kind:void 0)??a.get(b)??"feature"})(),fields:{...typeof p.type_fields=="object"&&p.type_fields!==null?p.type_fields:{},...p}};s[b].push(S);}let o={};for(let l of e.segments??[])typeof l.dimension_id=="string"&&typeof l.handle=="string"&&(o[l.handle]=l.dimension_id);return {entitlementRules:s,segmentDimensions:o,configVersion:wd(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:n,resolve:()=>{let s={};for(let a of e.message_blocks??[])s[a.block_id]={blockId:a.block_id,name:a.name,defaultContent:a.default_content,segmentOverrides:a.segment_overrides?.map(o=>({segmentId:o.segment_value_id,content:o.content})),status:a.status};return {messageBlocks:s,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 GC(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let i=e.user_context,s={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(s);}if(e.entitlements){let i=e.entitlements,s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={};for(let[o,l]of Object.entries(i))a[o]=l;return {entries:a}}};r.push(s);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let s={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:i.segment_ids})};r.push(s);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let s={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:i.traits})};r.push(s);}}if(e.theme){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var _b=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new Po;this.registry=new oc;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new db({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new ub({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new jp({store:t.impressionStore??new zC,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new ep({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);return n.reason==="no_entitlement_provider"?this.deriveEntitlementFromConfig(t,e):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 Zl(e,t)}buildTargetingState(t,e){return Md(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return to({userId:this.userId,providers:e,base:t})}setUserId(t){this.userId=t,this.impressionHistory.setUserId(t);}getUserId(){return this.userId}getExportedConfig(){return this.exportedConfig}async hydrate(){await this.impressionHistory.hydrate();}updateProviders(t){this.registry.clear();for(let e of t)this.registry.register(e);}slotRecordForConfig(t){if(t.slotId){let r=this.registeredPlacements.get(t.slotId);if(r)return r}let n=(this.exportedConfig.placement_slots??[]).find(r=>t.slotId?r.id===t.slotId:t.surfaceType?r.surface_type===t.surfaceType:false);return n?{id:n.id,name:t.placementHandle??n.placement_handle,route:"",metadata:{surface_slot_id:n.id,surface_type:n.surface_type,surface_template_ids:n.template?[n.template]:[],...t.entitlementHandle?{entitlement_handle:t.entitlementHandle}:{},...t.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(t){let e=t.placements??{placements:t.exportedConfig.placements??[]};return ya({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e){return Hl({handle:t,context:e,currentPlanHandle:"",segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"allowed",allowed:true,reason:"local_runtime_default_allow"}}},$C=["web-client","server"],WC=z.enum($C),ZC=["method","meta","component"],YC=z.enum(ZC),JC=["ts","python","java","csharp","rust"];z.enum(JC);var XC=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(),QC=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:YC,appliesTo:z.array(WC).min(1),composes:z.string().min(1).optional(),perLanguage:XC.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"]}),eR=z.object({version:z.number().int().positive(),functions:z.array(QC).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 s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});eR.parse({version:2,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client","server"],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","server"],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:"evaluate",aliases:[],kind:"method",appliesTo:["server"],description:"Batch-evaluate placements + entitlements for a user, returning a serializable payload the client SDK can hydrate."},{canonical:"getTrialStatus",aliases:[],kind:"method",appliesTo:["server"],description:"Fetch the user's trial status for server-side gating."},{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 tR=[{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 nR(){let t=[];for(let[e,n]of Object.entries(pp))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function rR(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(rR([...nR(),...tR]));var bb="traits:server",lc=class{constructor(){w(this,"domain",bb);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 Fp={workspace_name:"Your workspace",theme:{}};function yb(t){return !!t&&Object.keys(t).length>0}var vb=false;function Lp(t={}){let e=(n,r)=>({branding:{...Fp,...n,theme:{...Fp.theme,...n?.theme}},source:r});return yb(t.explicit)?e(t.explicit,"explicit"):yb(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!vb&&ha()&&(vb=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 xb="[REDACTED]",iR=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,sR=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,aR=/\d(?:[ -]?\d){12,18}/g;function oR(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 s=i*2;s>9&&(s-=9),e+=s;}else e+=i;n=!n;}return e%10===0}function lR(t){let e=0,n=t.replace(iR,()=>(e+=1,xb));return n=n.replace(aR,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&oR(i)?(e+=1,xb):r}),{value:n,count:e}}function Bp(t){let e=0,n=r=>{if(typeof r=="string"){let i=lR(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let i={};for(let[s,a]of Object.entries(r))i[s]=n(a);return i}return r};return {value:n(t),redactions:e}}function cR(t){return sR.test(t.trim())}function dR(t){let e=t.trim().toLowerCase();return `eml_${pR(e).slice(0,16)}`}function Up(t){return cR(t)?{value:dR(t),redacted:true}:{value:t,redacted:false}}function Sb(t){let e=Up(t.user_id??""),n=Bp({url:t.url,path:t.path,page_title:t.page_title,tags:t.tags,traits:t.identity?.traits??null,properties:t.properties});return {value:{...t,url:n.value.url,path:n.value.path,page_title:n.value.page_title,tags:n.value.tags,user_id:t.user_id===null||t.user_id===void 0?t.user_id:e.value,identity:t.identity?{...t.identity,traits:n.value.traits??void 0}:t.identity,properties:n.value.properties},redactions:n.redactions+(e.redacted?1:0)}}var uR=[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 mR(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,s=t.charCodeAt(n+1);n+=1,r=65536+((i&1023)<<10)+(s&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 ns(t,e){return t>>>e|t<<32-e}function pR(t){let e=mR(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let P=0;P<4;P+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,i=3144134277,s=1013904242,a=2773480762,o=1359893119,l=2600822924,b=528734635,p=1541459225,v=new Array(64);for(let P=0;P<e.length;P+=64){for(let C=0;C<16;C+=1){let D=P+C*4;v[C]=(e[D]<<24|e[D+1]<<16|e[D+2]<<8|e[D+3])>>>0;}for(let C=16;C<64;C+=1){let D=ns(v[C-15],7)^ns(v[C-15],18)^v[C-15]>>>3,ae=ns(v[C-2],17)^ns(v[C-2],19)^v[C-2]>>>10;v[C]=v[C-16]+D+v[C-7]+ae>>>0;}let S=r,y=i,T=s,E=a,A=o,k=l,O=b,R=p;for(let C=0;C<64;C+=1){let D=ns(A,6)^ns(A,11)^ns(A,25),ae=A&k^~A&O,Me=R+D+ae+uR[C]+v[C]>>>0,L=ns(S,2)^ns(S,13)^ns(S,22),J=S&y^S&T^y&T,ge=L+J>>>0;R=O,O=k,k=A,A=E+Me>>>0,E=T,T=y,y=S,S=Me+ge>>>0;}r=r+S>>>0,i=i+y>>>0,s=s+T>>>0,a=a+E>>>0,o=o+A>>>0,l=l+k>>>0,b=b+O>>>0,p=p+R>>>0;}return [r,i,s,a,o,l,b,p].map(P=>P.toString(16).padStart(8,"0")).join("")}var Pb={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"},Ib="control_plane_source";function Vp(t,e={}){return {eventName:t,properties:{[Ib]:Pb[t],...e}}}var cc=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 $s(t){if(t)return t;if(Fr())try{return new cc(window.localStorage)}catch{}return new Po}function qp(t){if(t)return t;if(Fr())try{return new cc(window.sessionStorage)}catch{}return new Po}var fR=/^[a-z0-9._]{1,100}$/,Qn={Persisted:"persisted",Transient:"transient"},Mn={Internal:"internal",External:"external"},jn={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 Bb="x-revturbine-schema-exposure",gR="readOnly",_R="x-revturbine-decision-only",Tb={[_R]:true},ci={[Bb]:Mn.External},bR={[Bb]:Mn.Internal};function Rr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[gR]===true||(e[n]=r);}return z.object(e)}function Cr(t){let e=Rr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(fR)}):e}var {Unrestricted:dr}=jn,{Transient:Ur,Persisted:yR}=Qn,{Internal:xa,External:is}=Mn;z.object({page:z.coerce.number().int().min(1).default(1).meta(dr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(dr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var vR=t=>z.object({items:z.array(t).meta(dr),total:z.number().int().min(0).meta(dr),page:z.number().int().min(1).meta(dr),per_page:z.number().int().min(1).meta(dr),has_more:z.boolean().meta(dr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Fe=z.object({created_at:z.string().datetime().meta({...dr,readOnly:true}),updated_at:z.string().datetime().meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),_e=z.object({id:z.string().min(1).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Ze=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var su=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Ub=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});var rf=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),xR=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa});var $n=z.string().min(1).max(200),bn=z.string().min(1).max(100),Sa=z.string().max(500).optional(),Nn=z.record(z.string(),z.unknown()).default({}),_c=z.number().int().min(10).max(100).multipleOf(10),Un=z.string().datetime().nullable().default(null),Sn=z.object({environment_id:z.string().min(1).default("production").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),Rn=z.object({playbook_version_id:z.string().nullable().default(null).meta(dr),is_current:z.boolean().default(true).meta({...dr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...dr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...dr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...dr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),SR=_e.merge(Fe).merge(Ze).merge(Sn).extend({handle:bn.meta({...dr,readOnly:true}),active:z.boolean().default(true).meta({...dr,readOnly:true})});function ar(t){return SR.meta({id:t,"x-revturbine-schema-persistence":yR,"x-revturbine-schema-exposure":xa})}var sf=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),PR=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":xa}),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:"CtaActionType","x-revturbine-schema-persistence":Ur,"x-revturbine-schema-exposure":is}),Qt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Bi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},IR="x-revturbine-context",TR="x-revturbine-in-config",CR="x-revturbine-sdk-input",RR="x-revturbine-source",kR="x-revturbine-deprecation",ER={[Qt.Playbook]:Bi.Customer,[Qt.Branding]:Bi.Customer,[Qt.Billing]:Bi.Stripe,[Qt.Metering]:Bi.Customer,[Qt.CustomerOperations]:Bi.Runtime,[Qt.EventIngestion]:Bi.Runtime};function _n(t,e){return {[IR]:t,[TR]:e.inConfig??t===Qt.Playbook,[CR]:e.sdkInput,[RR]:e.source??ER[t]}}function Dp(t){return {deprecated:true,[kR]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var qb={Named:"named",Minted:"minted"},Db="x-revturbine-schema-identity";function kr(t="handle"){return {[Db]:{kind:qb.Named,handleField:t}}}function Ii(t="handle"){return {[Db]:{kind:qb.Minted,handleField:t}}}var ce=t=>z.object({items:z.array(t)}),Pt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),I=t=>t,de=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()}),{Unrestricted:sn,Financial:iu}=jn,{Persisted:vc,Transient:au}=Qn,{External:Es}=Mn,wR=_n(Qt.Playbook,{sdkInput:true}),AR=_n(Qt.Playbook,{sdkInput:false}),af=_n(Qt.Billing,{sdkInput:false}),Xs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),xc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),ou=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),Ao=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),name:$n.meta(sn),handle:bn.meta(sn),tier_position:z.number().int().min(0).default(0).meta(sn),sort_order:z.number().int().default(0).meta(sn),visibility:Xs.default("public").meta(sn),metadata:Nn.meta(sn)}).meta({id:"Plan","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...wR,...kr()}),OR=ar("PlanAnchor"),Oo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),handle:bn.meta({...sn,readOnly:true}),plan_id:z.string().min(1).meta(sn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(sn),segment_id:z.string().nullable().default(null).meta(sn),price_amount:z.number().min(0).meta(iu),pricing_model:xc.meta(sn),visibility:Xs.default("public").meta(sn),stripe_price_id:z.string().optional().meta(sn),price_source:ou.default("static").meta(sn)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af,...Ii()}),jR=ar("PlanVariationAnchor"),jo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),name:$n.meta(sn),handle:bn.meta(sn),sort_order:z.number().int().default(0).meta(sn),visibility:Xs.default("public").meta(sn),metadata:Nn.meta(sn)}).meta({id:"AddOn","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...AR,...kr()}),FR=ar("AddOnAnchor"),Fo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...sn,readOnly:true}),handle:bn.meta({...sn,readOnly:true}),addon_id:z.string().min(1).meta(sn),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(sn),segment_id:z.string().nullable().default(null).meta(sn),price_amount:z.number().min(0).meta(iu),pricing_model:xc.meta(sn),visibility:Xs.default("public").meta(sn),stripe_price_id:z.string().optional().meta(sn),price_source:ou.default("static").meta(sn)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af,...Ii()}),LR=ar("AddOnVariationAnchor"),BR=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Es}),Lo=_e.merge(Fe).merge(Ze).extend({stripe_price_id:z.string().min(1).meta(sn),stripe_product_id:z.string().min(1).meta(sn),billing_period:BR.meta(sn),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(iu),currency:xR.meta(iu),pricing_model:xc.meta(sn),nickname:z.string().nullable().default(null).meta(sn),is_mock:z.boolean().default(false).meta(sn),last_updated_from_stripe:Un.meta(sn)}).meta({id:"StripePrice","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Es,...af});var UR=Rr(Ao),VR=Rr(Oo),qR=Rr(jo),DR=Rr(Fo),MR=Rr(Lo);({"/api/plan-anchors":{get:I({operationId:"listPlanAnchors",requestParams:{query:de},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ce(OR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:I({operationId:"listPlans",requestParams:{query:de},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ce(Ao)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:I({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Ao)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:I({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:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:I({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:UR}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ao}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:I({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:I({operationId:"listPlanVariationAnchors",requestParams:{query:de},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ce(jR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:I({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:de},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ce(Oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:I({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:VR}}},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:I({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:I({operationId:"listAddOnAnchors",requestParams:{query:de},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ce(FR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:I({operationId:"listAddOns",requestParams:{query:de},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ce(jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:I({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(jo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:I({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:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:I({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:qR}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:I({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:I({operationId:"listAddOnVariationAnchors",requestParams:{query:de},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ce(LR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:I({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:de},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ce(Fo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:I({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Fo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:I({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:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:I({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:Fo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:I({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:I({operationId:"listStripePrices",requestParams:{query:de},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ce(Lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:I({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Lo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:I({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:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:I({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:MR}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:I({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:Se}=jn,{Persisted:of,Transient:di}=Qn,{Internal:Mb,External:Jr}=Mn,Nb=_n(Qt.Playbook,{sdkInput:true}),NR=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),zb=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":di,"x-revturbine-schema-exposure":Jr}),lu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),zR=z.enum(Ub).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),HR=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Hb=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),bc=z.object({entitlement_id:z.string().min(1).meta(Se),entitlement_handle:z.string().min(1).meta(Se),status:zR.meta(Se),limit:z.number().optional().meta(Se),used:z.number().optional().meta(Se),allocation:lu.optional().meta(Se),enforcement:Hb.optional().meta(Se),source:HR.optional().meta(Se),plan_id:z.string().optional().meta(Se),segment_id:z.string().optional().meta(Se),seat_type_id:z.string().optional().meta(Se),rule_id:z.string().optional().meta(Se)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr,...jn.Operational});z.object({account:z.record(z.string(),bc).optional().meta(Se),instance:z.record(z.string(),bc).optional().meta(Se),user:z.record(z.string(),bc).optional().meta(Se)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr,...jn.Operational});var KR=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),GR=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Kb=z.object({kind:GR.meta(Se),id:z.string().min(1).meta(Se)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),$R=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Bo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),name:$n.meta(Se),handle:bn.meta(Se),customer_facing_description:z.string().max(500).optional().meta(Se),type:rf.meta(Se),unit:z.string().max(100).optional().meta(Se),period_scope:zb.optional().meta(Se),allocation:lu.optional().meta(Se),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Se),sort_order:z.number().int().default(0).meta(Se),metadata:Nn.meta(Se)}).meta({id:"Entitlement","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Jr,...Nb,...kr()}),WR=ar("EntitlementAnchor"),Do=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),handle:bn.meta({...Se,readOnly:true}),entitlement_id:z.string().min(1).meta(Se),targets:z.array(Kb).min(1).meta(Se),segment_ids:z.array(z.string()).default([]).meta(Se),visibility:KR.default("public").meta(Se),period_scope:zb.optional().meta(Se),instance:z.string().max(100).optional().meta(Se),reset_period:$R.optional().meta(Se),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),enforcement:Hb.optional().meta(Se),warning_threshold_percent:_c.optional().meta(Se),overage_price_ref:z.string().optional().meta(Se),grace_period_hours:z.number().int().min(0).optional().meta(Se),tier_value:z.string().optional().meta(Se),rate_value:z.number().optional().meta(Se),initial_grant:z.number().optional().meta(Se),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),rollover_enabled:z.boolean().optional().meta(Se),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Se),seat_type_id:z.string().optional().meta(Se),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Se),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Se),stripe_metered_price_id:z.string().optional().meta(Se),enabled:z.boolean().optional().meta(Se),allocation:lu.optional().meta(Se),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Se),amount_cents:z.number().int().optional().meta(Se),currency:z.string().optional().meta(Se)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Mb,...Nb,...Ii()}),ZR=ar("EntitlementRuleAnchor");Do.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 YR=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),JR=z.object({code:YR.meta(Se),message:z.string().min(1).meta(Se),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Se)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr}),Mp=Do.extend({warnings:z.array(JR).optional().meta(Se)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":di,"x-revturbine-schema-exposure":Jr});var Np=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Se,readOnly:true}),rule_id:z.string().min(1).meta(Se),experiment_id:z.string().min(1).meta(Se),variant_name:z.string().min(1).max(200).meta(Se),is_control:z.boolean().default(false).meta(Se),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Se)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":of,"x-revturbine-schema-exposure":Mb,...NR,...Ii()}),XR=Rr(Bo),QR=Rr(Do);({"/api/entitlement-anchors":{get:I({operationId:"listEntitlementAnchors",requestParams:{query:de},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ce(WR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:I({operationId:"listEntitlementRuleAnchors",requestParams:{query:de},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ce(ZR)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:I({operationId:"listEntitlements",requestParams:{query:de},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ce(Bo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:I({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Bo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:I({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:I({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:XR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:I({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:de},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ce(Do)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:I({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Do)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:I({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:QR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:I({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:de},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ce(Np)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:I({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Np)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Np}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ze}=jn,{Persisted:cu,Transient:Qs}=Qn,{External:Ti}=Mn,Gb=_n(Qt.Playbook,{sdkInput:true});_n(Qt.Playbook,{inConfig:false,sdkInput:false});var ek=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),tk=_n(Qt.Playbook,{inConfig:false,sdkInput:false,source:Bi.Runtime}),nk=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var $b=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),Wb=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),rk=z.object({count:z.number().int().positive().meta(ze),period:Wb.meta(ze)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti});z.object({surface_type:z.string().min(1).meta(ze),rules:z.array(rk).meta(ze),cooldown_ms:z.number().int().nonnegative().optional().meta(ze)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ti,...jn.Operational,...ek});var ik=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),Vo=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ze,readOnly:true}),name:$n.meta(ze),handle:bn.meta(ze),description:Sa.meta(ze),category:$b.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:_c.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:nk.optional().meta(ze),activation_window_start:z.string().datetime().optional().meta(ze),activation_window_end:z.string().datetime().optional().meta(ze),metadata:Nn.meta(ze)}).meta({id:"Placement","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ti,...Gb,...kr()}),sk=ar("PlacementAnchor"),ak=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),ok=z.object({code:ak.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":Qs,"x-revturbine-schema-exposure":Ti}),Cb=Vo.extend({warnings:z.array(ok).optional().meta(ze)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti});var lk=z.object({label:z.string().min(1).max(200).meta(ze),cta_path_type:ik.meta(ze),config_fields:z.record(z.string(),z.unknown()).default({}).meta(ze)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Qs,"x-revturbine-schema-exposure":Ti}),hc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...ze,readOnly:true}),handle:bn.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(lk).default([]).meta(ze),max_per_period:z.number().int().min(0).nullable().default(null).meta(ze),max_period_unit:Wb.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":cu,"x-revturbine-schema-exposure":Ti,...Gb,...Ii()}),ck=ar("PlacementPayloadAnchor"),dk=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({surface_slot_handle:z.string().min(1).max(200).meta(ze),surface_type:su.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":cu,"x-revturbine-schema-exposure":Ti,...tk,...kr("surface_slot_handle")}),uk=Rr(Vo),mk=Rr(hc);({"/api/placement-anchors":{get:I({operationId:"listPlacementAnchors",requestParams:{query:de},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ce(sk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:I({operationId:"listPlacements",requestParams:{query:de},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ce(Vo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:I({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Vo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:I({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:I({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:Cb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:I({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Vo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:I({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:$b,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:I({operationId:"listPlacementPayloadAnchors",requestParams:{query:de},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ce(ck)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:I({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:de},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ce(hc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:I({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(hc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:hc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:I({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:mk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:hc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:I({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:I({operationId:"listSurfaceSlots",requestParams:{query:de},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ce(dk)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Tr,Pii:Mo}=jn,{Persisted:lf,Transient:cf}=Qn,{Internal:zo}=Mn,pk=_n(Qt.CustomerOperations,{sdkInput:false}),fk=z.object({external_id:z.string().min(1).meta(Mo),traits:z.record(z.string(),z.unknown()).default({}).meta(Mo),plan_id:z.string().optional().meta(Tr)}).meta({id:"Identity","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo}),Zb=z.enum(["payment_failed","payment_method_missing"]),Rb=_e.merge(Fe).merge(Ze).extend({external_id:z.string().min(1).meta(Mo),identity:fk.meta(Mo),stripe_customer_id:z.string().optional().meta(Tr),current_plan_id:z.string().optional().meta(Tr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Tr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Tr),billing_health_issues:z.array(Zb).default([]).meta(Tr),metadata:Nn.meta(Tr)}).meta({id:"Customer","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo}),hk=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),gk=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),_k=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":cf,"x-revturbine-schema-exposure":zo}),Ws=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Tr,readOnly:true}),customer_id:z.string().min(1).meta(Mo),customer_id_list:z.array(z.string()).optional().meta(Mo),override_type:gk.meta(Tr),target_id:z.string().min(1).meta(Tr),value:z.record(z.string(),z.unknown()).default({}).meta(Tr),duration_type:hk.default("permanent").meta(Tr),duration_value:z.string().optional().meta(Tr),expiry_date:Un.meta(Tr),status:_k.default("active").meta(Tr),reason:z.string().max(500).optional().meta(Tr),created_by:z.string().optional().meta(Tr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":lf,"x-revturbine-schema-exposure":zo,...pk,...Ii()});({"/api/customers":{get:I({operationId:"listCustomers",requestParams:{query:de},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ce(Rb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:I({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Rb}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:I({operationId:"listCustomerOverrides",requestParams:{query:de},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:ce(Ws)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:I({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:I({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Ws.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:I({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:I({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:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:I({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:Ws}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Ue,Pii:gc,Financial:zp}=jn,{Persisted:Yb,Transient:ss}=Qn,{External:Ho,Internal:Sc}=Mn,df=z.object({in_trial:z.boolean().meta(Ue),trial_type:z.string().optional().meta(Ue),plan_handle:z.string().optional().meta(Ue),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Ue),trial_limit_type:z.enum(["time","usage"]).optional().meta(Ue),progress_percent:z.number().min(0).max(100).optional().meta(Ue),day_number:z.number().int().min(0).optional().meta(Ue),days_remaining:z.number().int().min(0).optional().meta(Ue),usage_entitlement_handle:z.string().optional().meta(Ue),usage_consumed:z.number().int().min(0).optional().meta(Ue),usage_remaining:z.number().int().min(0).optional().meta(Ue),usage_limit:z.number().int().min(0).optional().meta(Ue)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho}),Jb=z.object({entitlement_handle:z.string().min(1).meta(Ue),unit:z.string().min(1).meta(Ue),amount:z.number().min(0).meta(Ue),limit:z.number().min(0).optional().meta(Ue),reset_date:z.string().optional().meta(Ue)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho});var Xb=z.object({id:z.string().min(1).meta(Ue),name:z.string().min(1).meta(Ue),price:z.string().optional().meta(Ue),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Ue)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Ho}),bk=z.object({product_instance_id:z.string().min(1).meta(Ue),user_id:z.string().min(1).meta(gc),plan:Xb.optional().meta(Ue),usage:z.record(z.string(),Jb).default({}).meta(Ue),trial:df.optional().meta(Ue),entitlements:z.record(z.string(),z.union([z.boolean(),bc])).default({}).meta(Ue)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":Ho}),Io=_e.merge(Ze).merge(Fe).extend({user_id:z.string().min(1).meta(gc),account_id:z.string().min(1).nullable().optional().meta(gc),email:z.string().email().nullable().optional().meta(gc),email_type:z.string().optional().meta(Ue),plan:Xb.optional().meta(Ue),usage:z.record(z.string(),Jb).default({}).meta(Ue),trial:df.optional().meta(Ue),payment_failed:z.boolean().optional().meta(Ue),payment_at_risk:z.boolean().optional().meta(Ue),tiers:z.record(z.string(),z.string()).optional().meta(Ue),entitlements:z.record(z.string(),z.union([z.boolean(),bc])).default({}).meta(Ue),instances:z.array(bk).optional().meta(Ue),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(gc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Ue,"x-revturbine-schema-persistence":ss}),derived_config_version:z.string().nullable().optional().meta(Ue),context_hash:z.string().nullable().optional().meta(Ue),derived_computed_at:Un.meta(Ue),activity_score:z.number().int().min(0).nullable().optional().meta(Ue),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Ue),experiments:z.record(z.string(),z.string()).optional().meta(Ue)}).meta({id:"UserContext","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":Ho}),yk=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Ue,...ci}),days_remaining:z.number().int().min(0).optional().meta({...Ue,...ci}),ends_at:z.string().optional().meta({...Ue,...ci})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),vk=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Ue,...ci}),failed_payment_reason:z.string().optional().meta({...zp,...Tb}),issues:z.array(Zb).optional().meta({...zp,...Tb}),provider_subscription_id:z.string().optional().meta({...zp,...bR})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),xk=z.object({can_upgrade:z.boolean().optional().meta({...Ue,...ci}),can_manage_billing:z.boolean().optional().meta({...Ue,...ci})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc}),Sk=z.object({handle:z.string().min(1).optional().meta({...Ue,...ci}),name:z.string().min(1).optional().meta({...Ue,...ci})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc});z.object({subject:z.string().min(1).meta({...Ue,...ci}),context_version:z.string().optional().meta({...Ue,...ci}),trial:yk.optional().meta({...Ue,...ci}),billing:vk.optional().meta({...Ue,...ci}),plan:Sk.optional().meta({...Ue,...ci}),capabilities:xk.optional().meta({...Ue,...ci})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ss,"x-revturbine-schema-exposure":Sc});({"/api/user-contexts":{get:I({operationId:"listUserContexts",requestParams:{query:de},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ce(Io)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:I({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:I({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Io.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:I({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:Xn}=jn,{Persisted:uf,Transient:Qb}=Qn,{Internal:Pc}=Mn,Pk=_n(Qt.Playbook,{sdkInput:true}),ey=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),Ik=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":Pc}),Tk=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":Pc}),Hp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:$n.meta(Xn),handle:bn.optional().meta(Xn),category:Ik.default("custom").meta(Xn),visibility_toggle:z.boolean().default(true).meta(Xn),source_type:Tk.default("system").meta(Xn),estimated_size:z.number().int().min(0).optional().meta(Xn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...ey,...kr()}),Ck=ar("SegmentDimensionAnchor"),Kp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),dimension_id:z.string().min(1).meta(Xn),name:$n.meta(Xn),handle:bn.meta(Xn),description:Sa.meta(Xn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Xn),used_in_count:z.number().int().min(0).default(0).meta({...Xn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...ey,...kr()}),Rk=ar("SegmentValueAnchor");_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:$n.meta(Xn),handle:bn.meta(Xn),description:Sa.meta(Xn),rules:z.record(z.string(),z.unknown()).default({}).meta(Xn),experiment_id:z.string().min(1).optional().meta(Xn),is_active:z.boolean().default(true).meta(Xn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Xn),metadata:Nn.meta(Xn)}).meta({id:"Segment","x-revturbine-schema-persistence":uf,"x-revturbine-schema-exposure":Pc,...Pk,...kr()});({"/api/segment-dimension-anchors":{get:I({operationId:"listSegmentDimensionAnchors",requestParams:{query:de},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:ce(Ck)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:I({operationId:"listSegmentValueAnchors",requestParams:{query:de},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:ce(Rk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:I({operationId:"listSegmentDimensions",requestParams:{query:de},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ce(Hp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:I({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:Hp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:I({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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:I({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:Hp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:I({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:de},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:ce(Kp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:I({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:Kp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:I({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:Kp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:I({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:vt}=jn,{Persisted:Ko,Transient:ty}=Qn,{External:ea}=Mn,mf=_n(Qt.Playbook,{sdkInput:true}),kk=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),Ek=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),wk=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.CodeConstant});_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),handle:bn.meta({...vt,readOnly:true}),name:$n.meta(vt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(vt),subject:z.string().max(500).optional().meta(vt),body:z.string().meta(vt),template_variables:z.array(z.string()).default([]).meta(vt),metadata:Nn.meta(vt)}).meta({id:"Message","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...kk,...Ii()});var Gp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),action_type:Vb.meta(vt),target_url:z.string().optional().meta(vt),target_plan_id:z.string().optional().meta(vt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(vt),metadata:Nn.meta(vt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Ak=ar("CtaPathAnchor"),Ok=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":Ko,"x-revturbine-schema-exposure":ea,...wk}),jk=z.object({name:z.string().min(1),field_type:Ok,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":Ko,"x-revturbine-schema-exposure":ea,...Ek}),$p=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),surface_type:PR.meta(vt),field_definitions:z.array(jk).default([]).meta(vt),description:Sa.meta(vt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Fk=ar("SurfaceTemplateAnchor"),Wp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...vt,readOnly:true}),name:$n.meta(vt),handle:bn.meta(vt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(vt),variation_dimension_id:z.string().optional().meta(vt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(vt),notes:z.string().max(1e3).optional().meta(vt),used_in_count:z.number().int().min(0).default(0).meta({...vt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Ko,"x-revturbine-schema-exposure":ea,...mf,...kr()}),Lk=ar("MessageBlockRecordAnchor"),Bk=z.object({segment_id:z.string().min(1).meta(vt),message_block_id:z.string().min(1).meta(vt),ui_path_id:z.string().optional().meta(vt),promotion_id:z.string().optional().meta(vt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":ea});z.object({payload_id:z.string().min(1).meta(vt),tenant_id:z.string().min(1).meta(vt),name:$n.meta(vt),surface_template_id:z.string().min(1).meta(vt),default_message_block_id:z.string().min(1).meta(vt),segment_content_map:z.array(Bk).optional().meta(vt),ui_path_id:z.string().optional().meta(vt),promotion_id:z.string().optional().meta(vt),status:z.enum(["draft","active","inactive"]).meta(vt),created_at:z.string().datetime().optional().meta({...vt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...vt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":ea});({"/api/surface-template-anchors":{get:I({operationId:"listSurfaceTemplateAnchors",requestParams:{query:de},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:ce(Fk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:I({operationId:"listSurfaceTemplates",requestParams:{query:de},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ce($p)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:I({operationId:"listMessageBlockRecordAnchors",requestParams:{query:de},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:ce(Lk)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:I({operationId:"listMessageBlocks",requestParams:{query:de},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ce(Wp)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:I({operationId:"listCtaPathAnchors",requestParams:{query:de},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:ce(Ak)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:I({operationId:"listCtaPaths",requestParams:{query:de},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ce(Gp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:qo,Pii:Uk}=jn,{Persisted:ny}=Qn,{Internal:Vk,External:qk}=Mn,Dk=_n(Qt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...qo,readOnly:true}),name:z.string().min(1).max(120).meta(qo),mode:z.enum(["light","dark","system"]).default("system").meta(qo),tokens:z.record(z.string(),z.string()).default({}).meta(qo)}).meta({id:"Theme","x-revturbine-schema-persistence":ny,"x-revturbine-schema-exposure":qk,...Dk});var kb=_e.merge(Fe).extend({user_id:z.string().min(1).meta(Uk),scope:z.string().min(1).meta(qo),preferences:z.record(z.string(),z.unknown()).default({}).meta(qo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":ny,"x-revturbine-schema-exposure":Vk});({"/api/ui-preferences":{get:I({operationId:"listUiPreferences",requestParams:{query:de},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ce(kb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:I({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Rr(kb))}}},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:Rt,Financial:rs}=jn,{Persisted:ry,Transient:Ic}=Qn,{External:Tc,Internal:iy}=Mn,Mk=z.object({month:z.string().meta(Rt),cohort_size:z.number().int().min(0).meta(Rt),retained:z.number().int().min(0).meta(Rt),retention_rate:z.number().min(0).max(1).meta(Rt),revenue_cents:z.number().int().min(0).meta(rs)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Nk=z.object({step:z.string().meta(Rt),label:z.string().meta(Rt),count:z.number().int().min(0).meta(Rt),conversion_rate:z.number().min(0).max(1).meta(Rt),drop_off_rate:z.number().min(0).max(1).meta(Rt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),zk=z.object({placement_id:z.string().meta(Rt),placement_name:z.string().meta(Rt),impressions:z.number().int().min(0).meta(Rt),clicks:z.number().int().min(0).meta(Rt),conversions:z.number().int().min(0).meta(Rt),ctr:z.number().min(0).meta(Rt),conversion_rate:z.number().min(0).meta(Rt),revenue_cents:z.number().int().min(0).meta(rs)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Hk=z.object({date:z.string().meta(Rt),mrr_cents:z.number().int().min(0).meta(rs),arr_cents:z.number().int().min(0).meta(rs),new_mrr_cents:z.number().int().min(0).meta(rs),churned_mrr_cents:z.number().int().min(0).meta(rs),expansion_mrr_cents:z.number().int().min(0).meta(rs),net_new_mrr_cents:z.number().int().meta(rs)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Kk=z.object({metric_key:z.string().min(1).meta(Rt),label:z.string().meta(Rt),current_value:z.number().meta(rs),previous_value:z.number().nullable().default(null).meta(rs),change_percent:z.number().nullable().default(null).meta(Rt),period:z.string().meta(Rt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Rt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Tc}),Eb=_e.merge(Fe).merge(Ze).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Rt),severity:sf.meta(Rt),resource_type:z.string().min(1).meta(Rt),resource_id:z.string().min(1).meta(Rt),summary:z.string().max(1e3).meta(Rt),expected_value:z.unknown().optional().meta(Rt),actual_value:z.unknown().optional().meta(Rt),affected_customer_count:z.number().int().min(0).default(0).meta(Rt),is_resolved:z.boolean().default(false).meta(Rt),resolved_at:Un.meta(Rt),metadata:Nn.meta(Rt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":iy}),wb=_e.merge(Fe).merge(Ze).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Rt),severity:sf.meta(Rt),title:z.string().min(1).max(300).meta(Rt),description:z.string().max(2e3).meta(Rt),resource_type:z.string().optional().meta(Rt),resource_id:z.string().optional().meta(Rt),is_acknowledged:z.boolean().default(false).meta(Rt),acknowledged_at:Un.meta(Rt),acknowledged_by:z.string().nullable().default(null).meta(Rt),metadata:Nn.meta(Rt)}).meta({id:"Alert","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":iy});({"/api/analytics/kpis":{get:I({operationId:"listKpiAggregates",requestParams:{query:de},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ce(Kk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:I({operationId:"listPlacementPerformance",requestParams:{query:de},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ce(zk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:I({operationId:"listRevenueMetrics",requestParams:{query:de},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ce(Hk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:I({operationId:"listCohortMetrics",requestParams:{query:de},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:ce(Mk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:I({operationId:"listFunnelSteps",requestParams:{query:de},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ce(Nk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:I({operationId:"listDriftReports",requestParams:{query:de},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ce(Eb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:I({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:Eb}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:I({operationId:"listAlerts",requestParams:{query:de},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ce(wb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:I({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:wb}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:V,Pii:No}=jn,{Persisted:sy,Transient:zn}=Qn,{Internal:ta,External:gr}=Mn,ay=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),Gk=_e.extend({event_type:z.string().min(1).meta(V),source:ay.default("sdk").meta(V),tenant_id:z.string().min(1).optional().meta(V),user_id:z.string().min(1).optional().meta(No),session_id:z.string().min(1).optional().meta(No),occurred_at:z.string().datetime().meta(V),request_id:z.string().min(1).meta(V),attributes:z.record(z.string(),z.unknown()).default({}).meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),$k=Gk.extend({ingested_at:z.string().datetime().meta(V)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":ta});z.array(z.object({id:z.string().min(1).optional().meta(V),event_type:z.string().min(1).meta(V),occurred_at:z.string().datetime().optional().meta(V),tenant_id:z.string().min(1).optional().meta(V),user_id:z.string().min(1).optional().meta(No),session_id:z.string().min(1).optional().meta(No),attributes:z.record(z.string(),z.unknown()).optional().meta(V),payload:z.record(z.string(),z.unknown()).optional().meta(V),message:z.string().optional().meta(V),level:z.string().optional().meta(V),path:z.string().optional().meta(V)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var Wk=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({user_id:z.string().min(1).meta(No),placement_id:z.string().min(1).meta(V),treatment_id:z.string().min(1).optional().meta(V),surface_slot_id:z.string().min(1).optional().meta(V),surface_template_id:z.string().min(1).optional().meta(V),payload_id:z.string().min(1).optional().meta(V),interaction_type:Wk.meta(V),interaction_at:z.string().datetime().optional().meta(V),message_block_handle:z.string().min(1).optional().meta(V),message_block_id:z.string().min(1).optional().meta(V),experiment_id:z.string().min(1).optional().meta(V),variant_key:z.string().min(1).optional().meta(V),test:z.boolean().optional().meta(V),metadata:z.record(z.string(),z.unknown()).optional().meta(V)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});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":zn,"x-revturbine-schema-exposure":gr});z.object({days_remaining:z.number().int().min(0).optional().meta(V)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({entitlement_handle:z.string().optional().meta(V),current_usage:z.number().min(0).optional().meta(V),usage_limit:z.number().min(0).optional().meta(V),usage_percent:z.number().min(0).max(100).optional().meta(V),threshold:z.number().min(0).optional().meta(V),balance:z.number().min(0).optional().meta(V),allocation:z.number().min(0).optional().meta(V),seats_used:z.number().int().min(0).optional().meta(V),seats_allowed:z.number().int().min(0).optional().meta(V)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({feature:z.string().min(1).meta(V)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({retry_count:z.number().int().min(0).optional().meta(V),renewal_date:z.string().optional().meta(V)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({event_type:z.string().min(1).meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});var Yk=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),Jk=z.enum(["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"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({event_type:Jk.meta(V),source:Yk.meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({q:z.string().optional().meta(V),source:ay.optional().meta(V),event_type:z.string().optional().meta(V),from:z.string().datetime().optional().meta(V),to:z.string().datetime().optional().meta(V),page:z.coerce.number().int().min(1).default(1).meta(V),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(V)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var Xk=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),Qk=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta}),Zp=_e.merge(Fe).merge(Ze).extend({event_id:z.string().min(1).meta(V),event_type:z.string().min(1).meta(V),source:Xk.meta(V),payload:z.record(z.string(),z.unknown()).default({}).meta(V),status:Qk.default("processed").meta(V),processed_at:z.string().datetime().optional().meta(V),error_message:z.string().optional().meta(V)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":ta});z.object({accepted:z.number().int().min(0).meta(V)}).meta({id:"null","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":ta});var eE=500,tE=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),nE=z.object({environment_id:z.string().min(1).meta(V),user_id:z.string().min(1).meta(No),account_id:z.string().min(1).meta(V),event_name:z.string().min(1).max(120).meta(V),event_ts:z.string().datetime().meta(V),properties:z.string().optional().meta(V),surface_slot_id:z.string().nullable().optional().meta(V),placement_id:z.string().nullable().optional().meta(V),payload_id:z.string().nullable().optional().meta(V),request_id:z.string().optional().meta(V),experiment_id:z.string().nullable().optional().meta(V),variant_key:z.string().nullable().optional().meta(V),tenant_id:z.string().optional().meta(V),event_id:z.string().nullable().optional().meta(V),origin:tE.nullable().optional().meta(V),playbook_version:z.string().nullable().optional().meta(V),decision_id:z.string().nullable().optional().meta(V),test:z.boolean().optional().meta(V)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({events:z.array(nE).min(1).max(eE).meta(V)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});var iE=10,sE=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),aE=z.object({plans:z.number().int().min(0).meta(V),entitlements:z.number().int().min(0).meta(V),entitlement_rules:z.number().int().min(0).meta(V),segments:z.number().int().min(0).meta(V),placements:z.number().int().min(0).meta(V),placement_payloads:z.number().int().min(0).meta(V),content_ui_paths:z.number().int().min(0).meta(V),surface_templates:z.number().int().min(0).meta(V)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr}),oE=z.object({event_type:sE.meta(V),occurred_at:z.string().datetime().meta(V),request_id:z.string().min(1).optional().meta(V),config_hash_id:z.string().min(1).max(64).optional().meta(V),sdk_version:z.string().min(1).max(64).optional().meta(V),runtime_mode:z.string().min(1).max(64).optional().meta(V),schema_version:z.string().min(1).max(64).optional().meta(V),bundle_version:z.string().min(1).max(64).optional().meta(V),config_shape:aE.optional().meta(V),message:z.string().max(500).optional().meta(V),reason:z.string().min(1).max(64).optional().meta(V),placement_handle:z.string().min(1).max(64).optional().meta(V),slot_handle:z.string().min(1).max(64).optional().meta(V),surface:z.string().min(1).max(64).optional().meta(V),plan_handle:z.string().min(1).max(64).optional().meta(V),entitlement_handle:z.string().min(1).max(64).optional().meta(V)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});z.object({events:z.array(oE).min(1).max(iE).meta(V)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":zn,"x-revturbine-schema-exposure":gr});({"/api/events/search":{get:I({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:vR($k)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:I({operationId:"listWebhookEvents",requestParams:{query:de},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ce(Zp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:it}=jn,{Persisted:Cc,Transient:Rc}=Qn,{Internal:as}=Mn,oy=_n(Qt.Playbook,{sdkInput:true}),ly=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),cE=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),pf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),cy=z.object({name:$n.meta(it),handle:bn.meta(it),plan_id:z.string().nullable().optional().meta(it),segment_id:z.string().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(it),grace_period_days:z.number().int().min(0).default(0).meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),require_payment_method:z.boolean().default(false).meta(it),auto_convert:z.boolean().default(true).meta(it),convert_to_plan_id:z.string().optional().meta(it),fallback_plan_id:z.string().optional().meta(it),limit_per_customer:z.number().int().min(1).default(1).meta(it),is_active:z.boolean().default(true).meta(it),metadata:Nn.meta(it)}),To=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...it,readOnly:true})}).merge(cy).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...oy,...kr()}),dE=ar("FreeTrialRuleAnchor"),uE=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),dy=z.object({name:$n.meta(it),handle:bn.meta(it),premium_plan_id:z.string().min(1).meta(it),fallback_plan_id:z.string().min(1).meta(it),segment_id:z.string().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),start_policy:uE.default("signup").meta(it),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(it),entitlements_during_trial:z.array(z.string()).default([]).meta(it),is_active:z.boolean().default(true).meta(it),metadata:Nn.meta(it)}),Co=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...it,readOnly:true})}).merge(dy).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...oy,...kr()}),mE=ar("ReverseTrialRuleAnchor"),uy=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),my=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Rc,"x-revturbine-schema-exposure":as}),Ro=_e.merge(Fe).merge(Ze).extend({trial_limit_policy:uy.default("1_per_lifetime").meta(it),eligibility_scope:my.default("per_customer").meta(it)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...ly}),ko=_e.merge(Fe).merge(Ze).extend({trial_limit_policy:uy.default("1_per_lifetime").meta(it),eligibility_scope:my.default("per_customer").meta(it)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as,...ly}),Qd=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(it),rule_id:z.string().min(1).meta(it),rule_type:z.enum(["free_trial","reverse_trial"]).meta(it),plan_id:z.string().min(1).meta(it),status:cE.default("active").meta(it),started_at:z.string().datetime().meta({...it,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(it),trial_limit_type:pf.default("time").meta(it),usage_entitlement_handle:z.string().min(1).optional().meta(it),usage_limit_value:z.number().int().min(1).optional().meta(it),converted_at:Un.meta(it),cancelled_at:Un.meta(it),metadata:Nn.meta(it)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":as});({"/api/free-trial-rule-anchors":{get:I({operationId:"listFreeTrialRuleAnchors",requestParams:{query:de},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ce(dE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:I({operationId:"listFreeTrialRules",requestParams:{query:de},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ce(To)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:I({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:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:I({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:To.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"listReverseTrialRuleAnchors",requestParams:{query:de},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ce(mE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:I({operationId:"listReverseTrialRules",requestParams:{query:de},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ce(Co)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:I({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:Co}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:I({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse 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:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:I({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:I({operationId:"listFreeTrialSettings",requestParams:{query:de},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ce(Ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:I({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:I({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:I({operationId:"listReverseTrialSettings",requestParams:{query:de},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ce(ko)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:I({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:I({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:I({operationId:"listTrialInstances",requestParams:{query:de},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ce(Qd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:I({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:I({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:I({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:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:kn}=jn,{Persisted:ff,Transient:py}=Qn,{Internal:kc}=Mn,fy=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),pE=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":kc}),fE=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":kc}),hE=z.object({variant_id:z.string().min(1),name:$n,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc,...fy}),Cs=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...kn,readOnly:true}),name:$n.meta(kn),handle:bn.meta(kn),description:z.string().max(1e3).optional().meta(kn),experiment_type:fE.meta(kn),status:pE.default("draft").meta(kn),target_resource_id:z.string().optional().meta(kn),target_segment_ids:z.array(z.string()).default([]).meta(kn),variants:z.array(hE).min(2).meta(kn),primary_metric:z.string().min(1).meta(kn),metric_threshold:z.number().default(.05).meta(kn),secondary_metrics:z.array(z.string()).default([]).meta(kn),traffic_allocation:z.number().min(0).max(1).default(1).meta(kn),started_at:Un.meta(kn),ended_at:Un.meta(kn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(kn),winning_variant_id:z.string().nullable().default(null).meta(kn),metadata:Nn.meta(kn)}).meta({id:"Experiment","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc,...fy,...kr()}),gE=ar("ExperimentAnchor"),_E=sf,Ab=_e.merge(Fe).merge(Ze).extend({experiment_id:z.string().optional().meta(kn),resource_type:z.string().min(1).meta(kn),resource_id:z.string().min(1).meta(kn),severity:_E.default("info").meta(kn),title:z.string().min(1).max(300).meta(kn),description:z.string().max(2e3).meta(kn),suggested_action:z.string().max(1e3).optional().meta(kn),estimated_impact:z.number().optional().meta(kn),is_dismissed:z.boolean().default(false).meta(kn),metadata:Nn.meta(kn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":ff,"x-revturbine-schema-exposure":kc});({"/api/experiment-anchors":{get:I({operationId:"listExperimentAnchors",requestParams:{query:de},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ce(gE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:I({operationId:"listExperiments",requestParams:{query:de},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ce(Cs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:I({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:I({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Cs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:I({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:I({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:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:I({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:I({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:Cs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:I({operationId:"listOptimizationSuggestions",requestParams:{query:de},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ce(Ab)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:I({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Ab}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:yr,Financial:Ob}=jn,{Persisted:bE,Transient:hy}=Qn,{Internal:hf}=Mn,yE=_n(Qt.Playbook,{sdkInput:true}),vE=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":hy,"x-revturbine-schema-exposure":hf}),xE=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":hy,"x-revturbine-schema-exposure":hf}),Zs=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...yr,readOnly:true}),name:$n.meta(yr),handle:bn.meta(yr),description:z.string().max(1e3).optional().meta(yr),rt_status:vE.default("draft").meta(yr),discount_type:xE.meta(yr),discount_value:z.number().min(0).meta(Ob),currency:z.string().length(3).default("USD").meta(Ob),applicable_plan_ids:z.array(z.string()).default([]).meta(yr),applicable_addon_ids:z.array(z.string()).default([]).meta(yr),target_segment_ids:z.array(z.string()).default([]).meta(yr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(yr),current_redemptions:z.number().int().min(0).default(0).meta({...yr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(yr),starts_at:Un.meta(yr),ends_at:Un.meta(yr),stripe_coupon_id:z.string().nullable().default(null).meta(yr),stripe_promotion_code_id:z.string().nullable().default(null).meta(yr),auto_sync_stripe:z.boolean().default(false).meta(yr),metadata:Nn.meta(yr)}).meta({id:"Promotion","x-revturbine-schema-persistence":bE,"x-revturbine-schema-exposure":hf,...yE,...kr()}),SE=ar("PromotionAnchor");({"/api/promotion-anchors":{get:I({operationId:"listPromotionAnchors",requestParams:{query:de},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ce(SE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:I({operationId:"listPromotions",requestParams:{query:de},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:ce(Zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:I({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:I({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Zs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:I({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:I({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:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:I({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Bn,Pii:gf}=jn,{Persisted:_f}=Qn,{Internal:bf}=Mn,PE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),placement_id:z.string().min(1).meta(Bn),payload_id:z.string().nullable().default(null).meta(Bn),variant_id:z.string().nullable().default(null).meta(Bn),surface_type:z.string().meta(Bn),presented_at:z.string().datetime().meta({...Bn,readOnly:true}),dismissed_at:Un.meta(Bn),cta_clicked_at:Un.meta(Bn),cta_action_type:z.string().nullable().default(null).meta(Bn),converted:z.boolean().default(false).meta(Bn),session_id:z.string().optional().meta(Bn),metadata:Nn.meta(Bn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf}),IE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),placement_id:z.string().min(1).meta(Bn),decision:z.enum(["show","suppress","defer"]).meta(Bn),reason:z.string().max(500).meta(Bn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Bn),experiment_id:z.string().nullable().default(null).meta(Bn),variant_id:z.string().nullable().default(null).meta(Bn),latency_ms:z.number().min(0).optional().meta(Bn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf}),TE=_e.merge(Fe).merge(Ze).extend({customer_id:z.string().min(1).meta(gf),entitlement_handle:z.string().min(1).meta(Bn),entitlement_type:z.string().meta(Bn),result:z.enum(["granted","denied","limited","metered"]).meta(Bn),current_usage:z.number().nullable().default(null).meta(Bn),limit:z.number().nullable().default(null).meta(Bn),source:z.enum(["plan","addon","override","trial"]).meta(Bn),source_id:z.string().min(1).meta(Bn),latency_ms:z.number().min(0).optional().meta(Bn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":_f,"x-revturbine-schema-exposure":bf});({"/api/presentation-records":{get:I({operationId:"listPresentationRecords",requestParams:{query:de},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:ce(PE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:I({operationId:"listDecisionLogs",requestParams:{query:de},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:ce(IE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:I({operationId:"listEntitlementEvalLogs",requestParams:{query:de},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:ce(TE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:h}=jn,{Persisted:Go,Transient:dt}=Qn,{Internal:Ci,External:Ut}=Mn,Ct=_n(Qt.Playbook,{sdkInput:true}),Uo=_n(Qt.Playbook,{sdkInput:false}),Js=_n(Qt.Playbook,{inConfig:false,sdkInput:false}),gy=_n(Qt.Playbook,{inConfig:false,sdkInput:true}),Eo=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.CodeConstant}),Jp=_n(Qt.Playbook,{inConfig:false,sdkInput:true,source:Bi.Runtime}),Xp=_n(Qt.Playbook,{inConfig:false,sdkInput:false,source:Bi.Runtime}),CE=_n(Qt.Billing,{sdkInput:false}),RE=_n(Qt.Metering,{sdkInput:false}),kE=_n(Qt.Branding,{inConfig:true,sdkInput:true}),EE=_n(Qt.Branding,{sdkInput:false}),wE="1.0.0",dc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:$n.meta(h),handle:bn.meta(h),description:Sa.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Nn.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...Js,...kr()}),AE=ar("SeatTypeAnchor"),uc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.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:Nn.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...Js,...kr()}),OE=ar("PersonalizationTokenAnchor"),jE=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),Qp=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:jE.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:Nn.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...CE,...Ii()});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":dt,"x-revturbine-schema-exposure":Ut,...EE});var mc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.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:Nn.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":Ci,...RE,...Ii()}),jb=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),pc=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.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:jb.default("warn").meta(h),hard_limit_action:jb.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":Go,"x-revturbine-schema-exposure":Ci,...gy,...Ii()}),FE=ar("UsageEnforcementSettingsAnchor"),LE=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":dt,"x-revturbine-schema-exposure":Ci}),BE=z.object({id:z.string().min(1).meta(h),group:z.array(LE).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":dt,"x-revturbine-schema-exposure":Ci}),UE=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),_y=z.object({capRules:z.array(BE).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:UE.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ci}),ef=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:bn.meta({...h,readOnly:true}),global_frequency_cap:_y.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":Go,"x-revturbine-schema-exposure":Ci,...gy,...Ii()}),VE=ar("PlacementSettingsAnchor"),qE=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":dt,"x-revturbine-schema-exposure":Ut}),DE=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(qE).optional().meta(h),dimension_id:z.string().optional().meta(h),experiment_id:z.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ME=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:Xs.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),NE=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:Xs.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Uo}),zE=z.object({handle:z.string().min(1).meta(h),plan_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:xc.meta(h),visibility:Xs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:ou.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),HE=z.object({handle:z.string().min(1).meta(h),addon_handle:z.string().min(1).meta(h),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z.string().nullable().default(null).meta(h),price_amount:z.number().min(0).meta(h),pricing_model:xc.meta(h),visibility:Xs.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:ou.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),KE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),GE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),$E=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:_y.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),WE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ZE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),YE=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:rf.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),JE=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(Kb).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:rf.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}),...Do.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:lu.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),XE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),QE=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ew=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":dt,"x-revturbine-schema-exposure":Ut}),tw=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(ew).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),nw=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":dt,"x-revturbine-schema-exposure":Ut}),rw=z.object({name:z.string().min(1).meta(h),action_type:nw.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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),iw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),sw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),Fb=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":dt,"x-revturbine-schema-exposure":Ut}),aw=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:Fb.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Fb})).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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),ow=z.object({label:z.string().meta(h),path:Vb.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),by=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(ow).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),yy=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":dt,"x-revturbine-schema-exposure":Ut}),lw=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":dt,"x-revturbine-schema-exposure":Ut}),vy=z.object({max_per_period:lw.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),cw=z.object({id:z.string().min(1).meta(h),target:yy.meta(h),surfaces:z.array(by).meta(h),caps:vy.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":dt,"x-revturbine-schema-exposure":Ut}),dw=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:_c}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_c}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:_c}),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":dt,"x-revturbine-schema-exposure":Ut}),uw=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut}),mw=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:uw.meta(h),trigger:dw.meta(h),payloads:z.array(cw).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),pw=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:yy.meta(h),caps:vy.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(by).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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),fw=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":dt,"x-revturbine-schema-exposure":Ut,...Ct}),hw=_e.merge(cy).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),gw=_e.merge(dy).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Js}),_w=z.object({plans:z.array(ME).meta({...h,...Ct}),addons:z.array(NE).optional().meta({...h,...Uo}),entitlements:z.array(YE).meta({...h,...Ct}),entitlement_rules:z.array(JE).meta({...h,...Ct}),segments:z.array(DE).meta({...h,...Ct}),content_ui_paths:z.array(rw).meta({...h,...Ct}),slot_configs:z.array(XE).optional().meta({...h,...Ct,...Dp({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,...Ct,...Dp({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,...kE,...Dp({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(QE).optional().meta({...h,...Ct}),message_blocks:z.array(aw).optional().meta({...h,...Ct}),placement_payloads:z.array(pw).optional().meta({...h,...Ct}),placements:z.array(mw).optional().meta({...h,...Ct}),content_promotions:z.array(iw).optional().meta({...h,...Ct}),personalization_tokens:z.array(sw).optional().meta({...h,...Ct}),surface_templates:z.array(tw).optional().meta({...h,...Ct}),free_trial_rules:z.array(hw).optional().meta({...h,...Uo}),reverse_trial_rules:z.array(gw).optional().meta({...h,...Uo}),plan_variations:z.array(zE).optional().meta({...h,...Uo}),addon_variations:z.array(HE).optional().meta({...h,...Uo}),extension_rules:z.array(fw).optional().meta({...h,...Ct}),seat_types:z.array(KE).optional().meta({...h,...Ct}),enforcement_defaults:z.array(GE).optional().meta({...h,...Ct}),placement_settings:z.array($E).optional().meta({...h,...Ct}),segment_dimensions:z.array(WE).optional().meta({...h,...Ct}),meter_bindings:z.array(ZE).optional().meta({...h,...Ct}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...Js}),signal_catalog:z.object({}).strict().optional().meta({...h,...Js})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct}),bw=z.object({artifact_type:z.literal("playbook").meta({...h,...Eo,readOnly:true}),format_version:z.literal(wE).meta({...h,...Eo,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Eo}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Jp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...Xp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Jp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Eo,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Eo,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Eo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Jp}),xy=bw.extend(_w.shape).meta({"x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});function yw(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Sy(t){if(!yw(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(Sy,xy).meta({id:"Playbook","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});z.preprocess(Sy,xy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":dt,"x-revturbine-schema-exposure":Ut,...Ct});({"/api/seat-type-anchors":{get:I({operationId:"listSeatTypeAnchors",requestParams:{query:de},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ce(AE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:I({operationId:"listSeatTypes",requestParams:{query:de},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:I({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({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:I({operationId:"listPersonalizationTokenAnchors",requestParams:{query:de},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ce(OE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:I({operationId:"listPersonalizationTokens",requestParams:{query:de},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:I({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(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:I({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:I({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:I({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(Qp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Qp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:I({operationId:"listMeteringConfigs",requestParams:{query:de},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ce(mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:I({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(mc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:I({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",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:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:I({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:I({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:de},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ce(FE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:I({operationId:"listUsageEnforcementSettings",requestParams:{query:de},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ce(pc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:I({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(pc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:I({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:I({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:I({operationId:"listPlacementSettingsAnchors",requestParams:{query:de},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ce(VE)}}},default:{description:"Error response",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:I({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(ef)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:ef}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Rs}=jn,{Persisted:Py}=Qn,{Internal:Iy}=Mn,vw=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Py,"x-revturbine-schema-exposure":Iy}),Lb=_e.merge(Fe).merge(Ze).extend({action:vw.meta(Rs),resource_type:z.string().min(1).max(100).meta(Rs),resource_id:z.string().min(1).meta(Rs),resource_name:z.string().max(200).optional().meta(Rs),actor_id:z.string().min(1).meta(Rs),actor_email:z.string().email().optional().meta(Rs),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Rs),summary:z.string().max(1e3).optional().meta(Rs),metadata:Nn.meta(Rs)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Py,"x-revturbine-schema-exposure":Iy});({"/api/changelog":{get:I({operationId:"listChangeLogEntries",requestParams:{query:de},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ce(Lb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:I({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:Lb}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:eu}=jn,{Persisted:xw,Transient:Sw}=Qn,{Internal:Ty}=Mn,Pw=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":Sw,"x-revturbine-schema-exposure":Ty}),Ys=_e.merge(Fe).extend({name:$n.meta(eu),handle:bn.meta(eu),status:Pw.default("active").meta(eu),metadata:Nn.meta(eu)}).meta({id:"Tenant","x-revturbine-schema-persistence":xw,"x-revturbine-schema-exposure":Ty});({"/api/tenants":{get:I({operationId:"listTenants",requestParams:{query:de},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:ce(Ys)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:I({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:I({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Ys.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:I({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:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:I({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Si}=jn,{Persisted:Iw,Transient:Cy}=Qn,{Internal:yf}=Mn,Tw=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Cy,"x-revturbine-schema-exposure":yf}),wo=_e.merge(Fe).merge(Ze).extend({name:$n.meta(Si),handle:bn.meta(Si),description:Sa.meta(Si),is_production:z.boolean().default(false).meta({...Si,readOnly:true}),status:Tw.default("active").meta(Si),cloned_from_environment_id:z.string().nullable().default(null).meta({...Si,readOnly:true}),cloned_at:Un.meta({...Si,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Si,readOnly:true}),requires_approval:z.boolean().default(false).meta(Si),auto_deploy_on_approval:z.boolean().default(false).meta(Si),created_by:z.string().optional().meta(Si),metadata:Nn.meta(Si)}).meta({id:"Environment","x-revturbine-schema-persistence":Iw,"x-revturbine-schema-exposure":yf}),Cw=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":Cy,"x-revturbine-schema-exposure":yf});({"/api/environments":{get:I({operationId:"listEnvironments",requestParams:{query:de},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:ce(wo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:I({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:wo}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:I({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:I({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:wo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:I({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:wo}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:I({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Cw}}},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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:We,Pii:yc}=jn,{Transient:os,Persisted:Rw}=Qn,{External:Ui}=Mn,kw=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({superseded_output_id:z.string().min(1).meta(We),superseded_by:z.string().min(1).meta(We),reason:kw.meta(We)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Rw,"x-revturbine-schema-exposure":Ui,...jn.Operational});var Ew=z.enum(Ub).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Ry=z.object({output_id:z.string().meta(We),category:z.string().meta(We),surface:z.object({template:z.string().optional().meta(We),type:su.meta(We),slot_id:z.string().optional().meta(We)}).meta(We),content:z.record(z.string(),z.unknown()).meta(We),promotion:z.record(z.string(),z.unknown()).optional().meta(We),cta_path:z.record(z.string(),z.unknown()).optional().meta(We),ui_path:z.record(z.string(),z.unknown()).optional().meta(We),rule_id:z.string().meta(We),decision_id:z.string().meta(We),config_version:z.string().meta(We),present_upsell:z.boolean().meta(We),experiment_id:z.string().optional().meta(We),variant_key:z.string().optional().meta(We),experiment_version_id:z.string().optional().meta(We)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),ww=z.object({status:Ew.meta(We),allowed:z.boolean().meta(We),reason:z.string().optional().meta(We),current_tier:z.string().optional().meta(We),limit:z.number().optional().meta(We),used:z.number().optional().meta(We),remaining:z.number().optional().meta(We),placement:Ry.optional().meta(We)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({id:z.string().meta(We),name:z.string().optional().meta(We),discount:z.string().optional().meta(We),type:z.string().optional().meta(We),status:z.string().optional().meta(We)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});var Aw=z.object({id:z.string().meta(yc),anonymous_id:z.string().optional().meta(We),traits:z.record(z.string(),z.unknown()).optional().meta(yc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Ow=z.object({slot_id:z.string().optional().meta(We),entitlement_handle:z.string().optional().meta(We),plan_handle:z.string().optional().meta(We),placement_handle:z.string().optional().meta(We),visible:z.boolean().meta(We),output:Ry.optional().meta(We),reason_codes:z.array(z.string()).optional().meta(We)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),jw=ww,Fw=df.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui}),Lw=z.object({segments:z.array(z.string()).optional().meta(We),traits:z.record(z.string(),z.unknown()).optional().meta(yc),usage_balances:z.record(z.string(),z.number()).optional().meta(We)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});z.object({version:z.literal("1.0.0").meta(We),request_id:z.string().meta(We),tenant_id:z.string().meta(We),evaluated_at:z.string().datetime().meta(We),ttl_seconds:z.number().int().min(0).max(86400).meta(We),user:Aw.meta(yc),decisions:z.array(Ow).meta(We),entitlements:z.record(z.string(),jw).optional().meta(We),theme:z.record(z.string(),z.unknown()).optional().meta(We),trial_status:Fw.optional().meta(We),user_context:Lw.optional().meta(yc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ui});var {Unrestricted:ln}=jn,{Persisted:Bw,Transient:du}=Qn,{Internal:Ec}=Mn,Uw=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),fc=_e.merge(Fe).merge(Ze).extend({environment_id:z.string().min(1).meta(ln),name:$n.meta(ln),description:z.string().max(2e3).optional().meta(ln),status:Uw.default("draft").meta(ln),labels:z.array(z.string()).default([]).meta(ln),created_by:z.string().min(1).meta(ln),submitted_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...ln,readOnly:true}),submitted_at:Un.meta({...ln,readOnly:true}),reviewed_at:Un.meta({...ln,readOnly:true}),deployed_at:Un.meta({...ln,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...ln,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(ln),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(ln),review_notes:z.string().max(2e3).optional().meta(ln),rejection_reason:z.string().max(2e3).optional().meta(ln),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...ln,readOnly:true}),bundle:z.string().nullable().default(null).meta({...ln,readOnly:true}),metadata:Nn.meta(ln)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Bw,"x-revturbine-schema-exposure":Ec}),ky=z.object({handle:z.string().meta(ln),resource_type:z.string().meta(ln),resource_name:z.string().optional().meta(ln),action:z.enum(["create","update","delete"]).meta(ln),has_conflict:z.boolean().meta(ln)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),Vw=z.object({playbook_version_id:z.string().meta(ln),entries:z.array(ky).meta(ln),total_entries:z.number().int().min(0).meta(ln),total_conflicts:z.number().int().min(0).meta(ln),deployable:z.boolean().meta(ln)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec}),qw=z.object({playbook_version_id:z.string().meta(ln),deployed_count:z.number().int().min(0).meta(ln),superseded_count:z.number().int().min(0).meta(ln),skipped_conflicts:z.number().int().min(0).meta(ln),deployed_at:z.string().datetime().meta(ln)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":du,"x-revturbine-schema-exposure":Ec});({"/api/playbook-versions/{playbookVersionId}/submit":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:I({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:qw}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:I({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:fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:I({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:Vw}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:I({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:de},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:ce(ky)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:I({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:fc}}},default:{description:"Error",content:{"application/json":{schema:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:I({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:Pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Bt,Pii:Dw}=jn,{Persisted:Vi}=Qn,{Internal:qi}=Mn,Mw=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),tu=_e.merge(Fe).merge(Ze).extend({name:$n.meta(Bt),key_hash:z.string().min(1).meta({...Dw,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Bt,readOnly:true}),key_last4:z.string().length(4).meta({...Bt,readOnly:true}),status:Mw.default("active").meta(Bt),last_used_at:Un.meta({...Bt,readOnly:true}),expires_at:Un.meta(Bt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Nw=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),va=_e.merge(Fe).merge(Ze).extend({key:z.string().min(1).max(100).meta(Bt),value_type:Nw.default("boolean").meta(Bt),value:z.string().max(4e3).default("false").meta(Bt),description:Sa.meta(Bt),enabled:z.boolean().default(true).meta(Bt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),tf=_e.merge(Fe).merge(Ze).extend({workspace_name:z.string().min(1).max(200).meta(Bt),support_email:z.string().email().nullable().default(null).meta(Bt),timezone:z.string().max(50).default("UTC").meta(Bt),default_currency:z.string().length(3).default("USD").meta(Bt),logo_url:z.string().url().nullable().default(null).meta(Bt),activity_window_days:z.number().int().min(1).default(30).meta(Bt),activity_high_min:z.number().int().min(1).default(10).meta(Bt),activity_medium_min:z.number().int().min(1).default(3).meta(Bt),activity_low_min:z.number().int().min(1).default(1).meta(Bt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),nf=_e.merge(Fe).merge(Ze).extend({server_url:z.string().url().max(500).meta(Bt),api_token_hint:z.string().max(50).nullable().default(null).meta(Bt),allow_write_actions:z.boolean().default(false).meta(Bt),enabled_tools:z.array(z.string().max(100)).default([]).meta(Bt),enabled:z.boolean().default(false).meta(Bt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),nu=_e.merge(Fe).merge(Ze).extend({step_key:z.string().min(1).max(100).meta(Bt),label:z.string().min(1).max(200).meta(Bt),done:z.boolean().default(false).meta(Bt),completed_at:Un.meta({...Bt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),zw=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Hw=_e.merge(Ze).extend({environment_id:z.string().min(1).default("production").meta(Bt),actor_type:zw.meta(Bt),actor_id:z.string().nullable().default(null).meta(Bt),action:z.string().min(1).max(120).meta(Bt),object_type:z.string().max(120).nullable().default(null).meta(Bt),object_id:z.string().max(200).nullable().default(null).meta(Bt),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Bt),occurred_at:z.string().datetime().meta({...Bt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),Kw=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi}),ru=_e.merge(Fe).merge(Ze).merge(Sn).merge(Rn).extend({handle:bn.meta({...Bt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Bt),identifier_type:Kw.default("user_id").meta(Bt),note:z.string().max(500).nullable().default(null).meta(Bt),added_by:z.string().meta(Bt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Vi,"x-revturbine-schema-exposure":qi,...Ii()});({"/api/settings/api-keys":{get:I({operationId:"listApiKeys",requestParams:{query:de},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:ce(tu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:I({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(tu)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:I({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:tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:I({operationId:"listFeatureFlags",requestParams:{query:de},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ce(va)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:I({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(va)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:I({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:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:I({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(va).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:I({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:va}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:I({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(tf).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:tf}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:I({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(nf).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:nf}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:I({operationId:"listOnboardingSteps",requestParams:{query:de},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ce(nu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:I({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:nu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:I({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Rr(nu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:nu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:I({operationId:"listAuditEvents",requestParams:{query:de},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ce(Hw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:I({operationId:"listPlacementTestUsers",requestParams:{query:de},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:ce(ru)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:I({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(ru)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:I({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:ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:fe,Pii:Br}=jn,{Persisted:Xr,Transient:vf}=Qn,{Internal:vr}=Mn,Gw=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({name:$n.meta(fe),email:z.string().email().meta(Br),email_verified:z.boolean().default(false).meta(fe),image:z.string().url().nullable().default(null).meta(Br),role:Gw.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:Un.meta({...fe,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...fe,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({expires_at:z.string().datetime().meta(fe),token:z.string().min(1).meta({...Br,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Br),user_agent:z.string().nullable().default(null).meta(Br),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":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).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({...Br,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Br,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Br,readOnly:true}),access_token_expires_at:Un.meta({...fe,readOnly:true}),refresh_token_expires_at:Un.meta({...fe,readOnly:true}),scope:z.string().nullable().default(null).meta(fe),password:z.string().nullable().default(null).meta({...Br,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).extend({identifier:z.string().min(1).meta(Br),value:z.string().min(1).meta({...Br,readOnly:true}),expires_at:z.string().datetime().meta(fe)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({secret:z.string().min(1).meta({...Br,readOnly:true}),backup_codes:z.string().min(1).meta({...Br,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":Xr,"x-revturbine-schema-exposure":vr});_e.extend({name:$n.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":Xr,"x-revturbine-schema-exposure":vr});var Ey=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});var wy=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr}),Ay=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr});z.object({resource:wy,action:Ay}).meta({id:"Permission","x-revturbine-schema-persistence":vf,"x-revturbine-schema-exposure":vr});var $w=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Ww=["plans","entitlements","placements","targeting","content","experiments"],Zw=["plans","entitlements","placements","targeting","content","experiments"],Yw=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Jw=["read","create","update","delete","publish","approve","invite","manage_roles"];function uu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Xw=uu($w,["read"]),Qw=[...Xw,...uu(Ww,["create","update"])];[...Qw,...uu(Zw,["publish","approve","delete"])];uu(Yw,Jw);var e1=wy.options.flatMap(t=>Ay.options.map(e=>`${t}:${e}`));z.enum(e1).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),user_id:z.string().min(1).meta({...fe,readOnly:true}),role:Ey.default("viewer").meta(fe),created_at:z.string().datetime().meta({...fe,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});var t1=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vr});_e.extend({organization_id:z.string().min(1).meta({...fe,readOnly:true}),email:z.string().email().meta(Br),role:Ey.nullable().default(null).meta(fe),status:t1.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":Xr,"x-revturbine-schema-exposure":vr});_e.extend({name:z.string().max(200).nullable().default(null).meta(fe),public_key:z.string().min(1).meta({...Br,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":Xr,"x-revturbine-schema-exposure":vr});_e.merge(Fe).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({...Br,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:Un.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:Un.meta({...fe,readOnly:true}),expires_at:Un.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":Xr,"x-revturbine-schema-exposure":vr});_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":Xr,"x-revturbine-schema-exposure":vr});var Oy="0.2.87";var mu=/^[a-z0-9._]{1,100}$/;var pt={Persisted:"persisted",Transient:"transient"},st={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 jy="x-revturbine-schema-exposure",i1="readOnly",s1="x-revturbine-decision-only",pu={[s1]:true},Vr={[jy]:st.External},xf={[jy]:st.Internal};function Wn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[i1]===true||(e[n]=r);}return z.object(e)}function er(t){let e=Wn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(mu)}):e}var {Unrestricted:ur}=Qe,{Transient:qr,Persisted:a1}=pt,{Internal:Pa,External:ls}=st;z.object({page:z.coerce.number().int().min(1).default(1).meta(ur),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ur)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var Sf=t=>z.object({items:z.array(t).meta(ur),total:z.number().int().min(0).meta(ur),page:z.number().int().min(1).meta(ur),per_page:z.number().int().min(1).meta(ur),has_more:z.boolean().meta(ur)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),ie=z.object({created_at:z.string().datetime().meta({...ur,readOnly:true}),updated_at:z.string().datetime().meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),Z=z.object({id:z.string().min(1).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),ue=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var wc=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls}),Ac=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});var $o=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":ls}),Pf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":ls});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa});var en=z.string().min(1).max(200),xt=z.string().min(1).max(100),ui=z.string().max(500).optional(),Vt=z.record(z.string(),z.unknown()).default({}),na=z.number().int().min(10).max(100).multipleOf(10),tn=z.string().datetime().nullable().default(null),qt=z.object({environment_id:z.string().min(1).default("production").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),Ht=z.object({playbook_version_id:z.string().nullable().default(null).meta(ur),is_current:z.boolean().default(true).meta({...ur,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ur,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ur,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ur,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),u1=Z.merge(ie).merge(ue).merge(qt).extend({handle:xt.meta({...ur,readOnly:true}),active:z.boolean().default(true).meta({...ur,readOnly:true})});function yn(t){return u1.meta({id:t,"x-revturbine-schema-persistence":a1,"x-revturbine-schema-exposure":Pa})}var Wo=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),If=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":qr,"x-revturbine-schema-exposure":Pa}),Zo=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":ls});var et={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Qr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},m1="x-revturbine-context",p1="x-revturbine-in-config",f1="x-revturbine-sdk-input",h1="x-revturbine-source",g1="x-revturbine-deprecation",_1={[et.Playbook]:Qr.Customer,[et.Branding]:Qr.Customer,[et.Billing]:Qr.Stripe,[et.Metering]:Qr.Customer,[et.CustomerOperations]:Qr.Runtime,[et.EventIngestion]:Qr.Runtime};function It(t,e){return {[m1]:t,[p1]:e.inConfig??t===et.Playbook,[f1]:e.sdkInput,[h1]:e.source??_1[t]}}function Oc(t){return {deprecated:true,[g1]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Tf={Named:"named",Minted:"minted"},Fy="x-revturbine-schema-identity";function Fn(t="handle"){return {[Fy]:{kind:Tf.Named,handleField:t}}}function mr(t="handle"){return {[Fy]:{kind:Tf.Minted,handleField:t}}}var G=t=>z.object({items:z.array(t)}),Le=z.object({error:z.string(),code:z.string(),request_id:z.string()}),x=t=>t,$=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:an,Financial:fu}=Qe,{Persisted:jc,Transient:hu}=pt,{External:ws}=st,b1=It(et.Playbook,{sdkInput:true}),y1=It(et.Playbook,{sdkInput:false}),Cf=It(et.Billing,{sdkInput:false}),cs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Ea=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Yo=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),Ia=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),name:en.meta(an),handle:xt.meta(an),tier_position:z.number().int().min(0).default(0).meta(an),sort_order:z.number().int().default(0).meta(an),visibility:cs.default("public").meta(an),metadata:Vt.meta(an)}).meta({id:"Plan","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...b1,...Fn()}),v1=yn("PlanAnchor"),Ta=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),handle:xt.meta({...an,readOnly:true}),plan_id:z.string().min(1).meta(an),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(an),segment_id:z.string().nullable().default(null).meta(an),price_amount:z.number().min(0).meta(fu),pricing_model:Ea.meta(an),visibility:cs.default("public").meta(an),stripe_price_id:z.string().optional().meta(an),price_source:Yo.default("static").meta(an)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf,...mr()}),x1=yn("PlanVariationAnchor"),Ca=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),name:en.meta(an),handle:xt.meta(an),sort_order:z.number().int().default(0).meta(an),visibility:cs.default("public").meta(an),metadata:Vt.meta(an)}).meta({id:"AddOn","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...y1,...Fn()}),S1=yn("AddOnAnchor"),Ra=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...an,readOnly:true}),handle:xt.meta({...an,readOnly:true}),addon_id:z.string().min(1).meta(an),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(an),segment_id:z.string().nullable().default(null).meta(an),price_amount:z.number().min(0).meta(fu),pricing_model:Ea.meta(an),visibility:cs.default("public").meta(an),stripe_price_id:z.string().optional().meta(an),price_source:Yo.default("static").meta(an)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf,...mr()}),P1=yn("AddOnVariationAnchor"),Ly=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":hu,"x-revturbine-schema-exposure":ws}),ka=Z.merge(ie).merge(ue).extend({stripe_price_id:z.string().min(1).meta(an),stripe_product_id:z.string().min(1).meta(an),billing_period:Ly.meta(an),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(fu),currency:Pf.meta(fu),pricing_model:Ea.meta(an),nickname:z.string().nullable().default(null).meta(an),is_mock:z.boolean().default(false).meta(an),last_updated_from_stripe:tn.meta(an)}).meta({id:"StripePrice","x-revturbine-schema-persistence":jc,"x-revturbine-schema-exposure":ws,...Cf});var I1=Wn(Ia),T1=Wn(Ta),C1=Wn(Ca),R1=Wn(Ra),k1=Wn(ka);({"/api/plan-anchors":{get:x({operationId:"listPlanAnchors",requestParams:{query:$},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:G(v1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:x({operationId:"listPlans",requestParams:{query:$},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:G(Ia)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:x({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ia)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:x({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:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:x({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:I1}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ia}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:x({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:x({operationId:"listPlanVariationAnchors",requestParams:{query:$},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:G(x1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:x({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:$},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:G(Ta)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:x({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ta)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:x({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:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:x({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:T1}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Ta}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:x({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:x({operationId:"listAddOnAnchors",requestParams:{query:$},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:G(S1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:x({operationId:"listAddOns",requestParams:{query:$},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:G(Ca)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:x({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ca)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:x({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:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:x({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:C1}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ca}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:x({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:x({operationId:"listAddOnVariationAnchors",requestParams:{query:$},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:G(P1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:x({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:$},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:G(Ra)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:x({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(Ra)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:x({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:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:x({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:R1}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Ra}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:x({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:x({operationId:"listStripePrices",requestParams:{query:$},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:G(ka)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:x({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:er(ka)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:x({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:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:x({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:k1}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:x({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}=Qe,{Persisted:kf,Transient:mi}=pt,{Internal:By,External:ei}=st,Uy=It(et.Playbook,{sdkInput:true}),w1=It(et.Playbook,{inConfig:false,sdkInput:false}),Ef=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":mi,"x-revturbine-schema-exposure":ei}),Jo=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Vy=z.enum(Ac).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),qy=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),wf=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Aa=z.object({entitlement_id:z.string().min(1).meta(Te),entitlement_handle:z.string().min(1).meta(Te),status:Vy.meta(Te),limit:z.number().optional().meta(Te),used:z.number().optional().meta(Te),allocation:Jo.optional().meta(Te),enforcement:wf.optional().meta(Te),source:qy.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":mi,"x-revturbine-schema-exposure":ei,...Qe.Operational});z.object({account:z.record(z.string(),Aa).optional().meta(Te),instance:z.record(z.string(),Aa).optional().meta(Te),user:z.record(z.string(),Aa).optional().meta(Te)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei,...Qe.Operational});var Dy=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),My=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),_u=z.object({kind:My.meta(Te),id:z.string().min(1).meta(Te)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),Ny=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),wa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),name:en.meta(Te),handle:xt.meta(Te),customer_facing_description:z.string().max(500).optional().meta(Te),type:$o.meta(Te),unit:z.string().max(100).optional().meta(Te),period_scope:Ef.optional().meta(Te),allocation:Jo.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:Vt.meta(Te)}).meta({id:"Entitlement","x-revturbine-schema-persistence":kf,"x-revturbine-schema-exposure":ei,...Uy,...Fn()}),O1=yn("EntitlementAnchor"),ra=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...Te,readOnly:true}),handle:xt.meta({...Te,readOnly:true}),entitlement_id:z.string().min(1).meta(Te),targets:z.array(_u).min(1).meta(Te),segment_ids:z.array(z.string()).default([]).meta(Te),visibility:Dy.default("public").meta(Te),period_scope:Ef.optional().meta(Te),instance:z.string().max(100).optional().meta(Te),reset_period:Ny.optional().meta(Te),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Te),enforcement:wf.optional().meta(Te),warning_threshold_percent:na.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:Jo.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":kf,"x-revturbine-schema-exposure":By,...Uy,...mr()}),j1=yn("EntitlementRuleAnchor");ra.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 L1=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei}),B1=z.object({code:L1.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":mi,"x-revturbine-schema-exposure":ei}),Rf=ra.extend({warnings:z.array(B1).optional().meta(Te)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":mi,"x-revturbine-schema-exposure":ei});var gu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.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":kf,"x-revturbine-schema-exposure":By,...w1,...mr()}),U1=Wn(wa),V1=Wn(ra);({"/api/entitlement-anchors":{get:x({operationId:"listEntitlementAnchors",requestParams:{query:$},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:G(O1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:x({operationId:"listEntitlementRuleAnchors",requestParams:{query:$},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:G(j1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:x({operationId:"listEntitlements",requestParams:{query:$},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:G(wa)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:x({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:er(wa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:x({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:x({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:U1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:x({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:$},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:G(ra)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:x({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:er(ra)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:x({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:V1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:x({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:$},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:G(gu)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:x({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:He}=Qe,{Persisted:bu,Transient:ia}=pt,{External:ki}=st,Hy=It(et.Playbook,{sdkInput:true});It(et.Playbook,{inConfig:false,sdkInput:false});var D1=It(et.Playbook,{inConfig:false,sdkInput:true}),M1=It(et.Playbook,{inConfig:false,sdkInput:false,source:Qr.Runtime}),N1=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Af=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Of=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Ky=z.object({count:z.number().int().positive().meta(He),period:Of.meta(He)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki});z.object({surface_type:z.string().min(1).meta(He),rules:z.array(Ky).meta(He),cooldown_ms:z.number().int().nonnegative().optional().meta(He)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Qe.Operational,...D1});var Gy=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":ia,"x-revturbine-schema-exposure":ki}),Oa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...He,readOnly:true}),name:en.meta(He),handle:xt.meta(He),description:ui.meta(He),category:Af.meta(He),drag_order_in_category:z.number().int().default(0).meta(He),surface_slot_id:z.string().optional().meta(He),entitlement_id:z.string().optional().meta(He),tier_threshold:z.string().optional().meta(He),threshold_percent:na.optional().meta(He),trial_type:z.enum(["free","reverse"]).optional().meta(He),trigger_type:z.string().optional().meta(He),trial_progress_percent:z.number().min(0).max(100).optional().meta(He),days_before_end:z.number().int().min(0).optional().meta(He),qualifier:N1.optional().meta(He),activation_window_start:z.string().datetime().optional().meta(He),activation_window_end:z.string().datetime().optional().meta(He),metadata:Vt.meta(He)}).meta({id:"Placement","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Hy,...Fn()}),H1=yn("PlacementAnchor"),$y=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Wy=z.object({code:$y.meta(He),message:z.string().min(1).meta(He),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(He)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),zy=Oa.extend({warnings:z.array(Wy).optional().meta(He)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki});var Zy=z.object({label:z.string().min(1).max(200).meta(He),cta_path_type:Gy.meta(He),config_fields:z.record(z.string(),z.unknown()).default({}).meta(He)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ia,"x-revturbine-schema-exposure":ki}),Xo=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...He,readOnly:true}),handle:xt.meta({...He,readOnly:true}),placement_id:z.string().min(1).meta(He),drag_order:z.number().int().default(0).meta(He),target_plan_ids:z.array(z.string()).default([]).meta(He),target_plan_billing_cadences:z.array(z.string()).default([]).meta(He),target_segments:z.array(z.string()).default([]).meta(He),surface_slot_ids:z.array(z.string()).default([]).meta(He),surface_template_id:z.string().min(1).meta(He),content_fields:z.record(z.string(),z.unknown()).default({}).meta(He),cta_list:z.array(Zy).default([]).meta(He),max_per_period:z.number().int().min(0).nullable().default(null).meta(He),max_period_unit:Of.default("session").meta(He),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(He),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(He),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(He),recommendation_plan_override:z.string().optional().meta(He)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...Hy,...mr()}),K1=yn("PlacementPayloadAnchor"),Yy=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({surface_slot_handle:z.string().min(1).max(200).meta(He),surface_type:wc.meta(He),surface_template_ids:z.array(z.string()).default([]).meta(He),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(He),first_seen:z.string().datetime().meta({...He,readOnly:true}),last_seen:z.string().datetime().meta({...He,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(He),placement_count:z.number().int().min(0).default(0).meta({...He,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":bu,"x-revturbine-schema-exposure":ki,...M1,...Fn("surface_slot_handle")}),G1=Wn(Oa),$1=Wn(Xo);({"/api/placement-anchors":{get:x({operationId:"listPlacementAnchors",requestParams:{query:$},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:G(H1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:x({operationId:"listPlacements",requestParams:{query:$},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:G(Oa)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:x({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:er(Oa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:x({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:x({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:zy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:x({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:x({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Af,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:x({operationId:"listPlacementPayloadAnchors",requestParams:{query:$},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:G(K1)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:x({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:$},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:G(Xo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:x({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:er(Xo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:x({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:$1}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:x({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:x({operationId:"listSurfaceSlots",requestParams:{query:$},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:G(Yy)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Er,Pii:Qo}=Qe,{Persisted:Ff,Transient:Lf}=pt,{Internal:el}=st,Z1=It(et.CustomerOperations,{sdkInput:false}),Jy=z.object({external_id:z.string().min(1).meta(Qo),traits:z.record(z.string(),z.unknown()).default({}).meta(Qo),plan_id:z.string().optional().meta(Er)}).meta({id:"Identity","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el}),yu=z.enum(["payment_failed","payment_method_missing"]),jf=Z.merge(ie).merge(ue).extend({external_id:z.string().min(1).meta(Qo),identity:Jy.meta(Qo),stripe_customer_id:z.string().optional().meta(Er),current_plan_id:z.string().optional().meta(Er),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Er),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Er),billing_health_issues:z.array(yu).default([]).meta(Er),metadata:Vt.meta(Er)}).meta({id:"Customer","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el}),Xy=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),Qy=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),ev=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":el}),As=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...Er,readOnly:true}),customer_id:z.string().min(1).meta(Qo),customer_id_list:z.array(z.string()).optional().meta(Qo),override_type:Qy.meta(Er),target_id:z.string().min(1).meta(Er),value:z.record(z.string(),z.unknown()).default({}).meta(Er),duration_type:Xy.default("permanent").meta(Er),duration_value:z.string().optional().meta(Er),expiry_date:tn.meta(Er),status:ev.default("active").meta(Er),reason:z.string().max(500).optional().meta(Er),created_by:z.string().optional().meta(Er)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Ff,"x-revturbine-schema-exposure":el,...Z1,...mr()});({"/api/customers":{get:x({operationId:"listCustomers",requestParams:{query:$},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:G(jf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:x({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:jf}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:x({operationId:"listCustomerOverrides",requestParams:{query:$},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:G(As)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:x({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:x({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:As.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:x({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:x({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:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:x({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:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:qe,Pii:Fc,Financial:Bf}=Qe,{Persisted:tv,Transient:ds}=pt,{External:tl,Internal:Lc}=st,Bc=z.object({in_trial:z.boolean().meta(qe),trial_type:z.string().optional().meta(qe),plan_handle:z.string().optional().meta(qe),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(qe),trial_limit_type:z.enum(["time","usage"]).optional().meta(qe),progress_percent:z.number().min(0).max(100).optional().meta(qe),day_number:z.number().int().min(0).optional().meta(qe),days_remaining:z.number().int().min(0).optional().meta(qe),usage_entitlement_handle:z.string().optional().meta(qe),usage_consumed:z.number().int().min(0).optional().meta(qe),usage_remaining:z.number().int().min(0).optional().meta(qe),usage_limit:z.number().int().min(0).optional().meta(qe)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl}),Uf=z.object({entitlement_handle:z.string().min(1).meta(qe),unit:z.string().min(1).meta(qe),amount:z.number().min(0).meta(qe),limit:z.number().min(0).optional().meta(qe),reset_date:z.string().optional().meta(qe)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl});var Vf=z.object({id:z.string().min(1).meta(qe),name:z.string().min(1).meta(qe),price:z.string().optional().meta(qe),billing_period:z.enum(["monthly","annual","none"]).optional().meta(qe)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":tl}),nv=z.object({product_instance_id:z.string().min(1).meta(qe),user_id:z.string().min(1).meta(Fc),plan:Vf.optional().meta(qe),usage:z.record(z.string(),Uf).default({}).meta(qe),trial:Bc.optional().meta(qe),entitlements:z.record(z.string(),z.union([z.boolean(),Aa])).default({}).meta(qe)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":tv,"x-revturbine-schema-exposure":tl}),ja=Z.merge(ue).merge(ie).extend({user_id:z.string().min(1).meta(Fc),account_id:z.string().min(1).nullable().optional().meta(Fc),email:z.string().email().nullable().optional().meta(Fc),email_type:z.string().optional().meta(qe),plan:Vf.optional().meta(qe),usage:z.record(z.string(),Uf).default({}).meta(qe),trial:Bc.optional().meta(qe),payment_failed:z.boolean().optional().meta(qe),payment_at_risk:z.boolean().optional().meta(qe),tiers:z.record(z.string(),z.string()).optional().meta(qe),entitlements:z.record(z.string(),z.union([z.boolean(),Aa])).default({}).meta(qe),instances:z.array(nv).optional().meta(qe),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Fc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...qe,"x-revturbine-schema-persistence":ds}),derived_config_version:z.string().nullable().optional().meta(qe),context_hash:z.string().nullable().optional().meta(qe),derived_computed_at:tn.meta(qe),activity_score:z.number().int().min(0).nullable().optional().meta(qe),activity_score_computed_at:z.string().datetime().nullable().optional().meta(qe),experiments:z.record(z.string(),z.string()).optional().meta(qe)}).meta({id:"UserContext","x-revturbine-schema-persistence":tv,"x-revturbine-schema-exposure":tl}),X1=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...qe,...Vr}),days_remaining:z.number().int().min(0).optional().meta({...qe,...Vr}),ends_at:z.string().optional().meta({...qe,...Vr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),Q1=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...qe,...Vr}),failed_payment_reason:z.string().optional().meta({...Bf,...pu}),issues:z.array(yu).optional().meta({...Bf,...pu}),provider_subscription_id:z.string().optional().meta({...Bf,...xf})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),eA=z.object({can_upgrade:z.boolean().optional().meta({...qe,...Vr}),can_manage_billing:z.boolean().optional().meta({...qe,...Vr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc}),tA=z.object({handle:z.string().min(1).optional().meta({...qe,...Vr}),name:z.string().min(1).optional().meta({...qe,...Vr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc});z.object({subject:z.string().min(1).meta({...qe,...Vr}),context_version:z.string().optional().meta({...qe,...Vr}),trial:X1.optional().meta({...qe,...Vr}),billing:Q1.optional().meta({...qe,...Vr}),plan:tA.optional().meta({...qe,...Vr}),capabilities:eA.optional().meta({...qe,...Vr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ds,"x-revturbine-schema-exposure":Lc});({"/api/user-contexts":{get:x({operationId:"listUserContexts",requestParams:{query:$},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:G(ja)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:x({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:x({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:ja.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:x({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}=Qe,{Persisted:qf,Transient:rv}=pt,{Internal:Uc}=st,iA=It(et.Playbook,{sdkInput:true}),iv=It(et.Playbook,{inConfig:false,sdkInput:true}),sv=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Uc}),av=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":rv,"x-revturbine-schema-exposure":Uc}),vu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:en.meta(tr),handle:xt.optional().meta(tr),category:sv.default("custom").meta(tr),visibility_toggle:z.boolean().default(true).meta(tr),source_type:av.default("system").meta(tr),estimated_size:z.number().int().min(0).optional().meta(tr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":Uc,...iv,...Fn()}),sA=yn("SegmentDimensionAnchor"),xu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),dimension_id:z.string().min(1).meta(tr),name:en.meta(tr),handle:xt.meta(tr),description:ui.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":qf,"x-revturbine-schema-exposure":Uc,...iv,...Fn()}),aA=yn("SegmentValueAnchor");Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...tr,readOnly:true}),name:en.meta(tr),handle:xt.meta(tr),description:ui.meta(tr),rules:z.record(z.string(),z.unknown()).default({}).meta(tr),experiment_id: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:Vt.meta(tr)}).meta({id:"Segment","x-revturbine-schema-persistence":qf,"x-revturbine-schema-exposure":Uc,...iA,...Fn()});({"/api/segment-dimension-anchors":{get:x({operationId:"listSegmentDimensionAnchors",requestParams:{query:$},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:G(sA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:x({operationId:"listSegmentValueAnchors",requestParams:{query:$},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:G(aA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:x({operationId:"listSegmentDimensions",requestParams:{query:$},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:G(vu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:x({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:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:x({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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:x({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:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:x({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:$},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:G(xu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:x({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:xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:x({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:xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:x({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:St}=Qe,{Persisted:nl,Transient:ov}=pt,{External:sa}=st,Df=It(et.Playbook,{sdkInput:true}),cA=It(et.Playbook,{inConfig:false,sdkInput:false}),dA=It(et.Playbook,{inConfig:false,sdkInput:true}),uA=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.CodeConstant});Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),handle:xt.meta({...St,readOnly:true}),name:en.meta(St),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(St),subject:z.string().max(500).optional().meta(St),body:z.string().meta(St),template_variables:z.array(z.string()).default([]).meta(St),metadata:Vt.meta(St)}).meta({id:"Message","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...cA,...mr()});var Su=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),action_type:Zo.meta(St),target_url:z.string().optional().meta(St),target_plan_id:z.string().optional().meta(St),config_fields:z.record(z.string(),z.unknown()).default({}).meta(St),metadata:Vt.meta(St)}).meta({id:"CtaPath","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),pA=yn("CtaPathAnchor"),lv=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":nl,"x-revturbine-schema-exposure":sa,...uA}),cv=z.object({name:z.string().min(1),field_type:lv,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":nl,"x-revturbine-schema-exposure":sa,...dA}),Pu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),surface_type:If.meta(St),field_definitions:z.array(cv).default([]).meta(St),description:ui.meta(St)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),fA=yn("SurfaceTemplateAnchor"),Iu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...St,readOnly:true}),name:en.meta(St),handle:xt.meta(St),content_fields:z.record(z.string(),z.unknown()).default({}).meta(St),variation_dimension_id:z.string().optional().meta(St),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(St),notes:z.string().max(1e3).optional().meta(St),used_in_count:z.number().int().min(0).default(0).meta({...St,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":nl,"x-revturbine-schema-exposure":sa,...Df,...Fn()}),hA=yn("MessageBlockRecordAnchor"),dv=z.object({segment_id:z.string().min(1).meta(St),message_block_id:z.string().min(1).meta(St),ui_path_id:z.string().optional().meta(St),promotion_id:z.string().optional().meta(St)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":sa});z.object({payload_id:z.string().min(1).meta(St),tenant_id:z.string().min(1).meta(St),name:en.meta(St),surface_template_id:z.string().min(1).meta(St),default_message_block_id:z.string().min(1).meta(St),segment_content_map:z.array(dv).optional().meta(St),ui_path_id:z.string().optional().meta(St),promotion_id:z.string().optional().meta(St),status:z.enum(["draft","active","inactive"]).meta(St),created_at:z.string().datetime().optional().meta({...St,readOnly:true}),updated_at:z.string().datetime().optional().meta({...St,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":sa});({"/api/surface-template-anchors":{get:x({operationId:"listSurfaceTemplateAnchors",requestParams:{query:$},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:G(fA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:x({operationId:"listSurfaceTemplates",requestParams:{query:$},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:G(Pu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:x({operationId:"listMessageBlockRecordAnchors",requestParams:{query:$},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:G(hA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:x({operationId:"listMessageBlocks",requestParams:{query:$},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:G(Iu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:x({operationId:"listCtaPathAnchors",requestParams:{query:$},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:G(pA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:x({operationId:"listCtaPaths",requestParams:{query:$},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:G(Su)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:rl,Pii:bA}=Qe,{Persisted:uv}=pt,{Internal:yA,External:vA}=st,xA=It(et.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...rl,readOnly:true}),name:z.string().min(1).max(120).meta(rl),mode:z.enum(["light","dark","system"]).default("system").meta(rl),tokens:z.record(z.string(),z.string()).default({}).meta(rl)}).meta({id:"Theme","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":vA,...xA});var Mf=Z.merge(ie).extend({user_id:z.string().min(1).meta(bA),scope:z.string().min(1).meta(rl),preferences:z.record(z.string(),z.unknown()).default({}).meta(rl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":yA});({"/api/ui-preferences":{get:x({operationId:"listUiPreferences",requestParams:{query:$},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:G(Mf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:x({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Wn(Mf))}}},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:kt,Financial:us}=Qe,{Persisted:mv,Transient:Vc}=pt,{External:qc,Internal:pv}=st,fv=z.object({month:z.string().meta(kt),cohort_size:z.number().int().min(0).meta(kt),retained:z.number().int().min(0).meta(kt),retention_rate:z.number().min(0).max(1).meta(kt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),hv=z.object({step:z.string().meta(kt),label:z.string().meta(kt),count:z.number().int().min(0).meta(kt),conversion_rate:z.number().min(0).max(1).meta(kt),drop_off_rate:z.number().min(0).max(1).meta(kt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),gv=z.object({placement_id:z.string().meta(kt),placement_name:z.string().meta(kt),impressions:z.number().int().min(0).meta(kt),clicks:z.number().int().min(0).meta(kt),conversions:z.number().int().min(0).meta(kt),ctr:z.number().min(0).meta(kt),conversion_rate:z.number().min(0).meta(kt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),_v=z.object({date:z.string().meta(kt),mrr_cents:z.number().int().min(0).meta(us),arr_cents:z.number().int().min(0).meta(us),new_mrr_cents:z.number().int().min(0).meta(us),churned_mrr_cents:z.number().int().min(0).meta(us),expansion_mrr_cents:z.number().int().min(0).meta(us),net_new_mrr_cents:z.number().int().meta(us)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),bv=z.object({metric_key:z.string().min(1).meta(kt),label:z.string().meta(kt),current_value:z.number().meta(us),previous_value:z.number().nullable().default(null).meta(us),change_percent:z.number().nullable().default(null).meta(kt),period:z.string().meta(kt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(kt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":qc}),Nf=Z.merge(ie).merge(ue).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(kt),severity:Wo.meta(kt),resource_type:z.string().min(1).meta(kt),resource_id:z.string().min(1).meta(kt),summary:z.string().max(1e3).meta(kt),expected_value:z.unknown().optional().meta(kt),actual_value:z.unknown().optional().meta(kt),affected_customer_count:z.number().int().min(0).default(0).meta(kt),is_resolved:z.boolean().default(false).meta(kt),resolved_at:tn.meta(kt),metadata:Vt.meta(kt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":pv}),zf=Z.merge(ie).merge(ue).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(kt),severity:Wo.meta(kt),title:z.string().min(1).max(300).meta(kt),description:z.string().max(2e3).meta(kt),resource_type:z.string().optional().meta(kt),resource_id:z.string().optional().meta(kt),is_acknowledged:z.boolean().default(false).meta(kt),acknowledged_at:tn.meta(kt),acknowledged_by:z.string().nullable().default(null).meta(kt),metadata:Vt.meta(kt)}).meta({id:"Alert","x-revturbine-schema-persistence":mv,"x-revturbine-schema-exposure":pv});({"/api/analytics/kpis":{get:x({operationId:"listKpiAggregates",requestParams:{query:$},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:G(bv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:x({operationId:"listPlacementPerformance",requestParams:{query:$},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:G(gv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:x({operationId:"listRevenueMetrics",requestParams:{query:$},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:G(_v)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:x({operationId:"listCohortMetrics",requestParams:{query:$},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:G(fv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:x({operationId:"listFunnelSteps",requestParams:{query:$},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:G(hv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:x({operationId:"listDriftReports",requestParams:{query:$},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:G(Nf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:x({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:Nf}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:x({operationId:"listAlerts",requestParams:{query:$},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:G(zf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:x({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:zf}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:q,Pii:il}=Qe,{Persisted:yv,Transient:Hn}=pt,{Internal:aa,External:_r}=st,Kf=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),vv=Z.extend({event_type:z.string().min(1).meta(q),source:Kf.default("sdk").meta(q),tenant_id:z.string().min(1).optional().meta(q),user_id:z.string().min(1).optional().meta(il),session_id:z.string().min(1).optional().meta(il),occurred_at:z.string().datetime().meta(q),request_id:z.string().min(1).meta(q),attributes:z.record(z.string(),z.unknown()).default({}).meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),xv=vv.extend({ingested_at:z.string().datetime().meta(q)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":aa});z.array(z.object({id:z.string().min(1).optional().meta(q),event_type:z.string().min(1).meta(q),occurred_at:z.string().datetime().optional().meta(q),tenant_id:z.string().min(1).optional().meta(q),user_id:z.string().min(1).optional().meta(il),session_id:z.string().min(1).optional().meta(il),attributes:z.record(z.string(),z.unknown()).optional().meta(q),payload:z.record(z.string(),z.unknown()).optional().meta(q),message:z.string().optional().meta(q),level:z.string().optional().meta(q),path:z.string().optional().meta(q)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var Sv=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({user_id:z.string().min(1).meta(il),placement_id:z.string().min(1).meta(q),treatment_id:z.string().min(1).optional().meta(q),surface_slot_id:z.string().min(1).optional().meta(q),surface_template_id:z.string().min(1).optional().meta(q),payload_id:z.string().min(1).optional().meta(q),interaction_type:Sv.meta(q),interaction_at:z.string().datetime().optional().meta(q),message_block_handle:z.string().min(1).optional().meta(q),message_block_id:z.string().min(1).optional().meta(q),experiment_id:z.string().min(1).optional().meta(q),variant_key:z.string().min(1).optional().meta(q),test:z.boolean().optional().meta(q),metadata:z.record(z.string(),z.unknown()).optional().meta(q)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});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":_r});z.object({days_remaining:z.number().int().min(0).optional().meta(q)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({entitlement_handle:z.string().optional().meta(q),current_usage:z.number().min(0).optional().meta(q),usage_limit:z.number().min(0).optional().meta(q),usage_percent:z.number().min(0).max(100).optional().meta(q),threshold:z.number().min(0).optional().meta(q),balance:z.number().min(0).optional().meta(q),allocation:z.number().min(0).optional().meta(q),seats_used:z.number().int().min(0).optional().meta(q),seats_allowed:z.number().int().min(0).optional().meta(q)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({feature:z.string().min(1).meta(q)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({retry_count:z.number().int().min(0).optional().meta(q),renewal_date:z.string().optional().meta(q)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({event_type:z.string().min(1).meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});var Iv=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Tv=z.enum(["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"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({event_type:Tv.meta(q),source:Iv.meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({q:z.string().optional().meta(q),source:Kf.optional().meta(q),event_type:z.string().optional().meta(q),from:z.string().datetime().optional().meta(q),to:z.string().datetime().optional().meta(q),page:z.coerce.number().int().min(1).default(1).meta(q),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(q)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var Cv=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),Rv=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa}),Tu=Z.merge(ie).merge(ue).extend({event_id:z.string().min(1).meta(q),event_type:z.string().min(1).meta(q),source:Cv.meta(q),payload:z.record(z.string(),z.unknown()).default({}).meta(q),status:Rv.default("processed").meta(q),processed_at:z.string().datetime().optional().meta(q),error_message:z.string().optional().meta(q)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":aa});z.object({accepted:z.number().int().min(0).meta(q)}).meta({id:"null","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":aa});var FA=500,LA=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),kv=z.object({environment_id:z.string().min(1).meta(q),user_id:z.string().min(1).meta(il),account_id:z.string().min(1).meta(q),event_name:z.string().min(1).max(120).meta(q),event_ts:z.string().datetime().meta(q),properties:z.string().optional().meta(q),surface_slot_id:z.string().nullable().optional().meta(q),placement_id:z.string().nullable().optional().meta(q),payload_id:z.string().nullable().optional().meta(q),request_id:z.string().optional().meta(q),experiment_id:z.string().nullable().optional().meta(q),variant_key:z.string().nullable().optional().meta(q),tenant_id:z.string().optional().meta(q),event_id:z.string().nullable().optional().meta(q),origin:LA.nullable().optional().meta(q),playbook_version:z.string().nullable().optional().meta(q),decision_id:z.string().nullable().optional().meta(q),test:z.boolean().optional().meta(q)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({events:z.array(kv).min(1).max(FA).meta(q)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});var BA=10,wv=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Av=z.object({plans:z.number().int().min(0).meta(q),entitlements:z.number().int().min(0).meta(q),entitlement_rules:z.number().int().min(0).meta(q),segments:z.number().int().min(0).meta(q),placements:z.number().int().min(0).meta(q),placement_payloads:z.number().int().min(0).meta(q),content_ui_paths:z.number().int().min(0).meta(q),surface_templates:z.number().int().min(0).meta(q)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r}),Ov=z.object({event_type:wv.meta(q),occurred_at:z.string().datetime().meta(q),request_id:z.string().min(1).optional().meta(q),config_hash_id:z.string().min(1).max(64).optional().meta(q),sdk_version:z.string().min(1).max(64).optional().meta(q),runtime_mode:z.string().min(1).max(64).optional().meta(q),schema_version:z.string().min(1).max(64).optional().meta(q),bundle_version:z.string().min(1).max(64).optional().meta(q),config_shape:Av.optional().meta(q),message:z.string().max(500).optional().meta(q),reason:z.string().min(1).max(64).optional().meta(q),placement_handle:z.string().min(1).max(64).optional().meta(q),slot_handle:z.string().min(1).max(64).optional().meta(q),surface:z.string().min(1).max(64).optional().meta(q),plan_handle:z.string().min(1).max(64).optional().meta(q),entitlement_handle:z.string().min(1).max(64).optional().meta(q)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});z.object({events:z.array(Ov).min(1).max(BA).meta(q)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Hn,"x-revturbine-schema-exposure":_r});({"/api/events/search":{get:x({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Sf(xv)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:x({operationId:"listWebhookEvents",requestParams:{query:$},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:G(Tu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:at}=Qe,{Persisted:Mc,Transient:Nc}=pt,{Internal:ms}=st,Fv=It(et.Playbook,{sdkInput:true}),Lv=It(et.Playbook,{inConfig:false,sdkInput:true}),Bv=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Gf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),$f=z.object({name:en.meta(at),handle:xt.meta(at),plan_id:z.string().nullable().optional().meta(at),segment_id:z.string().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(at),grace_period_days:z.number().int().min(0).default(0).meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),require_payment_method:z.boolean().default(false).meta(at),auto_convert:z.boolean().default(true).meta(at),convert_to_plan_id:z.string().optional().meta(at),fallback_plan_id:z.string().optional().meta(at),limit_per_customer:z.number().int().min(1).default(1).meta(at),is_active:z.boolean().default(true).meta(at),metadata:Vt.meta(at)}),Fa=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...at,readOnly:true})}).merge($f).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Fv,...Fn()}),VA=yn("FreeTrialRuleAnchor"),Uv=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Wf=z.object({name:en.meta(at),handle:xt.meta(at),premium_plan_id:z.string().min(1).meta(at),fallback_plan_id:z.string().min(1).meta(at),segment_id:z.string().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),start_policy:Uv.default("signup").meta(at),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(at),entitlements_during_trial:z.array(z.string()).default([]).meta(at),is_active:z.boolean().default(true).meta(at),metadata:Vt.meta(at)}),La=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...at,readOnly:true})}).merge(Wf).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Fv,...Fn()}),qA=yn("ReverseTrialRuleAnchor"),Zf=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Yf=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":ms}),Ba=Z.merge(ie).merge(ue).extend({trial_limit_policy:Zf.default("1_per_lifetime").meta(at),eligibility_scope:Yf.default("per_customer").meta(at)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Lv}),Ua=Z.merge(ie).merge(ue).extend({trial_limit_policy:Zf.default("1_per_lifetime").meta(at),eligibility_scope:Yf.default("per_customer").meta(at)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms,...Lv}),Dc=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(at),rule_id:z.string().min(1).meta(at),rule_type:z.enum(["free_trial","reverse_trial"]).meta(at),plan_id:z.string().min(1).meta(at),status:Bv.default("active").meta(at),started_at:z.string().datetime().meta({...at,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(at),trial_limit_type:Gf.default("time").meta(at),usage_entitlement_handle:z.string().min(1).optional().meta(at),usage_limit_value:z.number().int().min(1).optional().meta(at),converted_at:tn.meta(at),cancelled_at:tn.meta(at),metadata:Vt.meta(at)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Mc,"x-revturbine-schema-exposure":ms});({"/api/free-trial-rule-anchors":{get:x({operationId:"listFreeTrialRuleAnchors",requestParams:{query:$},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:G(VA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:x({operationId:"listFreeTrialRules",requestParams:{query:$},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:G(Fa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:x({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:Fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Fa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"listReverseTrialRuleAnchors",requestParams:{query:$},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:G(qA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:x({operationId:"listReverseTrialRules",requestParams:{query:$},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:G(La)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:x({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:La}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:La.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:La}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:x({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:x({operationId:"listFreeTrialSettings",requestParams:{query:$},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:G(Ba)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:x({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:Ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:x({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ba.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:x({operationId:"listReverseTrialSettings",requestParams:{query:$},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:G(Ua)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:x({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:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:x({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ua.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:x({operationId:"listTrialInstances",requestParams:{query:$},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:G(Dc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:x({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:x({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:x({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:Dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:wn}=Qe,{Persisted:Xf,Transient:Vv}=pt,{Internal:zc}=st,qv=It(et.Playbook,{inConfig:false,sdkInput:true}),Dv=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":zc}),Mv=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Vv,"x-revturbine-schema-exposure":zc}),Nv=z.object({variant_id:z.string().min(1),name:en,weight:z.number().min(0).max(1).default(.5),is_control:z.boolean().default(false),config:z.record(z.string(),z.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc,...qv}),ps=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...wn,readOnly:true}),name:en.meta(wn),handle:xt.meta(wn),description:z.string().max(1e3).optional().meta(wn),experiment_type:Mv.meta(wn),status:Dv.default("draft").meta(wn),target_resource_id:z.string().optional().meta(wn),target_segment_ids:z.array(z.string()).default([]).meta(wn),variants:z.array(Nv).min(2).meta(wn),primary_metric:z.string().min(1).meta(wn),metric_threshold:z.number().default(.05).meta(wn),secondary_metrics:z.array(z.string()).default([]).meta(wn),traffic_allocation:z.number().min(0).max(1).default(1).meta(wn),started_at:tn.meta(wn),ended_at:tn.meta(wn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(wn),winning_variant_id:z.string().nullable().default(null).meta(wn),metadata:Vt.meta(wn)}).meta({id:"Experiment","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc,...qv,...Fn()}),MA=yn("ExperimentAnchor"),zv=Wo,Jf=Z.merge(ie).merge(ue).extend({experiment_id:z.string().optional().meta(wn),resource_type:z.string().min(1).meta(wn),resource_id:z.string().min(1).meta(wn),severity:zv.default("info").meta(wn),title:z.string().min(1).max(300).meta(wn),description:z.string().max(2e3).meta(wn),suggested_action:z.string().max(1e3).optional().meta(wn),estimated_impact:z.number().optional().meta(wn),is_dismissed:z.boolean().default(false).meta(wn),metadata:Vt.meta(wn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Xf,"x-revturbine-schema-exposure":zc});({"/api/experiment-anchors":{get:x({operationId:"listExperimentAnchors",requestParams:{query:$},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:G(MA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:x({operationId:"listExperiments",requestParams:{query:$},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:G(ps)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:x({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:x({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:ps.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:x({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:x({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:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:x({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:x({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:ps}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:x({operationId:"listOptimizationSuggestions",requestParams:{query:$},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:G(Jf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:x({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Jf}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:xr,Financial:Hv}=Qe,{Persisted:zA,Transient:Kv}=pt,{Internal:Qf}=st,HA=It(et.Playbook,{sdkInput:true}),Gv=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Kv,"x-revturbine-schema-exposure":Qf}),$v=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Kv,"x-revturbine-schema-exposure":Qf}),Os=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...xr,readOnly:true}),name:en.meta(xr),handle:xt.meta(xr),description:z.string().max(1e3).optional().meta(xr),rt_status:Gv.default("draft").meta(xr),discount_type:$v.meta(xr),discount_value:z.number().min(0).meta(Hv),currency:z.string().length(3).default("USD").meta(Hv),applicable_plan_ids:z.array(z.string()).default([]).meta(xr),applicable_addon_ids:z.array(z.string()).default([]).meta(xr),target_segment_ids:z.array(z.string()).default([]).meta(xr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(xr),current_redemptions:z.number().int().min(0).default(0).meta({...xr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(xr),starts_at:tn.meta(xr),ends_at:tn.meta(xr),stripe_coupon_id:z.string().nullable().default(null).meta(xr),stripe_promotion_code_id:z.string().nullable().default(null).meta(xr),auto_sync_stripe:z.boolean().default(false).meta(xr),metadata:Vt.meta(xr)}).meta({id:"Promotion","x-revturbine-schema-persistence":zA,"x-revturbine-schema-exposure":Qf,...HA,...Fn()}),KA=yn("PromotionAnchor");({"/api/promotion-anchors":{get:x({operationId:"listPromotionAnchors",requestParams:{query:$},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:G(KA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:x({operationId:"listPromotions",requestParams:{query:$},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:G(Os)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:x({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:x({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Os.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:x({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:x({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:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:x({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Vn,Pii:eh}=Qe,{Persisted:th}=pt,{Internal:nh}=st,Wv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),placement_id:z.string().min(1).meta(Vn),payload_id:z.string().nullable().default(null).meta(Vn),variant_id:z.string().nullable().default(null).meta(Vn),surface_type:z.string().meta(Vn),presented_at:z.string().datetime().meta({...Vn,readOnly:true}),dismissed_at:tn.meta(Vn),cta_clicked_at:tn.meta(Vn),cta_action_type:z.string().nullable().default(null).meta(Vn),converted:z.boolean().default(false).meta(Vn),session_id:z.string().optional().meta(Vn),metadata:Vt.meta(Vn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh}),Zv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),placement_id:z.string().min(1).meta(Vn),decision:z.enum(["show","suppress","defer"]).meta(Vn),reason:z.string().max(500).meta(Vn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Vn),experiment_id:z.string().nullable().default(null).meta(Vn),variant_id:z.string().nullable().default(null).meta(Vn),latency_ms:z.number().min(0).optional().meta(Vn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh}),Yv=Z.merge(ie).merge(ue).extend({customer_id:z.string().min(1).meta(eh),entitlement_handle:z.string().min(1).meta(Vn),entitlement_type:z.string().meta(Vn),result:z.enum(["granted","denied","limited","metered"]).meta(Vn),current_usage:z.number().nullable().default(null).meta(Vn),limit:z.number().nullable().default(null).meta(Vn),source:z.enum(["plan","addon","override","trial"]).meta(Vn),source_id:z.string().min(1).meta(Vn),latency_ms:z.number().min(0).optional().meta(Vn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":th,"x-revturbine-schema-exposure":nh});({"/api/presentation-records":{get:x({operationId:"listPresentationRecords",requestParams:{query:$},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:G(Wv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:x({operationId:"listDecisionLogs",requestParams:{query:$},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:G(Zv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:x({operationId:"listEntitlementEvalLogs",requestParams:{query:$},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:G(Yv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:g}=Qe,{Persisted:ul,Transient:ut}=pt,{Internal:Ei,External:Dt}=st,Et=It(et.Playbook,{sdkInput:true}),al=It(et.Playbook,{sdkInput:false}),oa=It(et.Playbook,{inConfig:false,sdkInput:false}),Jv=It(et.Playbook,{inConfig:false,sdkInput:true}),sl=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.CodeConstant}),rh=It(et.Playbook,{inConfig:false,sdkInput:true,source:Qr.Runtime}),ih=It(et.Playbook,{inConfig:false,sdkInput:false,source:Qr.Runtime}),WA=It(et.Billing,{sdkInput:false}),ZA=It(et.Metering,{sdkInput:false}),YA=It(et.Branding,{inConfig:true,sdkInput:true}),JA=It(et.Branding,{sdkInput:false}),Xv="1.0.0",ol=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:en.meta(g),handle:xt.meta(g),description:ui.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:Vt.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...oa,...Fn()}),XA=yn("SeatTypeAnchor"),ll=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.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:Vt.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...oa,...Fn()}),QA=yn("PersonalizationTokenAnchor"),Qv=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),Cu=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:Qv.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:Vt.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...WA,...mr()});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":ut,"x-revturbine-schema-exposure":Dt,...JA});var cl=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.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:Vt.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...ZA,...mr()}),sh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),dl=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.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:sh.default("warn").meta(g),hard_limit_action:sh.default("block").meta(g),grace_period_hours:z.number().int().min(0).default(0).meta(g),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(g),is_active:z.boolean().default(true).meta(g)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...Jv,...mr()}),tO=yn("UsageEnforcementSettingsAnchor"),ex=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":ut,"x-revturbine-schema-exposure":Ei}),tx=z.object({id:z.string().min(1).meta(g),group:z.array(ex).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":ut,"x-revturbine-schema-exposure":Ei}),nx=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),oh=z.object({capRules:z.array(tx).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:nx.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Ei}),Ru=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:xt.meta({...g,readOnly:true}),global_frequency_cap:oh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":ul,"x-revturbine-schema-exposure":Ei,...Jv,...mr()}),nO=yn("PlacementSettingsAnchor"),lh=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":ut,"x-revturbine-schema-exposure":Dt}),ch=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(lh).optional().meta(g),dimension_id:z.string().optional().meta(g),experiment_id:z.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),rx=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:cs.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),ix=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:cs.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...al}),sx=z.object({handle:z.string().min(1).meta(g),plan_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Ea.meta(g),visibility:cs.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:Yo.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),ax=z.object({handle:z.string().min(1).meta(g),addon_handle:z.string().min(1).meta(g),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z.string().nullable().default(null).meta(g),price_amount:z.number().min(0).meta(g),pricing_model:Ea.meta(g),visibility:cs.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:Yo.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),ox=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),lx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),cx=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:oh.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),dx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),ux=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),mx=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:$o.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),px=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(_u).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:$o.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}),...ra.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:Jo.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),fx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),hx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),gx=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":ut,"x-revturbine-schema-exposure":Dt}),_x=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(gx).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),dh=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":ut,"x-revturbine-schema-exposure":Dt}),bx=z.object({name:z.string().min(1).meta(g),action_type:dh.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":ut,"x-revturbine-schema-exposure":Dt,...Et}),yx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),vx=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),ah=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":ut,"x-revturbine-schema-exposure":Dt}),xx=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:ah.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:ah})).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":ut,"x-revturbine-schema-exposure":Dt,...Et}),Sx=z.object({label:z.string().meta(g),path:Zo.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),uh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(Sx).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),mh=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":ut,"x-revturbine-schema-exposure":Dt}),Px=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":ut,"x-revturbine-schema-exposure":Dt}),ph=z.object({max_per_period:Px.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),Ix=z.object({id:z.string().min(1).meta(g),target:mh.meta(g),surfaces:z.array(uh).meta(g),caps:ph.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":ut,"x-revturbine-schema-exposure":Dt}),Tx=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:na}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:na}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:na}),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":ut,"x-revturbine-schema-exposure":Dt}),Cx=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt}),fh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:Cx.meta(g),trigger:Tx.meta(g),payloads:z.array(Ix).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),Rx=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:mh.meta(g),caps:ph.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(uh).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":ut,"x-revturbine-schema-exposure":Dt,...Et}),rO=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":ut,"x-revturbine-schema-exposure":Dt,...Et}),iO=Z.merge($f).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),sO=Z.merge(Wf).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...oa}),kx=z.object({plans:z.array(rx).meta({...g,...Et}),addons:z.array(ix).optional().meta({...g,...al}),entitlements:z.array(mx).meta({...g,...Et}),entitlement_rules:z.array(px).meta({...g,...Et}),segments:z.array(ch).meta({...g,...Et}),content_ui_paths:z.array(bx).meta({...g,...Et}),slot_configs:z.array(fx).optional().meta({...g,...Et,...Oc({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,...Et,...Oc({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,...YA,...Oc({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(hx).optional().meta({...g,...Et}),message_blocks:z.array(xx).optional().meta({...g,...Et}),placement_payloads:z.array(Rx).optional().meta({...g,...Et}),placements:z.array(fh).optional().meta({...g,...Et}),content_promotions:z.array(yx).optional().meta({...g,...Et}),personalization_tokens:z.array(vx).optional().meta({...g,...Et}),surface_templates:z.array(_x).optional().meta({...g,...Et}),free_trial_rules:z.array(iO).optional().meta({...g,...al}),reverse_trial_rules:z.array(sO).optional().meta({...g,...al}),plan_variations:z.array(sx).optional().meta({...g,...al}),addon_variations:z.array(ax).optional().meta({...g,...al}),extension_rules:z.array(rO).optional().meta({...g,...Et}),seat_types:z.array(ox).optional().meta({...g,...Et}),enforcement_defaults:z.array(lx).optional().meta({...g,...Et}),placement_settings:z.array(cx).optional().meta({...g,...Et}),segment_dimensions:z.array(dx).optional().meta({...g,...Et}),meter_bindings:z.array(ux).optional().meta({...g,...Et}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...oa}),signal_catalog:z.object({}).strict().optional().meta({...g,...oa})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et}),Ex=z.object({artifact_type:z.literal("playbook").meta({...g,...sl,readOnly:true}),format_version:z.literal(Xv).meta({...g,...sl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...sl}),playbook_version_id:z.string().nullable().default(null).meta({...g,...rh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...ih,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...rh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...sl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...sl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...sl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...rh}),ku=Ex.extend(kx.shape).meta({"x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});function aO(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function wx(t){if(!aO(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(wx,ku).meta({id:"Playbook","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});z.preprocess(wx,ku.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ut,"x-revturbine-schema-exposure":Dt,...Et});({"/api/seat-type-anchors":{get:x({operationId:"listSeatTypeAnchors",requestParams:{query:$},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:G(XA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:x({operationId:"listSeatTypes",requestParams:{query:$},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:G(ol)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:x({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:x({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:x({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:x({operationId:"listPersonalizationTokenAnchors",requestParams:{query:$},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:G(QA)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:x({operationId:"listPersonalizationTokens",requestParams:{query:$},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:G(ll)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:x({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:er(ll)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:x({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ll.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:x({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:x({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Wn(Cu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Cu}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:x({operationId:"listMeteringConfigs",requestParams:{query:$},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:G(cl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:x({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:er(cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:x({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:cl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:x({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:x({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:$},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:G(tO)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:x({operationId:"listUsageEnforcementSettings",requestParams:{query:$},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:G(dl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:x({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:x({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:dl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:x({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:x({operationId:"listPlacementSettingsAnchors",requestParams:{query:$},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:G(nO)}}},default:{description:"Error response",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:x({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Wn(Ru)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:js}=Qe,{Persisted:Ax}=pt,{Internal:Ox}=st,jx=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Ox}),hh=Z.merge(ie).merge(ue).extend({action:jx.meta(js),resource_type:z.string().min(1).max(100).meta(js),resource_id:z.string().min(1).meta(js),resource_name:z.string().max(200).optional().meta(js),actor_id:z.string().min(1).meta(js),actor_email:z.string().email().optional().meta(js),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(js),summary:z.string().max(1e3).optional().meta(js),metadata:Vt.meta(js)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Ox});({"/api/changelog":{get:x({operationId:"listChangeLogEntries",requestParams:{query:$},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:G(hh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:x({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:hh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Eu}=Qe,{Persisted:uO,Transient:mO}=pt,{Internal:Fx}=st,Lx=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":mO,"x-revturbine-schema-exposure":Fx}),Ls=Z.merge(ie).extend({name:en.meta(Eu),handle:xt.meta(Eu),status:Lx.default("active").meta(Eu),metadata:Vt.meta(Eu)}).meta({id:"Tenant","x-revturbine-schema-persistence":uO,"x-revturbine-schema-exposure":Fx});({"/api/tenants":{get:x({operationId:"listTenants",requestParams:{query:$},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:G(Ls)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:x({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:x({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Ls.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:x({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:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:x({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:wi}=Qe,{Persisted:fO,Transient:Bx}=pt,{Internal:gh}=st,Ux=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Bx,"x-revturbine-schema-exposure":gh}),Va=Z.merge(ie).merge(ue).extend({name:en.meta(wi),handle:xt.meta(wi),description:ui.meta(wi),is_production:z.boolean().default(false).meta({...wi,readOnly:true}),status:Ux.default("active").meta(wi),cloned_from_environment_id:z.string().nullable().default(null).meta({...wi,readOnly:true}),cloned_at:tn.meta({...wi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...wi,readOnly:true}),requires_approval:z.boolean().default(false).meta(wi),auto_deploy_on_approval:z.boolean().default(false).meta(wi),created_by:z.string().optional().meta(wi),metadata:Vt.meta(wi)}).meta({id:"Environment","x-revturbine-schema-persistence":fO,"x-revturbine-schema-exposure":gh}),Vx=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":Bx,"x-revturbine-schema-exposure":gh});({"/api/environments":{get:x({operationId:"listEnvironments",requestParams:{query:$},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:G(Va)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:x({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:Va}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:x({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:x({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Va.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:x({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:Va}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:x({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Vx}}},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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ye,Pii:Hc}=Qe,{Transient:fs,Persisted:gO}=pt,{External:Di}=st,qx=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({superseded_output_id:z.string().min(1).meta(Ye),superseded_by:z.string().min(1).meta(Ye),reason:qx.meta(Ye)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":gO,"x-revturbine-schema-exposure":Di,...Qe.Operational});var Dx=z.enum(Ac).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),_h=z.object({output_id:z.string().meta(Ye),category:z.string().meta(Ye),surface:z.object({template:z.string().optional().meta(Ye),type:wc.meta(Ye),slot_id:z.string().optional().meta(Ye)}).meta(Ye),content:z.record(z.string(),z.unknown()).meta(Ye),promotion:z.record(z.string(),z.unknown()).optional().meta(Ye),cta_path:z.record(z.string(),z.unknown()).optional().meta(Ye),ui_path:z.record(z.string(),z.unknown()).optional().meta(Ye),rule_id:z.string().meta(Ye),decision_id:z.string().meta(Ye),config_version:z.string().meta(Ye),present_upsell:z.boolean().meta(Ye),experiment_id:z.string().optional().meta(Ye),variant_key:z.string().optional().meta(Ye),experiment_version_id:z.string().optional().meta(Ye)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Mx=z.object({status:Dx.meta(Ye),allowed:z.boolean().meta(Ye),reason:z.string().optional().meta(Ye),current_tier:z.string().optional().meta(Ye),limit:z.number().optional().meta(Ye),used:z.number().optional().meta(Ye),remaining:z.number().optional().meta(Ye),placement:_h.optional().meta(Ye)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({id:z.string().meta(Ye),name:z.string().optional().meta(Ye),discount:z.string().optional().meta(Ye),type:z.string().optional().meta(Ye),status:z.string().optional().meta(Ye)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});var Nx=z.object({id:z.string().meta(Hc),anonymous_id:z.string().optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Hc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),zx=z.object({slot_id:z.string().optional().meta(Ye),entitlement_handle:z.string().optional().meta(Ye),plan_handle:z.string().optional().meta(Ye),placement_handle:z.string().optional().meta(Ye),visible:z.boolean().meta(Ye),output:_h.optional().meta(Ye),reason_codes:z.array(z.string()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Hx=Mx,Kx=Bc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di}),Gx=z.object({segments:z.array(z.string()).optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Hc),usage_balances:z.record(z.string(),z.number()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});z.object({version:z.literal("1.0.0").meta(Ye),request_id:z.string().meta(Ye),tenant_id:z.string().meta(Ye),evaluated_at:z.string().datetime().meta(Ye),ttl_seconds:z.number().int().min(0).max(86400).meta(Ye),user:Nx.meta(Hc),decisions:z.array(zx).meta(Ye),entitlements:z.record(z.string(),Hx).optional().meta(Ye),theme:z.record(z.string(),z.unknown()).optional().meta(Ye),trial_status:Kx.optional().meta(Ye),user_context:Gx.optional().meta(Hc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":fs,"x-revturbine-schema-exposure":Di});var {Unrestricted:cn}=Qe,{Persisted:vO,Transient:wu}=pt,{Internal:Kc}=st,$x=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),ml=Z.merge(ie).merge(ue).extend({environment_id:z.string().min(1).meta(cn),name:en.meta(cn),description:z.string().max(2e3).optional().meta(cn),status:$x.default("draft").meta(cn),labels:z.array(z.string()).default([]).meta(cn),created_by:z.string().min(1).meta(cn),submitted_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...cn,readOnly:true}),submitted_at:tn.meta({...cn,readOnly:true}),reviewed_at:tn.meta({...cn,readOnly:true}),deployed_at:tn.meta({...cn,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...cn,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(cn),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(cn),review_notes:z.string().max(2e3).optional().meta(cn),rejection_reason:z.string().max(2e3).optional().meta(cn),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...cn,readOnly:true}),bundle:z.string().nullable().default(null).meta({...cn,readOnly:true}),metadata:Vt.meta(cn)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":vO,"x-revturbine-schema-exposure":Kc}),bh=z.object({handle:z.string().meta(cn),resource_type:z.string().meta(cn),resource_name:z.string().optional().meta(cn),action:z.enum(["create","update","delete"]).meta(cn),has_conflict:z.boolean().meta(cn)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Wx=z.object({playbook_version_id:z.string().meta(cn),entries:z.array(bh).meta(cn),total_entries:z.number().int().min(0).meta(cn),total_conflicts:z.number().int().min(0).meta(cn),deployable:z.boolean().meta(cn)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Zx=z.object({playbook_version_id:z.string().meta(cn),deployed_count:z.number().int().min(0).meta(cn),superseded_count:z.number().int().min(0).meta(cn),skipped_conflicts:z.number().int().min(0).meta(cn),deployed_at:z.string().datetime().meta(cn)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:x({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:x({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:x({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:x({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:Zx}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:x({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:ml}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:x({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:Wx}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:x({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:$},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:G(bh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:x({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:ml}}},default:{description:"Error",content:{"application/json":{schema:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:x({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:Le}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Mt,Pii:SO}=Qe,{Persisted:Mi}=pt,{Internal:Ni}=st,Yx=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Gc=Z.merge(ie).merge(ue).extend({name:en.meta(Mt),key_hash:z.string().min(1).meta({...SO,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Mt,readOnly:true}),key_last4:z.string().length(4).meta({...Mt,readOnly:true}),status:Yx.default("active").meta(Mt),last_used_at:tn.meta({...Mt,readOnly:true}),expires_at:tn.meta(Mt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Jx=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),la=Z.merge(ie).merge(ue).extend({key:z.string().min(1).max(100).meta(Mt),value_type:Jx.default("boolean").meta(Mt),value:z.string().max(4e3).default("false").meta(Mt),description:ui.meta(Mt),enabled:z.boolean().default(true).meta(Mt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Au=Z.merge(ie).merge(ue).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(30).meta(Mt),activity_high_min:z.number().int().min(1).default(10).meta(Mt),activity_medium_min:z.number().int().min(1).default(3).meta(Mt),activity_low_min:z.number().int().min(1).default(1).meta(Mt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Ou=Z.merge(ie).merge(ue).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":Mi,"x-revturbine-schema-exposure":Ni}),$c=Z.merge(ie).merge(ue).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:tn.meta({...Mt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Xx=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Qx=Z.merge(ue).extend({environment_id:z.string().min(1).default("production").meta(Mt),actor_type:Xx.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":Mi,"x-revturbine-schema-exposure":Ni}),eS=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Mi,"x-revturbine-schema-exposure":Ni}),Wc=Z.merge(ie).merge(ue).merge(qt).merge(Ht).extend({handle:xt.meta({...Mt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Mt),identifier_type:eS.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":Mi,"x-revturbine-schema-exposure":Ni,...mr()});({"/api/settings/api-keys":{get:x({operationId:"listApiKeys",requestParams:{query:$},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:G(Gc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:x({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(Gc)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Gc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:x({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:Gc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:x({operationId:"listFeatureFlags",requestParams:{query:$},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:G(la)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:x({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(la)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:x({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:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:x({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(la).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:x({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:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:x({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(Au).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Au}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:x({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn(Ou).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:x({operationId:"listOnboardingSteps",requestParams:{query:$},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:G($c)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:x({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:$c}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:x({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Wn($c).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:$c}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:x({operationId:"listAuditEvents",requestParams:{query:$},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:G(Qx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:x({operationId:"listPlacementTestUsers",requestParams:{query:$},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:G(Wc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:x({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:er(Wc)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:x({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:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:he,Pii:Mr}=Qe,{Persisted:ni,Transient:yh}=pt,{Internal:Sr}=st,tS=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({name:en.meta(he),email:z.string().email().meta(Mr),email_verified:z.boolean().default(false).meta(he),image:z.string().url().nullable().default(null).meta(Mr),role:tS.default("user").meta(he),banned:z.boolean().default(false).meta({...he,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...he,readOnly:true}),ban_expires:tn.meta({...he,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...he,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({expires_at:z.string().datetime().meta(he),token:z.string().min(1).meta({...Mr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Mr),user_agent:z.string().nullable().default(null).meta(Mr),user_id:z.string().min(1).meta({...he,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(he),impersonated_by:z.string().nullable().default(null).meta({...he,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({account_id:z.string().min(1).meta(he),provider_id:z.string().min(1).meta(he),user_id:z.string().min(1).meta({...he,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Mr,readOnly:true}),access_token_expires_at:tn.meta({...he,readOnly:true}),refresh_token_expires_at:tn.meta({...he,readOnly:true}),scope:z.string().nullable().default(null).meta(he),password:z.string().nullable().default(null).meta({...Mr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({identifier:z.string().min(1).meta(Mr),value:z.string().min(1).meta({...Mr,readOnly:true}),expires_at:z.string().datetime().meta(he)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({secret:z.string().min(1).meta({...Mr,readOnly:true}),backup_codes:z.string().min(1).meta({...Mr,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),verified:z.boolean().default(false).meta({...he,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({name:en.meta(he),slug:z.string().min(1).max(100).nullable().default(null).meta(he),logo:z.string().url().nullable().default(null).meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),metadata:z.string().nullable().default(null).meta(he)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var vh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var xh=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr}),Sh=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr});z.object({resource:xh,action:Sh}).meta({id:"Permission","x-revturbine-schema-persistence":yh,"x-revturbine-schema-exposure":Sr});var AO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],OO=["plans","entitlements","placements","targeting","content","experiments"],jO=["plans","entitlements","placements","targeting","content","experiments"],FO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],LO=["read","create","update","delete","publish","approve","invite","manage_roles"];function ju(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var BO=ju(AO,["read"]),UO=[...BO,...ju(OO,["create","update"])];[...UO,...ju(jO,["publish","approve","delete"])];ju(FO,LO);var VO=xh.options.flatMap(t=>Sh.options.map(e=>`${t}:${e}`));z.enum(VO).meta({id:"McpTokenScope","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({organization_id:z.string().min(1).meta({...he,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),role:vh.default("viewer").meta(he),created_at:z.string().datetime().meta({...he,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});var nS=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({organization_id:z.string().min(1).meta({...he,readOnly:true}),email:z.string().email().meta(Mr),role:vh.nullable().default(null).meta(he),status:nS.default("pending").meta(he),expires_at:z.string().datetime().meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),inviter_id:z.string().min(1).meta({...he,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({name:z.string().max(200).nullable().default(null).meta(he),public_key:z.string().min(1).meta({...Mr,readOnly:true}),user_id:z.string().min(1).meta({...he,readOnly:true}),credential_id:z.string().min(1).meta({...he,readOnly:true}),counter:z.number().int().default(0).meta({...he,readOnly:true}),device_type:z.string().min(1).meta(he),backed_up:z.boolean().default(false).meta(he),transports:z.string().nullable().default(null).meta(he),created_at:z.string().datetime().meta({...he,readOnly:true}),aaguid:z.string().nullable().default(null).meta(he)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.merge(ie).extend({config_id:z.string().min(1).meta(he),name:z.string().max(200).nullable().default(null).meta(he),start:z.string().nullable().default(null).meta(he),reference_id:z.string().min(1).meta(he),prefix:z.string().nullable().default(null).meta(he),key:z.string().min(1).meta({...Mr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(he),refill_amount:z.number().int().nullable().default(null).meta(he),last_refill_at:tn.meta({...he,readOnly:true}),enabled:z.boolean().default(true).meta(he),rate_limit_enabled:z.boolean().default(false).meta(he),rate_limit_time_window:z.number().int().nullable().default(null).meta(he),rate_limit_max:z.number().int().nullable().default(null).meta(he),request_count:z.number().int().default(0).meta({...he,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...he,readOnly:true}),last_request:tn.meta({...he,readOnly:true}),expires_at:tn.meta(he),permissions:z.string().nullable().default(null).meta(he),metadata:z.string().nullable().default(null).meta(he)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});Z.extend({issuer:z.string().min(1).meta(he),oidc_config:z.string().nullable().default(null).meta(he),saml_config:z.string().nullable().default(null).meta(he),user_id:z.string().min(1).meta({...he,readOnly:true}),provider_id:z.string().min(1).meta(he),organization_id:z.string().nullable().default(null).meta(he),domain:z.string().min(1).meta(he)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":Sr});async function sS(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 rS(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var pl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function GO(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new pl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!rS(n))throw new pl("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(!rS(r)||r>n)throw new pl("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 aS(t,e){let n=K_,r=G_,i=GO(t);if(i.minReadableSchemaVersion>n)throw new pl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${i.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(i.schemaVersion>n)throw new pl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);if(i.schemaVersion<r)throw new pl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);return i}var oS=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),iS=z.string().datetime({offset:true}),$O=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),Ph=z.object({url:z.string().min(1),sha256:oS,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),WO=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:$O}).strict(),ZO=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:ZO,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:Ph,standby:Ph.optional(),previous:Ph.optional(),not_before:iS,expires_at:iS,rollback_to:oS.optional(),signature:WO.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 YO=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),Da=class{constructor(){w(this,"types",new Map);w(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(s=>s.surface.type===e.surfaceType)};this.types.set(r.id,r);let i=this.surfaceIndex.get(r.surfaceType)??[];i.includes(r.id)||(i.push(r.id),this.surfaceIndex.set(r.surfaceType,i));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let i=r.filter(s=>s!==e);i.length>0?this.surfaceIndex.set(n.surfaceType,i):this.surfaceIndex.delete(n.surfaceType);}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 r=(this.surfaceIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,s)=>s.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())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function Ih(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=s=>{if(typeof s=="number"&&Number.isFinite(s))return s;if(typeof s=="string"&&s.trim().length>0){let a=Number(s);if(Number.isFinite(a))return a}},i=s=>{let a="_usage_remaining";if(s==="usage_remaining"){let p=r(e.usage_current??e.current_usage),v=r(e.usage_limit);return p!==void 0&&v!==void 0?Math.max(0,v-p):void 0}if(!s.endsWith(a))return;let o=s.slice(0,-a.length);if(!o)return;let l=r(e[`${o}_usage_current`]),b=r(e[`${o}_usage_limit`]);if(!(l===void 0||b===void 0))return Math.max(0,b-l)};return t.replace(/\{\{(\w+)\}\}/g,(s,a)=>{let o=n[a]??a,l=e[o];if(l!=null)return String(l);let b=i(o);return b!=null?String(b):`{{${a}}}`})}function fl(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=Ih(i,e):n[r]=i;return n}function Bu(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,i]of Object.entries(t))YO.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 Uu(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 qa=null,Fu=null,Lu=false;function lS(t){Fu=t,qa&&!Lu&&(Lu=true,t(qa));}function cS(t){Fu?.(t);}function Vu(){return qa||(qa=new Da,Fu&&(Lu=true,Fu(qa))),qa}function dS(){qa=null,Lu=false;}var Du=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();}},qu=null;function Ma(){return qu||(qu=new Du),qu}function JO(){qu=null;}function XO(t,e){Ma().register(t,e);}function QO(t){return Ma().unregister(t)}function Th(t,e=Ma()){let n=new Map;for(let[r,i]of Object.entries(t)){if(e.has(r))continue;let s=(a,o)=>{let l=o.placement.cta_path??o.placement.ui_path??{};Promise.resolve().then(()=>i(l)).catch(b=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,b);});};e.register(r,s),n.set(r,s);}return ()=>{for(let[r,i]of n)e.get(r)===i&&e.unregister(r);}}function Ch(t,e=Ma()){if(e.has("snooze"))return ()=>{};let n=(r,i)=>{let s=i.placement,a=typeof s.remind_later_minutes=="number"?s.remind_later_minutes:void 0;t(i.placement.output_id,a!==void 0?a*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}function Mu(t,e,n,r){let i=n.get(t.type);return i?(i(t,e),true):(r?.(t),false)}var Zc={recommended_plan_handle:"",recommended_plan_name:""};function uS(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:i}=t;if(i.length===0)return Zc;if(e==="custom"){let o=n??"";if(o===""||o===r)return Zc;let l=i.find(b=>b.unique_handle===o);return l?{recommended_plan_handle:l.unique_handle,recommended_plan_name:l.name}:Zc}if(r==="")return Zc;let s=zm(r,i);if(s===null)return Zc;let a=i.find(o=>o.unique_handle===s);return {recommended_plan_handle:s,recommended_plan_name:a?.name??s}}var Rh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",zu=Rh.length,e2=zu-1,t2=10,Nu=16;function n2(t){let e=t,n="";for(let r=0;r<t2;r+=1){let i=e%zu;n=Rh[i]+n,e=Math.floor(e/zu);}return n}function mS(){let t=new Uint8Array(Nu);crypto.getRandomValues(t);let e=new Array(Nu);for(let n=0;n<Nu;n+=1)e[n]=t[n]%zu;return e}function r2(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<e2)return t[e]+=1,true;t[e]=0;}return false}function pS(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Nu?r2(e)||(t+=1,e=mS()):(t=n,e=mS());let r=n2(t);for(let i=0;i<e.length;i+=1)r+=Rh[e[i]];return r}}}var kh=pS();var i2=new Set([408,429,500,502,503,504]);function s2(t){return new Promise(e=>setTimeout(e,t))}async function Eh(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??s2,s;for(let a=0;a<=n;a+=1){try{let o=await t();if(o.ok)return {delivered:!0,status:o.status,attempts:a+1};if(!i2.has(o.status))return {delivered:!1,status:o.status,attempts:a+1};s=new Error(`ingest_status_${o.status}`);}catch(o){s=o instanceof Error?o:new Error(String(o));}a<n&&await i(r*(a+1));}return {delivered:false,error:s,attempts:n+1}}function wh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function fS(){let t=typeof IntersectionObserver<"u",e=new Map;function n(i,s,a,o){a.fired||(a.fired=true,a.timer!==null&&(clearTimeout(a.timer),a.timer=null),i.io.unobserve(s),i.tracked.delete(s),a.onExposed(o));}function r(i,s){let a=`${i}|${s}`,o=e.get(a);if(o)return o;let l=new Map,p={io:new IntersectionObserver(v=>{let P=e.get(a);if(P)for(let S of v){let y=l.get(S.target);!y||y.fired||(S.isIntersecting?y.minVisibleMs<=0?n(P,S.target,y,"viewport"):y.timer===null&&(y.timer=setTimeout(()=>n(P,S.target,y,"viewport"),y.minVisibleMs)):y.timer!==null&&(clearTimeout(y.timer),y.timer=null));}},{threshold:i,rootMargin:s}),tracked:l};return e.set(a,p),p}return {supported:t,observe(i,s,a){if(!t){let v=false;return Promise.resolve().then(()=>{v||a("render_fallback");}),()=>{v=true;}}let o=s.threshold??.5,l=s.rootMargin??"0px",b=r(o,l),p={onExposed:a,minVisibleMs:s.minVisibleMs??0,timer:null,fired:false};return b.tracked.set(i,p),b.io.observe(i),()=>{p.fired||(p.timer!==null&&(clearTimeout(p.timer),p.timer=null),b.io.unobserve(i),b.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var Na=fS();var a2="data-rt-event",o2="data-rt-ref",l2="data-rt-no-capture",hS="data-rt-prop-";var c2=new Set(["password","file","hidden"]),d2=/(^|\s)(cc-|current-password|new-password|one-time-code)/;function u2(t){if(t.tagName.toLowerCase()!=="input")return false;let n=(t.getAttribute("type")??"text").toLowerCase();if(c2.has(n))return true;let r=(t.getAttribute("autocomplete")??"").toLowerCase();return d2.test(r)}function m2(t,e){let n=e instanceof Document?e.documentElement.parentElement:e.parentElement,r=t,i=null;for(;r&&r!==n;){if(r instanceof HTMLElement){if(r.hasAttribute(l2))return null;if(!i){let s=r.getAttribute(a2);if(s){if(u2(r))return null;i={el:r,event:s};}}}r=r.parentElement;}return i}function p2(t,e,n){let r={},i=0;for(let a of Array.from(t.attributes)){if(i>=e)break;if(!a.name.startsWith(hS))continue;let o=a.name.slice(hS.length);o&&(r[o]=String(a.value).slice(0,n),i+=1);}let s=t.getAttribute(o2);return s&&(r.ref=s.slice(0,n)),r}function Ah(t,e,n={}){let r=n.events??["click"],i=n.maxProps??24,s=n.maxValueLen??256,a=o=>{let l=o.target;if(!(l instanceof Element))return;let b=m2(l,t);b&&e(b.event,p2(b.el,i,s));};for(let o of r)t.addEventListener(o,a,true);return ()=>{for(let o of r)t.removeEventListener(o,a,true);}}var Fh=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],f2=new Set(Fh),h2=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,g2=ha();function Oh(t){g2&&console.warn(t);}var vS=new Set(su.options),xS=["usage","account_id","email","email_type","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],gS=new Set(xS);function I8(t,e){return Wu(e,"defineUiPathResolvers(resolvers)")}function Wu(t,e){if(!t)return {};let n={};for(let[r,i]of Object.entries(t)){let s=String(r||"").trim();if(!s)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 '${s}'.`);n[s]=i;}return n}var Hu={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function hl(t){return t?.playbook??t?.exportedConfig}function T8(t){return {...t,runtimeMode:"revturbine_server"}}function C8(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function _2(t){let e=Wu(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function R8(t){return _2(t)}function k8(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function E8(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function w8(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function ca(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function A8(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function O8(t,e,n){return {eventType:t,payload:e,options:n}}var _S="revturbine:sdk-route-change",$u="sdk_validation_warning",b2="revturbine:decision-cache",y2="revturbine:interaction-state",v2="revturbine:presentation-caps",x2="/api/track",S2="/api/sdk/meta",P2="/api/events/interactions",I2="/api/placements/interactions",T2="revturbine-web-sdk",Lh="user_context_observed",C2=20,R2=5e3;function SS(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=PS(t);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function PS(t){return we(t.payload)?t.payload:null}var k2=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function E2(t){let e={};for(let n of k2)e[n]=SS(t,n);return e}var w2=["placement_","gate_","slot_","engagement_"],A2=new Set(["impression","segment_enrolled","segment_unenrolled",Lh]);function O2(t){let e=Dl(t);return e===$u?"derived":A2.has(e)||w2.some(n=>e.startsWith(n))?"automatic":"explicit"}var j2=["decision_id"];function F2(t){let e={};for(let n of j2)e[n]=SS(t,n);return e}function L2(t){return qm(t,Mh(8))}async function bS(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Ud(new Uint8Array(e))}function Mh(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 s=n[i].toString(16).padStart(2,"0");r+=s;}return r.slice(0,t)}function Pr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Mh(16)}`}function Ku(){return So()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function yS(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function B2(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 fp(t,n)}function U2(t,e,n){if(t.length===0)return true;let r=new Map;for(let i of t){let s=n.get(i)??"__no_dim__",a=r.get(s)??[];a.push(i),r.set(s,a);}for(let i of r.values())if(!i.some(s=>e.has(s)))return false;return true}var Bh=class{constructor(e){w(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Zu=class Zu{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<Zu.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 sS(new TextEncoder().encode(r))!==i)return this.cached;let s=JSON.parse(r);aS(s);let a=vs(s,"GET /api/sdk/config",this.legacyTargetDefaults);return a&&(this.cached=a,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};w(Zu,"REFRESH_TTL_MS",6e4);var Uh=Zu,Vh=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=vs(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},qh=class{constructor(e,n){w(this,"source");w(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return vs(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return vs(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Yc=class Yc{constructor(e){w(this,"tenantId");w(this,"apiKey");w(this,"ingestPublicKey");w(this,"environmentId");w(this,"testTraffic");w(this,"analyticsEnabled");w(this,"anonymousTelemetryEnabled");w(this,"previewMode");w(this,"telemetryConsent");w(this,"telemetryCounters",wh());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,"unbridgeUiPathCtaResolvers",()=>{});w(this,"unregisterBuiltinSnoozeResolver",()=>{});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,"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);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??C2),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??R2),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Hu.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,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=Wu(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=$s(e.persistentStorage),this.sessionStore=qp(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?yS():{},...e.user||{}},this.pageContext={...this.policy.inferPage?Ku():{},...e.page||{},tags:ql(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),this.sessionId=Pr(),this.providerRegistry=new oc,this.placementTypeRegistry=new Da,this.impressionHistory=new jp({store:new Xd({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),cS(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=Th(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=Ch((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),Fr()&&this.policy.routerAutoTrack&&this.installRouteTracking(),Fr()&&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();}isLocalOnlyMode(){return this.runtimeMode===Hu.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new qh(e.configProvider,n);let r=vs(hl(e.localRuntime),"localRuntime.playbook",n),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new Vh(i,n,r);if(r)return new Bh(r);let s=e.runtimeMode??Hu.Server,a=e.ingestPublicKey??e.apiKey;if(s!==Hu.LocalOnly&&e.endpoint&&a)return new Uh(e.endpoint,e.tenantId,a,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??[],s={enableClientCapsEnforcement:[...n.flatMap(a=>a.payloads??[]),...e?.placement_payloads??[]].some(a=>a.caps?.max_per_period!==void 0||a.caps?.cooldown_days!==void 0||a.remind_later_minutes!==void 0&&a.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(a=>a.category==="gated"),enableTrialAutoTriggers:n.some(a=>a.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:s},s}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 s=String(i.field||"").trim();if(!s)continue;let a=this.segmentIdsByPredicateField.get(s)??new Set;a.add(r.handle),this.segmentIdsByPredicateField.set(s,a);}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=ya({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.userContext.usage,r=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,a=this.userContext.tiers,o=a!==void 0&&Object.keys(a).length>0,l=this.userContext.experiments,b=l!==void 0&&Object.keys(l).length>0;if(!e&&!n&&!o&&!b)return;let p={};if(n&&typeof n=="object"){let P=Ss(n);for(let[S,y]of Object.entries(n)){if(!y||typeof y!="object")continue;let T=typeof y.amount=="number"?y.amount:P[S]??0,E=typeof y.limit=="number"?y.limit:0,A=E>0?Math.max(0,E-T):0;p[S]={used:T,limit:E,remaining:A,unit:typeof y.unit=="string"?y.unit:void 0,reset_date:typeof y.reset_date=="string"?y.reset_date:void 0};}}let v={...r.in_trial!==void 0?{trialActive:r.in_trial}:{},...r.trial_limit_type!==void 0?{trialLimitType:r.trial_limit_type}:{},...r.progress_percent!==void 0?{trialProgressPercent:r.progress_percent}:{},...r.days_remaining!==void 0?{trialDaysRemaining:r.days_remaining}:{},...r.day_number!==void 0&&r.days_remaining!==void 0?{trialDaysTotal:r.day_number+r.days_remaining}:{},...r.state!==void 0?{trialState:r.state}:{},...r.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:r.usage_entitlement_handle}:{},...r.usage_consumed!==void 0?{trialUsageConsumed:r.usage_consumed}:{},...r.usage_limit!==void 0?{trialUsageLimit:r.usage_limit}:{}};return {...e?{plan:{currentPlanHandle:e.id??e.name??"",currentPlanName:e.name,...v,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(p).length>0||o?{entitlements:{entries:{},usage:p,...o?{tiers:a}:{}}}:{},...b?{experiments:{assignments:l}}:{}}}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 Dd(e,n,r)}buildTargetingState(e){return Md(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 s=this.buildTargetingState(e),a=this.buildTargetingState(n),o=new Set,l=new Set([...Object.keys(s.segmentTraits),...Object.keys(a.segmentTraits)]);for(let b of l)s.segmentTraits[b]!==a.segmentTraits[b]&&o.add(b);this.markSegmentsDirtyForFields(o);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return Fr()?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`,s=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:Pr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:ca(i,s,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${Pr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:e.surfaceType??"banner",slot_id:e.slotId},content:{title:r,header:r,body:"This placement is in safe fallback mode because all configured providers failed.",cta_label:"Retry later"},rule_id:"sdk_disabled_provider_failure",decision_id:n,config_version:"sdk-fallback",present_upsell:false}}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 rp(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(i,s)=>!i||!s?true:i===s;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return Nm(e,n.planHandle)}applyCategoryConflictSuppression(e){return Vd(e)}resolveLocalPlacementFromCandidates(e,n){return sp(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,s]of this.localPlacementsByLookupKey.entries()){if(!s)continue;let a=Mm(i);this.localLookupMatchesConfig(a,e)&&this.localOutputMatchesConfig(s,e)&&r.push(s);}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,s]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,s);for(let[i,s]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,s);for(let[i,s]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,s);for(let[i,s]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,s);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 `${b2}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${y2}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${v2}:${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,s])=>{!s||typeof s!="object"||!Number.isFinite(s.expiresAt)||s.expiresAt<=r||this.decisionCache.set(i,s);});}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 s=Array.isArray(i.seenAt)?i.seenAt.filter(o=>Number.isFinite(o)&&o>0):[],a=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:s,cooldownUntil:a});}}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;if(we(e)&&typeof e.id=="string"&&e.id)return e.id;let n=this.userContext.custom;return typeof n?.plan=="string"&&n.plan?n.plan:typeof n?.plan_handle=="string"&&n.plan_handle?n.plan_handle:""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),i=new Set;if(!r)return i;i.add(r);for(let s of e.plans??[]){let a=typeof s.unique_handle=="string"?s.unique_handle.toLowerCase():"";a===r&&i.add(a);}return i}ruleTargetsActivePlan(e,n){let i=(Array.isArray(e.targets)?e.targets:[]).filter(s=>we(s)&&s.kind==="plan");return i.length===0?true:i.some(s=>typeof s.id=="string"&&n.has(s.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 a of i){let o=typeof a.unique_handle=="string"?a.unique_handle:"";o&&r.set(o,o);}let s=e.entitlement_rules??[];for(let a of s){if(!we(a))continue;let o=typeof a.entitlement_id=="string"?a.entitlement_id:"";if(!o)continue;let l=typeof a.kind=="string"?a.kind:"";if(!(l==="usage_limit"||l==="credits"||l==="seat"))continue;let p=r.get(o)??"",v=typeof a.unit=="string"?a.unit:"",P=Hm(v),S=P&&!Km(P)?P:Qa(p||o);S&&(this.usageTokenPrefixByEntitlement.set(o,S),p&&this.usageTokenPrefixByEntitlement.set(p,S));let y=Number(a.limit_value??a.allowance_value);if(!Number.isFinite(y)||y<=0||!this.ruleTargetsActivePlan(a,n))continue;let T=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(o,{limit:y,warningPercent:T}),p&&this.usageLimitByEntitlement.set(p,{limit:y,warningPercent:T});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=dp({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(),s=String(i||"").toLowerCase(),a=e.plans.map(o=>({source_id:o.unique_handle,unique_handle:o.unique_handle,name:o.name,tier_position:o.tier_position??0,sort_order:o.sort_order??0}));return uS({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:s,plans:a})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[i,s]of Object.entries(r))i!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(n[i]=s);if(n.plan_name===void 0){let i=ga(this.getConfiguredExportedConfig(),this.userContext.plan);i?n.plan_name=i:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let i=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=i.recommended_plan_handle,n.recommended_plan_name=i.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...Ss(this.userContext.usage),...this.usageBalances},n={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let s=this.usageTokenPrefixByEntitlement.get(r)??Qa(r)??r,a=this.usageThresholdForEntitlement(r);n[s]={current:i,...a?.limit!==void 0?{limit:a.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return Lp({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(),s=String(i||"").toLowerCase(),a=this.getTargeting(),o=new Set(a.segmentIds??[]),{trialGrantedEntitlementHandles:l,effectivePlanHandle:b}=this.resolveReverseTrialGrants(r);return Hl({handle:e,context:n,currentPlanHandle:s,segmentIds:o,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...l!==void 0?{trialGrantedEntitlementHandles:l}:{},...b!==void 0?{effectivePlanHandle:b}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let s=(e.reverse_trial_rules??[]).find(a=>a.fallback_plan_id===r&&a.is_active!==false);return !s||s.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(s.entitlements_during_trial),effectivePlanHandle:s.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=ga(r,this.userContext.plan),s=i??n?.plan??(this.resolveContextPlanRaw()||void 0),a=[...r?.segments??[]],o=Array.from(new Set(a.flatMap(P=>(P.predicates??[]).map(S=>S.field)))).sort((P,S)=>P.localeCompare(S)),l={...n?.traits??{},...this.userContext.custom??{}};for(let[P,S]of Object.entries(this.userContext.entitlements??{}))l[P]===void 0&&(l[P]=S);i&&l.plan_name===void 0&&(l.plan_name=i),s&&l.plan===void 0&&(l.plan=s);let b={...n?.usage??{},...Ss(this.userContext.usage),...this.usageBalances};for(let[P,S]of Object.entries(b))l[P]===void 0&&(l[P]=S);let p={};for(let[P,S]of Object.entries(l))(typeof S=="string"||typeof S=="number"||typeof S=="boolean")&&(p[P]=S);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),a.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),a.length>0&&this.dirtySegmentIds.size>0){for(let P of this.dirtySegmentIds){let S=this.configuredSegmentsById.get(P)??a.find(T=>T.handle===P);if(!S){this.segmentMembershipBySegmentId.delete(P);continue}let y=Zl([S],p).length>0;this.segmentMembershipBySegmentId.set(P,y);}this.dirtySegmentIds.clear();}let v=a.length>0?a.filter(P=>this.segmentMembershipBySegmentId.get(P.handle)===true).map(P=>P.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:v,traits:l,...s?{plan:s}:{},...Object.keys(b).length>0?{usage:b}:{},configuredSegments:a,configuredTraitFields:o}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),s=this.getPolicy(),a=this.getConfiguredExportedConfig(),o=new Set(r.segmentIds),l=r.configuredSegments.map(L=>{let J=Array.isArray(L.predicates)?L.predicates.map(Ae=>B2(Ae,r.traits)):[],ge=J.length>0?J.every(Ae=>Ae.matched):o.has(L.handle);return {segmentId:L.handle,...L.name?{segmentName:L.name}:{},matched:ge,predicates:J}}),b=new Map,p=new Map;if(Array.isArray(a?.entitlements))for(let L of a.entitlements){let J=Yn(L.unique_handle),ge=J;ge&&J&&b.set(ge,J);let Ae=Yn(L.type);ge&&Ae&&p.set(ge,Ae);}let v=new Map;if(Array.isArray(a?.plans))for(let L of a.plans){let J=Yn(L.unique_handle),ge=J;ge&&J&&v.set(ge,J);}let S=(Yn(r.plan,r.traits.plan,r.traits.plan_handle,r.traits.plan_id)??"").toLowerCase(),y=new Map;if(Array.isArray(a?.segments))for(let L of a.segments){let J=Yn(L.handle),ge=Yn(L.dimension_id);J&&ge&&y.set(J,ge);}let T=Array.isArray(a?.entitlement_rules)?a.entitlement_rules.map((L,J)=>{let ge=Yn(L.id)??`entitlement_rule_${J}`,Ae=Yn(L.entitlement_id),Oe=Ae?b.get(Ae):void 0,lt=Array.isArray(L.targets)?L.targets.filter(je=>je.kind==="plan").map(je=>je.id):[],Je=lt.map(je=>v.get(je)??je),Xe=Array.isArray(L.segment_ids)?L.segment_ids.filter(je=>typeof je=="string"):[],zt=Yn(L.kind),At=!S||lt.some(je=>je.toLowerCase()===S),dn=U2(Xe,o,y),Jt=At&&dn,Ot=Oe?i[Oe]:Ae?i[Ae]:void 0,Y=Jt?Ot?.status??"unknown":"unknown",X;if(Jt)switch(zt){case "feature":X=L.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let je=Yn(L.tier_name);X=je?`unlocks ${je} tier`:"unlocks capability tier";break}case "usage_limit":{let je=typeof L.limit_value=="number"?L.limit_value:void 0,Zn=Yn(L.unit)??"",Gr=Yn(L.period_scope)??"",jt=Gr?` / ${Gr.replace("per_","")}`:"";X=je!=null?`sets limit to ${je.toLocaleString()}${Zn?` ${Zn}`:""}${jt}`:"sets usage limit";break}case "credits":{let je=L.allowance_value,Zn=typeof je=="number"?je:void 0,Gr=Yn(L.unit)??"credits",jt=Yn(L.reset_period)??"",Ir=jt?` / ${jt.replace("per_","")}`:"";X=Zn!=null?`grants ${Zn.toLocaleString()} ${Gr}${Ir}`:"grants credit allowance";break}case "seat":{let je=L.included_count,Zn=typeof je=="number"?je:void 0;X=Zn!=null?`includes ${Zn} seat${Zn===1?"":"s"}`:"includes seats";break}default:if(Ae){let je=p.get(Ae);je==="feature"?X="grants access":je&&(X=`${je.replace(/_/g," ")} entitlement`);}break}return {ruleId:ge,...Ae?{entitlementId:Ae}:{},...Oe?{entitlementHandle:Oe}:{},...zt?{kind:zt}:{},planScopes:Je,planIds:lt,...Xe.length>0?{segmentIds:Xe}:{},matchesPlan:At,matchesSegment:dn,matched:Jt,outcome:Y,...X?{outcomeDescription:X}:{},...Ot?.reason?{reason:Ot.reason}:{}}}):[],E=Yn(n.output?.output_id),A=this.placements.get(e.placementId),k=Yn(A?.name)??"",O=Array.isArray(A?.metadata?.surface_template_ids)?A.metadata.surface_template_ids:[],R=[],C=new Set;if(Array.isArray(a?.placements))for(let L of a.placements){if(!L||typeof L!="object")continue;let J=Yn(L.id)??"",ge=Yn(L.name)??"";if(C.has(J))continue;let Ae=Yn(n.output?.rule_id);if(Ae&&J===Ae){C.add(J),R.push(L);continue}if(k&&(J===k||ge===k||J===`pl_${k}`||ge===`pl_${k}`)){C.add(J),R.push(L);continue}O.length>0&&(L.payloads??[]).some(Je=>(Je.surfaces??[]).some(zt=>{let At=Yn(zt.template_id);return At?O.includes(At):false}))&&(C.add(J),R.push(L));}let D=R.flatMap(L=>(L.payloads??[]).map(ge=>{let Ae=ge.target,Oe=Ae?.plan_ids??[],lt=Oe.map(Y=>v.get(Y)??Y),Je=Ae?.segment_chips??[],zt=(ge.surfaces??[]).map(Y=>Yn(Y.template_id)).filter(Y=>typeof Y=="string"),At=Oe.length===0||!S||Oe.some(Y=>Y.toLowerCase()===S),dn=Je.length===0||Je.some(Y=>o.has(Y)),Jt="active",Ot=Jt==="active"&&At&&dn;return {payloadId:String(ge.id??""),placementId:String(L.id??""),placementName:String(L.name??""),status:Jt,planIds:Oe,planScopes:lt,segmentChips:Je,surfaceTemplateIds:zt,matchesPlan:At,matchesSegment:dn,eligible:Ot,selected:!!E&&E===String(ge.id??"")}})),ae=n.output?this.extractPlacementCapPolicies(n.output).flatMap(L=>L.rules.length===0&&L.cooldownMs===void 0?[]:L.rules.length===0?[{count:0,period:"session",cooldownMs:L.cooldownMs}]:L.rules.map(J=>({count:J.count,period:J.period,...L.cooldownMs!==void 0?{cooldownMs:L.cooldownMs}:{}}))):[],Me={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:ae};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:s,entitlements:i,segments:l,entitlementRules:T,eligiblePayloads:D,placementRules:Me}}usageThresholdForEntitlement(e){return Qm(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return up(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 mp(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=Pr();return this.persistentStore.setItem(e,r),r}catch{return Pr()}}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(So())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(_S,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...s)=>{r(...s),n();});let i=e.replaceState.bind(e);e.replaceState=((...s)=>{i(...s),n();}),window.addEventListener("popstate",n),window.addEventListener(_S,s=>{let a=s.detail;this.onRouteChange({path:a.path,title:a.title,tags:a.tags});}),e.__rtPatched=true;}mergeUserContext(e){return lp(this.userContext,e)}mergePageContext(e){return {...this.pageContext,...e,tags:ql(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?Ku():{},...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(!we(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=PS(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($u,{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:we(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?Ku():{},...this.pageContext},i=r.url||(Fr()?window.location.href:""),s=(()=>{try{return new URL(i).pathname}catch{return Fr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:s,page_title:r.title||(Fr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:ql(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===Lh?{}:{...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&&Fr()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&Fr()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=Yc.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>=Yc.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,s)=>i+(s.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,s=i?`${this.tenantId}:${i}`:this.tenantId,a=(await bS(s)).slice(0,64),l={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Pr(),config_hash_id:a,sdk_version:Oy,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",S2),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(l),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(v=>{let P=Sb(v);return n+=P.redactions,P.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 s=Pr(),a=this.getConfiguredExportedConfig()?.playbook_version_id,o=r.map(v=>{let P=v.user_id||v.anonymous_id,S=Up(this.userContext.account_id||P),y=Bp({level:v.level,message:v.message,path:v.path,url:v.url,page_title:v.page_title,session_id:v.session_id,anonymous_id:v.anonymous_id,tags:v.tags,traits:v.identity.traits??null,payload:v.properties,source:T2});return n+=y.redactions+(S.redacted?1:0),{environment_id:this.environmentId,user_id:P,account_id:S.value,event_name:Dl(v.type).slice(0,120),event_ts:v.event_time,properties:JSON.stringify(y.value),...E2(v.properties),...F2(v.properties),origin:O2(v.type),playbook_version:typeof a=="string"&&a.length>0?a:null,event_id:kh.next(),request_id:Pr(),tenant_id:v.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let l=this.endpointFor("ingestEvents",x2),b={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":s},body:JSON.stringify({events:o}),keepalive:true};(await Eh(()=>fetch(l,b))).delivered?this.telemetryCounters.sent+=o.length:this.telemetryCounters.failed+=o.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=Dl(e),s=this.toEventEnvelope(i,n),a=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],o=[s];if(a.length>0&&o.push(this.buildValidationWarningEvent(i,a,n)),this.telemetryCounters.created+=o.length,r?.immediate){await this.sendEvents(o);return}this.events.push(...o),this.telemetryCounters.queued+=o.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:i,properties:s}=Vp(e,n);await this.capture(i,s,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!Fr()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let i=we(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||{}}},s=await this.fetchUserContext(i.id||""),a=new Set(r.segmentIds||[]),o=new Set(s.segmentIds||[]),l=Array.from(o).filter(p=>!a.has(p)),b=Array.from(a).filter(p=>!o.has(p));for(let p of l)await this.emitSemantic("segment_enrolled",{segment_id:p,user_id:i.id??null});for(let p of b)await this.emitSemantic("segment_unenrolled",{segment_id:p,user_id:i.id??null});if(n){let p=r.usage||{},v={...p,...this.usageBalances},P=this.evaluateUsageThresholdCrossings(p,v);await Promise.all(P);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(Lh,{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);}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(Ku());}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 s of e.decisions??[]){if(!s.output)continue;let a=[this.tenantId,s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),o=we(s.output?.content)?s.output.content:{};this.decisionCache.set(a,{value:{placementId:s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",requestId:e.request_id,visible:s.visible,decisionSource:"cache",reasonCodes:s.reason_codes??[],content:ca(String(o.header??""),String(o.body??""),String(o.cta_label??"")),output:s.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[s,a]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(s,{status:a.status,allowed:a.allowed,reason:a.reason,current_tier:a.current_tier,placement:a.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 np({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:bS,randomHex:Mh})}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:we(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=Pr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),i=L2(e.placementScopeKey||e.id||e.name),s={...we(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},a={name:e.name,slug:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:s},o={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},l=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:o,body:JSON.stringify(a)});if(l.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(l.status!==404)throw new Error(`surface_slot_upsert_failed:${l.status}`);let b=await fetch(r,{method:"POST",headers:o,body:JSON.stringify(a)});if(!b.ok)throw new Error(`surface_slot_create_failed:${b.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=Xa(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),s=[];r||s.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||s.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!we(e.metadata)&&s.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let a=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),o={id:a,route:n,name:i||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...we(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},l=this.placements.get(a),b=l?this.stableStringify(l):null,p=this.stableStringify(o);return (!l||b!==p)&&(this.placements.set(a,o),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(a)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(a)&&await this.upsertSurfaceSlot(o),s.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",s,{surface_slot_id:r||null,placement_id:a,route:n,placement_name:i||null})]),a}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;let n=(Array.isArray(e)?e:[]).map(s=>q2(s)).filter(s=>s!==null);if(n.length===0)return;let r=Pr(),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 xs(e)}decisionCacheKey(e,n){return ip({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 mb({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 pb(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return qd(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,i=this.placementCapKey(e),s=this.presentationCapsByKey.get(i),a=op(e,i,s,Date.now());return a.updatedState&&r&&(this.presentationCapsByKey.set(i,a.updatedState),a.allowed&&this.persistPresentationCaps()),{allowed:a.allowed,reason:a.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 ap(e,n,r,i)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=Pr();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:ca("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),s=this.suppressionForState(this.interactionState.get(i));if(s.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:ca(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let a,o=await this.localRuntime?.getContext?.(),l=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(o||l)&&(a=this.stableStringify({legacyCtx:o??{},providerCtx:l??{}}));let b=this.decisionCacheKey(e,a),p=this.readDecisionCache(b);if(p)return this.gateDecisionByCaps(p,{tick:false});{let P=this.getOrBuildPlacementResolver();if(P){let y={...o,...l?{__providers:l}:{}},T=this.gateDecisionByCaps(await P(e,n,y));return this.localDecisionsByPlacementId.set(e.placementId,T),this.writeDecisionCache(b,T,e.ttlMs),this.persistLocalRuntimeState(),T}let S=this.localDecisionsByPlacementId.get(e.placementId);if(S){let y=this.gateDecisionByCaps({...S,decisionSource:"fallback"});return this.writeDecisionCache(b,y,e.ttlMs),this.persistLocalRuntimeState(),y}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let v={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:ca(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),v}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),s=this.decisionCacheKey(r);this.writeDecisionCache(s,i,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let s=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),a=n.get(s);if(a){a.placementIds.push(r.placementId);continue}n.set(s,{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(s=>r.placementIds.includes(s.placementId)&&s.userId===r.userId);await Promise.allSettled(i.map(s=>this.getPlacementDecision(s)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=e.metadata??{},a={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let o=Number(i.remind_after_seconds);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(a.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let o=Number(i.suppress_duration_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.defaultDismissCooldownMs);}this.interactionState.set(n,a),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",P2),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Pr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",I2),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Pr()},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,s=n.metadata??{},a=Number(s.cooldown_ms),o=Number.isFinite(a)&&a>0?a:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,o);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,o);else if(n.interactionType==="suppress"){let p=Number(s.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,s,Number.isFinite(p)&&p>0?p:void 0);}let l=n.metadata??{},b=typeof l.decision_id=="string"?l.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,...b?{decision_id:b}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:l},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),i=Pr();if(this.isDisabledByProviderFailure()){let o=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:o.content}}if(this.isLocalOnlyMode()){let o=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:o?"remote":"fallback",content:ca(typeof o?.content?.title=="string"?String(o.content.title):`${r?.name??e} treatment`,typeof o?.content?.body=="string"?String(o.content.body):"Local runtime placement content.",typeof o?.content?.cta=="string"?String(o.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:i,decisionSource:"fallback",content:ca("Placement not found","Register the placement before requesting content.","Register placement")};let s=this.userContext.id??this.anonymousId,a=await this.getPlacementDecision({placementId:e,userId:s});return {placementId:e,requestId:i,decisionSource:a.decisionSource==="fallback"?"fallback":"remote",content:a.content??ca(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}normalizePlacementOutput(e){let n=Ld(e,Pr);return n&&we(e)&&typeof e.decision_id!="string"&&this.capture($u,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return Ym(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!vS.has(r))return this.capture($u,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;Pr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let o=await this.localRuntime.resolvers.getPlacement(e);return o&&this.applyPlacementCapsIfNeeded(o).allowed?o:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let s=this.localPlacementForConfig(e);return s&&this.applyPlacementCapsIfNeeded(s).allowed?s: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 s=this.localRuntime?.resolvers?.checkEntitlement;if(s){let a=await s(e,n);return this.localEntitlementsByHandle.set(e,a),this.persistLocalRuntimeState(),a}}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()?"local_runtime_default_allow":"config_unavailable"})}updateUsage(e){let n=this.userContext;this.usageBalances={...this.usageBalances,...e},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true);}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=Pr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let s=await r(e);return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}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(),s={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(a=>typeof a=="string"):[],traits:we(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:we(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,a])=>typeof a=="number")):void 0};return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new lc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e);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){r.status===401&&(this.clientContextToken=void 0);return}let i=await r.json(),s=this.mapClientSafeContext(i);if(Object.keys(s).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:s.trial?{in_trial:s.trial.in_trial,state:s.trial.state,days_remaining:s.trial.days_remaining}:void 0,payment_at_risk:s.payment_at_risk});let a=JSON.parse(JSON.stringify({trial:s.trial??null,plan:s.plan??null})),o=await cp(a)+`:${s.payment_at_risk===!0?1:0}`;if(o===this.lastServerContextHash)return;this.lastServerContextHash=o,this.applyServerContextPatch(s);}catch{}}mapClientSafeContext(e){let n={},i=["active","running_out","expired","converted","none"].find(a=>a===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 s=e.plan?.handle;return typeof s=="string"&&s.length>0&&(n.plan={id:s,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:s}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),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,s){await this.impressionHistory.recordDismissal(e,n,r,i,s);}async recordClickThru(e,n,r,i,s){await this.impressionHistory.recordClickThru(e,n,r,i,s);}async recordConversion(e,n,r,i){await this.impressionHistory.recordConversion(e,n,r,i);}async getTrialStatus(){let e=Pr();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:s}=Ed({...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}:{}}),a=s??{in_trial:false};return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:we(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],i=e.includeProviderHandlers??true,s=Wu(e.resolvers,"validateUiPathResolvers(options.resolvers)"),a={...this.uiPathResolvers,...s};if(i&&this.providerRegistry.has("cta"))try{let p=await this.providerRegistry.resolveAll();we(p.cta)&&we(p.cta.handlers)&&Object.assign(a,p.cta.handlers);}catch{}let o=[],l=0;for(let p of r){let v=we(p)?p:{},P=typeof v.action_type=="string"?v.action_type.trim():"";if(!P){o.push({actionType:"unknown",reason:"missing_action_type",...typeof v.id=="string"?{uiPathId:v.id}:{},...typeof v.name=="string"?{name:v.name}:{}});continue}if(typeof a[P]=="function"){l+=1;continue}o.push({actionType:P,reason:"missing_resolver",...typeof v.id=="string"?{uiPathId:v.id}:{},...typeof v.name=="string"?{name:v.name}:{}});}let b={valid:o.length===0,totalUiPaths:r.length,resolvedUiPaths:l,issues:o};if(!b.valid&&e.throwOnMissing){let p=b.issues.filter(P=>P.reason==="missing_resolver").map(P=>P.actionType),v=p.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(p)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${b.issues.length} issue(s).${v}`)}return b}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=we(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],i=0;for(let o of n){let b=(we(o)?o:{}).action_type,p=typeof b=="string"?b.trim():"";if(!p){i+=1;continue}typeof this.uiPathResolvers[p]!="function"&&r.push(p);}if(i===0&&r.length===0)return;let s=Array.from(new Set(r)),a=[];s.length>0&&a.push(`missing resolvers for action_type: ${s.join(", ")}`),i>0&&a.push(`content_ui_paths with missing action_type: ${i}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${a.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}h2.test(e)&&Oh(`[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=n!=null&&typeof n=="object"&&!Array.isArray(n)&&("account_id"in n||"email"in n||"plan"in n||"plan_handle"in n||"usage"in n||"entitlements"in n||"custom"in n);if(n!=null&&typeof n=="object"&&!Array.isArray(n)){let s=Object.keys(n).filter(a=>!f2.has(a));s.length>0&&Oh(i?`[RevTurbine] identify() ignoring unrecognized user-context key(s): ${s.join(", ")}. Recognized keys: ${Fh.join(", ")}.`:`[RevTurbine] identify() found no recognized user-context key \u2014 treating the object as legacy traits (stored under custom). Keys seen: ${s.join(", ")}; recognized keys: ${Fh.join(", ")}. For plan-scoped rules use { plan: { id, name } } or { plan_handle }.`);}if(i){let s=n;s.usage&&(this.usageBalances={...this.usageBalances,...Ss(s.usage)});let a=!s.plan&&typeof s.plan_handle=="string"&&s.plan_handle.trim()!==""?{id:s.plan_handle,name:s.plan_handle}:void 0;this.userContext=this.mergeUserContext({id:e,account_id:s.account_id,email:s.email,plan:s.plan??a,usage:s.usage,entitlements:s.entitlements,custom:a?{plan_handle:a.id,...s.custom??{}}:s.custom,personalization:s.personalization});}else this.userContext=this.mergeUserContext({id:e,custom:n,usage:{}});this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.emitObservedContextFields(i?n.custom:n);}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?yS():{},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();}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])=>gS.has(a)),s=Object.keys(r).filter(a=>!gS.has(a));s.length>0&&Oh(`[RevTurbine] update() ignored unrecognized key(s): ${s.join(", ")}. Patchable fields: ${xS.join(", ")}. 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:`${Fr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};w(Yc,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var Dh=Yc;function Jc(t){let e=V2(t),n=new Dh(e);if(!e.provider)return n;let r=(p,v)=>{try{return typeof p=="function"?p(e):p}catch(P){return console.warn(`[RevTurbine] Provider factory failed at chain index ${v}.`,P),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((p,v)=>r(p,v+1))].filter(p=>p!==null);if(i.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let s=async(p,v,P)=>{let S=[];for(let y=0;y<i.length;y+=1){let E=i[y][p];if(E){S.push(y);try{return await E(...v)}catch(A){let k=i.slice(y+1).some(O=>typeof O[p]=="function");console.warn(y===0&&k?`[RevTurbine] Primary provider ${p} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${p} failed at chain index ${y}.`,A);}}}return S.length===0||n.disableForProviderFailure(`provider_${p}_chain_failed`),P()},a=n.getPlacement.bind(n),o=n.checkEntitlement.bind(n),l=n.persistPlacementTypes.bind(n),b=n.identify.bind(n);return n.getPlacement=async p=>s("getPlacement",[p],()=>a(p)),n.checkEntitlement=async(p,v)=>s("checkEntitlement",[p,v],()=>o(p,v)),n.persistPlacementTypes=async p=>s("persistPlacementTypes",[p],()=>l(p)),n.identify=(p,v)=>{let P=0;for(let S=0;S<i.length;S+=1){let y=i[S];if(y.identify){P+=1;try{y.identify(p,v);return}catch(T){let E=i.slice(S+1).some(A=>typeof A.identify=="function");console.warn(S===0&&E?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${S}.`,T);}}}if(P>0){n.disableForProviderFailure("provider_identify_chain_failed"),b(p,v);return}b(p,v);},n}var Gu={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function jh(t){return typeof t=="string"&&t.trim().length>0}function V2(t){return hl(t.localRuntime)!==void 0?{...t,tenantId:jh(t.tenantId)?t.tenantId:Gu.tenantId,apiKey:jh(t.apiKey)?t.apiKey:Gu.apiKey,endpoint:jh(t.endpoint)?t.endpoint:Gu.endpoint,mode:t.mode??Gu.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function q2(t){if(!we(t))return null;let e=(l,b)=>String(l??"").trim().slice(0,b),n=e(t.id,256),r=e(t.label,256),i=e(t.description,1024),s=e(t.surfaceType,64);if(!n||!r||!i||!vS.has(s))return null;let a=Number(t.priority),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0;return {id:n,label:r,description:i,surfaceType:s,priority:o}}typeof window<"u"&&(window.RevTurbine={init:Jc});var Nr=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 Bs(t){return t?{id:t.id??Nr.id,name:t.name??Nr.name,version:t.version??Nr.version,colors:{...Nr.colors,...t.colors},typography:{...Nr.typography,...t.typography},shape:{...Nr.shape,...t.shape},shadows:{...Nr.shadows,...t.shadows}}:{...Nr}}var D2="revturbine:theme";function Nh(t){return `${D2}:${t}`}function M2(t,e){try{let n=e.getItem(Nh(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function N2(t,e,n){try{n.setItem(Nh(t),JSON.stringify(e));}catch{}}function IS(t,e){let n=e??$s();try{n.removeItem(Nh(t));}catch{}}async function gl(t,e){let{tenantId:n,endpoint:r,apiKey:i,base:s}=t,a=t.storage??$s(),o=M2(n,a),l=Bs({...s,...o});return t.onOverride?.(o),z2(r,n,i).then(b=>{b&&(o?.version&&b.version===o.version||(N2(n,b,a),t.onOverride?.(b),e?.(Bs({...s,...b}))));}).catch(()=>{}),l}async function z2(t,e,n){let r=t.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,s=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":i}});if(!s.ok)return null;let a=await s.json();return typeof a!="object"||a===null?null:a}var _l=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;r&&(this._impressionTracked=true,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,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 s=this.exposureMode;return s==="legacy_resolution"?this.fireImpression("legacy_resolution"):s==="viewport"&&!Na.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;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,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 Xc(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var bl=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:Xc(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return Xc(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 s=await this.sdk.checkEntitlement(e,n);if(this._result=s,this.emitGateEvaluated(e,s),!r||!Xc(s))this._gatedPlacement=null;else if(s.placement)this._gatedPlacement=s.placement;else {let a=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=a;}return s}catch(s){return this._error=s instanceof Error?s.message:String(s),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:Xc(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);}}notify(){for(let e of this.listeners)e();}},Yu=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 _l(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 bl(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 H2(t){let{bootstrapPlacements:e,...n}=t,r=n,i=Jc(r),s=r.user;s&&typeof s=="object"&&s.id&&i.identify(s.id,s);let a=Nr,l=hl(r.localRuntime)?.theme;if(l&&typeof l=="object"?a=Bs(l):a=await gl({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let b=i.getUserContext().user_id,p=[];for(let v of e){let P=await i.registerPlacement(v.placement),S=v.userId||b;S&&p.push({placementId:P,userId:S,contextMode:v.contextMode,overrides:v.overrides,traits:v.traits,ttlMs:v.ttlMs});}p.length>0&&await i.bootstrapPlacementDecisions(p);}return new Yu(i,a)}var K2=/\{[^{}]+\}/g,G2=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function $2(){return Math.random().toString(36).slice(2,11)}function kS(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:s,pathSerializer:a,headers:o,requestInitExt:l=void 0,...b}={...t};l=G2()?l:void 0,e=RS(e);let p=[];async function v(P,S){let{baseUrl:y,fetch:T=r,Request:E=n,headers:A,params:k={},parseAs:O="json",querySerializer:R,bodySerializer:C=s??Z2,pathSerializer:D,body:ae,middleware:Me=[],...L}=S||{},J=e;y&&(J=RS(y)??e);let ge=typeof i=="function"?i:TS(i);R&&(ge=typeof R=="function"?R:TS({...typeof i=="object"?i:{},...R}));let Ae=D||a||W2,Oe=ae===void 0?void 0:C(ae,CS(o,A,k.header)),lt=CS(Oe===void 0||Oe instanceof FormData?{}:{"Content-Type":"application/json"},o,A,k.header),Je=[...p,...Me],Xe={redirect:"follow",...b,...L,body:Oe,headers:lt},zt,At,dn=new E(Y2(P,{baseUrl:J,params:k,querySerializer:ge,pathSerializer:Ae}),Xe),Jt;for(let X in L)X in dn||(dn[X]=L[X]);if(Je.length){zt=$2(),At=Object.freeze({baseUrl:J,fetch:T,parseAs:O,querySerializer:ge,bodySerializer:C,pathSerializer:Ae});for(let X of Je)if(X&&typeof X=="object"&&typeof X.onRequest=="function"){let je=await X.onRequest({request:dn,schemaPath:P,params:k,options:At,id:zt});if(je)if(je instanceof E)dn=je;else if(je instanceof Response){Jt=je;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!Jt){try{Jt=await T(dn,l);}catch(X){let je=X;if(Je.length)for(let Zn=Je.length-1;Zn>=0;Zn--){let Gr=Je[Zn];if(Gr&&typeof Gr=="object"&&typeof Gr.onError=="function"){let jt=await Gr.onError({request:dn,error:je,schemaPath:P,params:k,options:At,id:zt});if(jt){if(jt instanceof Response){je=void 0,Jt=jt;break}if(jt instanceof Error){je=jt;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(je)throw je}if(Je.length)for(let X=Je.length-1;X>=0;X--){let je=Je[X];if(je&&typeof je=="object"&&typeof je.onResponse=="function"){let Zn=await je.onResponse({request:dn,response:Jt,schemaPath:P,params:k,options:At,id:zt});if(Zn){if(!(Zn instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");Jt=Zn;}}}}let Ot=Jt.headers.get("Content-Length");if(Jt.status===204||dn.method==="HEAD"||Ot==="0"&&!Jt.headers.get("Transfer-Encoding")?.includes("chunked"))return Jt.ok?{data:void 0,response:Jt}:{error:void 0,response:Jt};if(Jt.ok)return {data:await(async()=>{if(O==="stream")return Jt.body;if(O==="json"&&!Ot){let je=await Jt.text();return je?JSON.parse(je):void 0}return await Jt[O]()})(),response:Jt};let Y=await Jt.text();try{Y=JSON.parse(Y);}catch{}return {error:Y,response:Jt}}return {request(P,S,y){return v(S,{...y,method:P.toUpperCase()})},GET(P,S){return v(P,{...S,method:"GET"})},PUT(P,S){return v(P,{...S,method:"PUT"})},POST(P,S){return v(P,{...S,method:"POST"})},DELETE(P,S){return v(P,{...S,method:"DELETE"})},OPTIONS(P,S){return v(P,{...S,method:"OPTIONS"})},HEAD(P,S){return v(P,{...S,method:"HEAD"})},PATCH(P,S){return v(P,{...S,method:"PATCH"})},TRACE(P,S){return v(P,{...S,method:"TRACE"})},use(...P){for(let S of P)if(S){if(typeof S!="object"||!("onRequest"in S||"onResponse"in S||"onError"in S))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");p.push(S);}},eject(...P){for(let S of P){let y=p.indexOf(S);y!==-1&&p.splice(y,1);}}}}function Ju(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 ES(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 o in e)r.push(o,n.allowReserved===true?e[o]:encodeURIComponent(e[o]));let a=r.join(",");switch(n.style){case "form":return `${t}=${a}`;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return a}}for(let a in e){let o=n.style==="deepObject"?`${t}[${a}]`:a;r.push(Ju(o,e[a],n));}let s=r.join(i);return n.style==="label"||n.style==="matrix"?`${i}${s}`:s}function wS(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let s={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",a=(n.allowReserved===true?e:e.map(o=>encodeURIComponent(o))).join(s);switch(n.style){case "simple":return a;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return `${t}=${a}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",i=[];for(let s of e)n.style==="simple"||n.style==="label"?i.push(n.allowReserved===true?s:encodeURIComponent(s)):i.push(Ju(t,s,n));return n.style==="label"||n.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function TS(t){return function(n){let r=[];if(n&&typeof n=="object")for(let i in n){let s=n[i];if(s!=null){if(Array.isArray(s)){if(s.length===0)continue;r.push(wS(i,s,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof s=="object"){r.push(ES(i,s,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Ju(i,s,t));}}return r.join("&")}}function W2(t,e){let n=t;for(let r of t.match(K2)??[]){let i=r.substring(1,r.length-1),s=false,a="simple";if(i.endsWith("*")&&(s=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(a="label",i=i.substring(1)):i.startsWith(";")&&(a="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let o=e[i];if(Array.isArray(o)){n=n.replace(r,wS(i,o,{style:a,explode:s}));continue}if(typeof o=="object"){n=n.replace(r,ES(i,o,{style:a,explode:s}));continue}if(a==="matrix"){n=n.replace(r,`;${Ju(i,o)}`);continue}n=n.replace(r,a==="label"?`.${encodeURIComponent(o)}`:encodeURIComponent(o));}return n}function Z2(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 Y2(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 CS(...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,s]of r)if(s===null)e.delete(i);else if(Array.isArray(s))for(let a of s)e.append(i,a);else s!==void 0&&e.set(i,s);}return e}function RS(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function J2(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),kS({baseUrl:t.baseUrl,headers:e})}var zh=class extends Error{constructor(n,r){super(r);w(this,"status",n);this.name="ApiError";}};var Hh=class extends _b{constructor(n){let{exportedConfig:r,environmentId:i,...s}=n,a=vs(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:i??"default"});if(!a)throw new Error("BrowserRuntime requires exportedConfig");let o=$s(n.storage),l=new Xd({storage:o,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...s,exportedConfig:a,storage:o,impressionStore:l});w(this,"_hydratePromise");let b=n.autoHydrate??true;this._hydratePromise=b?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function X2(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 AS(t){return X2(t)/4294967296}function Q2(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 OS(t,e,n){if(!t)return;let r=Q2(n.variants);if(r.length===0)return;let{exposure:i}=n;if(i!==void 0&&(!(i>0)||i<1&&AS(`${t}:${e}:exposure`)>=i))return;let s=r.reduce((o,[,l])=>o+l,0),a=AS(`${t}:${e}:variant`)*s;for(let[o,l]of r)if(a-=l,a<0)return o;return r[r.length-1][0]}function ej(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[s,a]of Object.entries(e)){let o=OS(r,s,a);o!==void 0&&(i[s]=o);}return {assignments:i}}}}var tj=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function nj(t){let e={};for(let[n,r]of Object.entries(t.properties))e[tj.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 Kh=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=nj(n);if(this.transform){let s=this.transform(r,i);if(s===null)continue;r=s.eventName,i=s.properties;}try{this.handler(r,i);}catch{}}}};function jS(t){let e=new Kh(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function FS(t){let{posthog:e,filter:n,transform:r,name:i}=t;return jS({name:i??"posthog",filter:n,transform:r,handler:(s,a)=>{e.capture(s,a);}})}function rj(t){let{posthog:e,filter:n,transform:r,name:i,syncIdentity:s=false,syncAccountGroup:a=false,mirrorNavigation:o=false}=t,l=i??"posthog",b=FS({posthog:e,filter:n,transform:r,name:l}),p=null,v=null,P=S=>{try{if(s){let y=S.user_id;y&&y!==p?(e.identify?.(y,S.identity.traits),p=y):!y&&p!==null&&(e.reset?.(),p=null);}if(a){let y=S.identity.traits.account_id;typeof y=="string"&&y&&y!==v&&(e.group?.("account",y),v=y);}o&&S.type==="page_view"&&e.capture("$pageview",{$current_url:S.url});}catch{}};return {domain:"events",async resolve(){let y=(await b.resolve())?.consumers??[];return {consumers:[{name:l,consume(E){for(let A of E)P(A);for(let A of y)A.consume(E);}}]}}}}var LS=["banner_placement"],BS=["banner_placement","in_page_card"],US=["toast_message"],VS=["modal_overlay"];var Qc=["banner_placement","in_page_card","usage_counter","button"],ed=["modal_overlay","inline_gate_message"],td=["toast_message","modal_overlay","banner_placement"];function yl(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Xu=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";}},Qu=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 evaluate(e){let n=yl(),r=e.anonymousId??yl(),[i,s,a,o,l]=await Promise.all([this.evaluatePlacements(n,e),this.evaluateEntitlements(n,e),e.includeTrialStatus?this.fetchTrialStatus(n,e.userId):Promise.resolve(void 0),e.includeUserContext?this.fetchUserContext(n,e.userId):Promise.resolve(void 0),e.includeTheme?this.fetchTheme(n):Promise.resolve(void 0)]),b={version:"1.0.0",request_id:n,tenant_id:this.tenantId,evaluated_at:new Date().toISOString(),ttl_seconds:this.defaultTtlSeconds,user:{id:e.userId,anonymous_id:r,traits:e.traits},decisions:i};return s&&Object.keys(s).length>0&&(b.entitlements=s),a&&(b.trial_status=a),o&&(b.user_context=o),l&&(b.theme=l),b}async getPlacement(e,n,r){let i=yl(),s={request_id:i,user_id:e,traits:r??{},slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle};try{let a=await this.apiCall(i,"/api/decision-api/v1/decide-context",s);if(!a.ok)return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:!1,reason_codes:["api_error"]};let o=await a.json(),l=o.decision,b=l?.visible??!1,p={slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:b};return b&&l&&(p.output=l),o.reason_codes&&(p.reason_codes=o.reason_codes),p}catch{return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:false,reason_codes:["network_error"]}}}async checkEntitlement(e,n,r){let i=yl(),s={request_id:i,user_id:e,entitlement_handle:n,...r??{}};try{let a=await this.apiCall(i,"/api/decision-api/v1/check-entitlement",s);if(!a.ok)return {status:"denied",allowed:!1,reason:"api_error"};let o=await a.json();return {status:o.status??"denied",allowed:o.allowed??!1,reason:o.reason,current_tier:o.current_tier}}catch{return {status:"denied",allowed:false,reason:"network_error"}}}can(e,n,r){return this.checkEntitlement(e,n,r)}async getTrialStatus(e){let n=yl();return this.fetchTrialStatus(n,e)}async createClientSession(e){let n=yl(),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 Xu(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}})}async evaluatePlacements(e,n){let r=n.placements??[];return r.length===0?[]:r.length>1?this.evaluatePlacementsBatch(e,n,r):[await this.getPlacement(n.userId,r[0],n.traits)]}async evaluatePlacementsBatch(e,n,r){let i={request_id:e,user_id:n.userId,traits:n.traits??{},usage_balances:n.usageBalances??{},page:n.page??{},placements:r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle}))};try{let s=await this.apiCall(e,"/api/decision-api/v1/bootstrap-context",i);return s.ok?(await s.json()).decisions.map((o,l)=>{let b=r[l]??{},p=o.result.decision?.visible??!1,v={slot_id:b.slotId,entitlement_handle:b.entitlementHandle,plan_handle:b.planHandle,placement_handle:b.placementHandle,visible:p};return p&&o.result.decision&&(v.output=o.result.decision),o.result.reason_codes&&(v.reason_codes=o.result.reason_codes),v}):r.map(o=>({slot_id:o.slotId,entitlement_handle:o.entitlementHandle,plan_handle:o.planHandle,placement_handle:o.placementHandle,visible:!1,reason_codes:["api_error"]}))}catch{return r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle,visible:false,reason_codes:["network_error"]}))}}async evaluateEntitlements(e,n){let r=n.entitlementHandles??[];if(r.length===0)return;let i={},s=await Promise.allSettled(r.map(async a=>{let o=await this.checkEntitlement(n.userId,a);return {handle:a,result:o}}));for(let a of s)a.status==="fulfilled"&&(i[a.value.handle]=a.value.result);return i}async fetchTrialStatus(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/trial-status",{request_id:e,user_id:n});if(!r.ok)return {in_trial:!1};let i=await r.json();return {in_trial:i.in_trial??!1,...i.trial_type!==void 0?{trial_type:i.trial_type}:{},...i.plan_handle!==void 0?{plan_handle:i.plan_handle}:{},...i.trial_limit_type!==void 0?{trial_limit_type:i.trial_limit_type}:{},...i.progress_percent!==void 0?{progress_percent:i.progress_percent}:{},...i.day_number!==void 0?{day_number:i.day_number}:{},...i.days_remaining!==void 0?{days_remaining:i.days_remaining}:{},...i.usage_entitlement_handle!==void 0?{usage_entitlement_handle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{usage_consumed:i.usage_consumed}:{},...i.usage_remaining!==void 0?{usage_remaining:i.usage_remaining}:{},...i.usage_limit!==void 0?{usage_limit:i.usage_limit}:{}}}catch{return {in_trial:false}}}async fetchUserContext(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/user-context",{request_id:e,user_id:n});if(!r.ok)return;let i=await r.json();return {segments:i.segments,traits:i.traits,usage_balances:i.usage_balances}}catch{return}}async fetchTheme(e){try{let n=await this.apiGet(e,"/api/sdk/theme");if(!n.ok)return;let r=await n.json();return typeof r!="object"||r===null?void 0:r}catch{return}}};var sj=/^[a-z0-9._]{1,100}$/,da={Persisted:"persisted",Transient:"transient"},hs={Internal:"internal",External:"external"},zi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},aj="readOnly";function pi(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[aj]===true||(e[n]=r);}return z.object(e)}function zr(t){let e=pi(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(sj)}):e}var {Unrestricted:ri}=zi,{Transient:ii,Persisted:lj}=da,{Internal:za,External:Us}=hs;z.object({page:z.coerce.number().int().min(1).default(1).meta(ri),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ri)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var Kn=z.object({created_at:z.string().datetime().meta({...ri,readOnly:true}),updated_at:z.string().datetime().meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),Ln=z.object({id:z.string().min(1).meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),Gn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var $h=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),DS=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});var em=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us}),MS=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":Us});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});var Vs=z.string().min(1).max(200),pr=z.string().min(1).max(100),tm=z.string().max(500).optional(),_i=z.record(z.string(),z.unknown()).default({}),Ha=z.number().int().min(10).max(100).multipleOf(10),nm=z.string().datetime().nullable().default(null),or=z.object({environment_id:z.string().min(1).default("production").meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za}),fr=z.object({playbook_version_id:z.string().nullable().default(null).meta(ri),is_current:z.boolean().default(true).meta({...ri,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ri,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ri,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ri,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ri,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za}),cj=Ln.merge(Kn).merge(Gn).merge(or).extend({handle:pr.meta({...ri,readOnly:true}),active:z.boolean().default(true).meta({...ri,readOnly:true})});function Hr(t){return cj.meta({id:t,"x-revturbine-schema-persistence":lj,"x-revturbine-schema-exposure":za})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":za});var NS=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":ii,"x-revturbine-schema-exposure":Us});new Set($h.options);var zS=z.enum(["session","day","week","month"]),HS=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(HS),cap:z.object({count:z.number().int().min(1),period:zS})});var Rj="__self__",kj={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},WS={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_id:{}}},placement_slots:{sortKey:"id",indexBy:["id","placement_handle"],fields:{id:{},label:{},description:{},surface_type:{},placement_handle:{},template:{}}},slot_configs:{sortKey:"slot_id",fields:{slot_id:{reference:{table:"placement_slots",by:"id",kind:"one",onDelete:"cascade"}},active:{},triggers:{}}},surface_templates:{sortKey:"id",indexBy:["id"],fields:{id:{},surface_type:{},fields:{}}},placements:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},category:{},trigger:{discriminator:{keyed_on:{table:Rj,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:kj},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:{}}}};z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var JS={Named:"named",Minted:"minted"},XS="x-revturbine-schema-identity";function _s(t="handle"){return {[XS]:{kind:JS.Named,handleField:t}}}function bs(t="handle"){return {[XS]:{kind:JS.Minted,handleField:t}}}var In={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Hi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},Aj="x-revturbine-context",Oj="x-revturbine-in-config",jj="x-revturbine-sdk-input",Fj="x-revturbine-source",Lj="x-revturbine-deprecation",Bj={[In.Playbook]:Hi.Customer,[In.Branding]:Hi.Customer,[In.Billing]:Hi.Stripe,[In.Metering]:Hi.Customer,[In.CustomerOperations]:Hi.Runtime,[In.EventIngestion]:Hi.Runtime};function nr(t,e){return {[Aj]:t,[Oj]:e.inConfig??t===In.Playbook,[jj]:e.sdkInput,[Fj]:e.source??Bj[t]}}function Wh(t){return {deprecated:true,[Lj]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var pn=t=>z.object({items:z.array(t)}),ir=z.object({error:z.string(),code:z.string(),request_id:z.string()}),U=t=>t,fn=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:ke}=zi,{Persisted:ng,Transient:fi}=da,{Internal:QS,External:si}=hs,eP=nr(In.Playbook,{sdkInput:true}),Uj=nr(In.Playbook,{inConfig:false,sdkInput:false}),tP=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":fi,"x-revturbine-schema-exposure":si}),sm=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Vj=z.enum(DS).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),qj=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),nP=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Zh=z.object({entitlement_id:z.string().min(1).meta(ke),entitlement_handle:z.string().min(1).meta(ke),status:Vj.meta(ke),limit:z.number().optional().meta(ke),used:z.number().optional().meta(ke),allocation:sm.optional().meta(ke),enforcement:nP.optional().meta(ke),source:qj.optional().meta(ke),plan_id:z.string().optional().meta(ke),segment_id:z.string().optional().meta(ke),seat_type_id:z.string().optional().meta(ke),rule_id:z.string().optional().meta(ke)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si,...zi.Operational});z.object({account:z.record(z.string(),Zh).optional().meta(ke),instance:z.record(z.string(),Zh).optional().meta(ke),user:z.record(z.string(),Zh).optional().meta(ke)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si,...zi.Operational});var Dj=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Mj=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),rP=z.object({kind:Mj.meta(ke),id:z.string().min(1).meta(ke)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Nj=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Cl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),name:Vs.meta(ke),handle:pr.meta(ke),customer_facing_description:z.string().max(500).optional().meta(ke),type:em.meta(ke),unit:z.string().max(100).optional().meta(ke),period_scope:tP.optional().meta(ke),allocation:sm.optional().meta(ke),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ke),sort_order:z.number().int().default(0).meta(ke),metadata:_i.meta(ke)}).meta({id:"Entitlement","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":si,...eP,..._s()}),zj=Hr("EntitlementAnchor"),jl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),handle:pr.meta({...ke,readOnly:true}),entitlement_id:z.string().min(1).meta(ke),targets:z.array(rP).min(1).meta(ke),segment_ids:z.array(z.string()).default([]).meta(ke),visibility:Dj.default("public").meta(ke),period_scope:tP.optional().meta(ke),instance:z.string().max(100).optional().meta(ke),reset_period:Nj.optional().meta(ke),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ke),enforcement:nP.optional().meta(ke),warning_threshold_percent:Ha.optional().meta(ke),overage_price_ref:z.string().optional().meta(ke),grace_period_hours:z.number().int().min(0).optional().meta(ke),tier_value:z.string().optional().meta(ke),rate_value:z.number().optional().meta(ke),initial_grant:z.number().optional().meta(ke),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ke),rollover_enabled:z.boolean().optional().meta(ke),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ke),seat_type_id:z.string().optional().meta(ke),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ke),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ke),stripe_metered_price_id:z.string().optional().meta(ke),enabled:z.boolean().optional().meta(ke),allocation:sm.optional().meta(ke),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ke),amount_cents:z.number().int().optional().meta(ke),currency:z.string().optional().meta(ke)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":QS,...eP,...bs()}),Hj=Hr("EntitlementRuleAnchor");jl.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.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 Kj=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Gj=z.object({code:Kj.meta(ke),message:z.string().min(1).meta(ke),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ke)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Yh=jl.extend({warnings:z.array(Gj).optional().meta(ke)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":fi,"x-revturbine-schema-exposure":si}),Jh=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({...ke,readOnly:true}),rule_id:z.string().min(1).meta(ke),experiment_id:z.string().min(1).meta(ke),variant_name:z.string().min(1).max(200).meta(ke),is_control:z.boolean().default(false).meta(ke),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ke)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":QS,...Uj,...bs()}),$j=pi(Cl),Wj=pi(jl);({"/api/entitlement-anchors":{get:U({operationId:"listEntitlementAnchors",requestParams:{query:fn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:pn(zj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:U({operationId:"listEntitlementRuleAnchors",requestParams:{query:fn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:pn(Hj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:U({operationId:"listEntitlements",requestParams:{query:fn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:pn(Cl)}}}},"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:zr(Cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cl}}}},"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:Cl}}}},"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:$j}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cl}}}},"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:ir}}}},"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:fn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:pn(jl)}}}},"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:zr(jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yh}}}},"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:Wj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yh}}}},"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:Yh}}}},"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:fn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:pn(Jh)}}}},"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:zr(Jh)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ot}=zi,{Persisted:ad,Transient:od}=da,{Internal:ys}=hs,iP=nr(In.Playbook,{sdkInput:true}),sP=nr(In.Playbook,{inConfig:false,sdkInput:true}),Zj=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),rg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),aP=z.object({name:Vs.meta(ot),handle:pr.meta(ot),plan_id:z.string().nullable().optional().meta(ot),segment_id:z.string().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ot),grace_period_days:z.number().int().min(0).default(0).meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),require_payment_method:z.boolean().default(false).meta(ot),auto_convert:z.boolean().default(true).meta(ot),convert_to_plan_id:z.string().optional().meta(ot),fallback_plan_id:z.string().optional().meta(ot),limit_per_customer:z.number().int().min(1).default(1).meta(ot),is_active:z.boolean().default(true).meta(ot),metadata:_i.meta(ot)}),xl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ot,readOnly:true})}).merge(aP).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...iP,..._s()}),Yj=Hr("FreeTrialRuleAnchor"),Jj=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),oP=z.object({name:Vs.meta(ot),handle:pr.meta(ot),premium_plan_id:z.string().min(1).meta(ot),fallback_plan_id:z.string().min(1).meta(ot),segment_id:z.string().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),start_policy:Jj.default("signup").meta(ot),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(ot),entitlements_during_trial:z.array(z.string()).default([]).meta(ot),is_active:z.boolean().default(true).meta(ot),metadata:_i.meta(ot)}),Sl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...ot,readOnly:true})}).merge(oP).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...iP,..._s()}),Xj=Hr("ReverseTrialRuleAnchor"),lP=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),cP=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":od,"x-revturbine-schema-exposure":ys}),Pl=Ln.merge(Kn).merge(Gn).extend({trial_limit_policy:lP.default("1_per_lifetime").meta(ot),eligibility_scope:cP.default("per_customer").meta(ot)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...sP}),Il=Ln.merge(Kn).merge(Gn).extend({trial_limit_policy:lP.default("1_per_lifetime").meta(ot),eligibility_scope:cP.default("per_customer").meta(ot)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys,...sP}),rm=Ln.merge(Kn).merge(Gn).extend({customer_id:z.string().min(1).meta(ot),rule_id:z.string().min(1).meta(ot),rule_type:z.enum(["free_trial","reverse_trial"]).meta(ot),plan_id:z.string().min(1).meta(ot),status:Zj.default("active").meta(ot),started_at:z.string().datetime().meta({...ot,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(ot),trial_limit_type:rg.default("time").meta(ot),usage_entitlement_handle:z.string().min(1).optional().meta(ot),usage_limit_value:z.number().int().min(1).optional().meta(ot),converted_at:nm.meta(ot),cancelled_at:nm.meta(ot),metadata:_i.meta(ot)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":ys});({"/api/free-trial-rule-anchors":{get:U({operationId:"listFreeTrialRuleAnchors",requestParams:{query:fn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:pn(Yj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:U({operationId:"listFreeTrialRules",requestParams:{query:fn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:pn(xl)}}}},"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:xl}}}},"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:xl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xl}}}},"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:fn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:pn(Xj)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:U({operationId:"listReverseTrialRules",requestParams:{query:fn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:pn(Sl)}}}},"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:Sl}}}},"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:Sl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Sl}}}},"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:fn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:pn(Pl)}}}},"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:Pl}}}},"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:Pl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:U({operationId:"listReverseTrialSettings",requestParams:{query:fn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:pn(Il)}}}},"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:Il}}}},"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:Il.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:U({operationId:"listTrialInstances",requestParams:{query:fn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:pn(rm)}}}},"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:rm}}}},"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:rm}}}},"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:rm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:on,Financial:im}=zi,{Persisted:ld,Transient:am}=da,{External:qs}=hs,Qj=nr(In.Playbook,{sdkInput:true}),eF=nr(In.Playbook,{sdkInput:false}),ig=nr(In.Billing,{sdkInput:false}),ma=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),cd=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),om=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),Rl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),name:Vs.meta(on),handle:pr.meta(on),tier_position:z.number().int().min(0).default(0).meta(on),sort_order:z.number().int().default(0).meta(on),visibility:ma.default("public").meta(on),metadata:_i.meta(on)}).meta({id:"Plan","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...Qj,..._s()}),tF=Hr("PlanAnchor"),kl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),handle:pr.meta({...on,readOnly:true}),plan_id:z.string().min(1).meta(on),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(on),segment_id:z.string().nullable().default(null).meta(on),price_amount:z.number().min(0).meta(im),pricing_model:cd.meta(on),visibility:ma.default("public").meta(on),stripe_price_id:z.string().optional().meta(on),price_source:om.default("static").meta(on)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig,...bs()}),nF=Hr("PlanVariationAnchor"),El=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),name:Vs.meta(on),handle:pr.meta(on),sort_order:z.number().int().default(0).meta(on),visibility:ma.default("public").meta(on),metadata:_i.meta(on)}).meta({id:"AddOn","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...eF,..._s()}),rF=Hr("AddOnAnchor"),wl=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...on,readOnly:true}),handle:pr.meta({...on,readOnly:true}),addon_id:z.string().min(1).meta(on),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(on),segment_id:z.string().nullable().default(null).meta(on),price_amount:z.number().min(0).meta(im),pricing_model:cd.meta(on),visibility:ma.default("public").meta(on),stripe_price_id:z.string().optional().meta(on),price_source:om.default("static").meta(on)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig,...bs()}),iF=Hr("AddOnVariationAnchor"),sF=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":qs}),Al=Ln.merge(Kn).merge(Gn).extend({stripe_price_id:z.string().min(1).meta(on),stripe_product_id:z.string().min(1).meta(on),billing_period:sF.meta(on),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(im),currency:MS.meta(im),pricing_model:cd.meta(on),nickname:z.string().nullable().default(null).meta(on),is_mock:z.boolean().default(false).meta(on),last_updated_from_stripe:nm.meta(on)}).meta({id:"StripePrice","x-revturbine-schema-persistence":ld,"x-revturbine-schema-exposure":qs,...ig}),aF=pi(Rl),oF=pi(kl),lF=pi(El),cF=pi(wl),dF=pi(Al);({"/api/plan-anchors":{get:U({operationId:"listPlanAnchors",requestParams:{query:fn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:pn(tF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:U({operationId:"listPlans",requestParams:{query:fn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:pn(Rl)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:zr(Rl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get: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:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:aF}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Rl}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"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:ir}}}},"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:fn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:pn(nF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:U({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:fn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:pn(kl)}}}},"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:zr(kl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:kl}}}},"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:kl}}}},"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:oF}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:kl}}}},"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:fn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:pn(rF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:U({operationId:"listAddOns",requestParams:{query:fn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:pn(El)}}}},"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:zr(El)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:El}}}},"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:El}}}},"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:lF}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:El}}}},"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:fn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:pn(iF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:U({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:fn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:pn(wl)}}}},"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:zr(wl)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:wl}}}},"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:wl}}}},"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:cF}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:wl}}}},"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:fn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:pn(Al)}}}},"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:zr(Al)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Al}}}},"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:Al}}}},"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:dF}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Al}}}},"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:_}=zi,{Persisted:Fl,Transient:mt}=da,{Internal:Oi,External:Nt}=hs,wt=nr(In.Playbook,{sdkInput:true}),Ol=nr(In.Playbook,{sdkInput:false}),ua=nr(In.Playbook,{inConfig:false,sdkInput:false}),dP=nr(In.Playbook,{inConfig:false,sdkInput:true}),Tl=nr(In.Playbook,{inConfig:false,sdkInput:true,source:Hi.CodeConstant}),Xh=nr(In.Playbook,{inConfig:false,sdkInput:true,source:Hi.Runtime}),Qh=nr(In.Playbook,{inConfig:false,sdkInput:false,source:Hi.Runtime}),uF=nr(In.Billing,{sdkInput:false}),mF=nr(In.Metering,{sdkInput:false}),pF=nr(In.Branding,{inConfig:true,sdkInput:true}),fF=nr(In.Branding,{sdkInput:false}),hF="1.0.0",nd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),name:Vs.meta(_),handle:pr.meta(_),description:tm.meta(_),is_default:z.boolean().default(false).meta(_),entitlement_ids:z.array(z.string()).default([]).meta(_),metadata:_i.meta(_)}).meta({id:"SeatType","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...ua,..._s()}),gF=Hr("SeatTypeAnchor"),rd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta(_),label:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().nullable().default(null).meta(_),example_value:z.string().nullable().default(null).meta(_),value_map:z.record(z.string(),z.string()).default({}).meta(_),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(_),metadata:_i.meta(_)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...ua,..._s()}),_F=Hr("PersonalizationTokenAnchor"),bF=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),eg=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({..._,readOnly:true}),stripe_account_id:z.string().min(1).meta(_),live_mode:z.boolean().default(false).meta(_),onboarding_state:bF.default("not_started").meta({..._,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({..._,readOnly:true}),charges_enabled:z.boolean().default(false).meta({..._,readOnly:true}),details_submitted:z.boolean().default(false).meta({..._,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({..._,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({..._,readOnly:true}),sync_products:z.boolean().default(true).meta(_),sync_prices:z.boolean().default(true).meta(_),sync_subscriptions:z.boolean().default(true).meta(_),sync_invoices:z.boolean().default(false).meta(_),default_currency:z.string().length(3).default("USD").meta(_),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(_),last_sync_at:z.string().optional().meta({..._,readOnly:true}),metadata:_i.meta(_)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...uF,...bs()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(_),workspace_name:z.string().optional().meta(_),logo_url:z.string().optional().meta(_),support_email:z.string().optional().meta(_)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...fF});var id=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({handle:pr.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),meter_key:z.string().min(1).max(100).meta(_),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(_),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(_),stripe_meter_id:z.string().nullable().default(null).meta(_),is_active:z.boolean().default(true).meta(_),metadata:_i.meta(_)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...mF,...bs()}),ZS=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),sd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),soft_limit_percent:z.number().min(0).max(100).default(80).meta(_),hard_limit_percent:z.number().min(0).max(100).default(100).meta(_),soft_limit_action:ZS.default("warn").meta(_),hard_limit_action:ZS.default("block").meta(_),grace_period_hours:z.number().int().min(0).default(0).meta(_),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...dP,...bs()}),yF=Hr("UsageEnforcementSettingsAnchor"),vF=z.object({kind:z.enum(["template","slot"]).meta(_),id:z.string().min(1).meta(_),label:z.string().min(1).optional().meta(_)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),xF=z.object({id:z.string().min(1).meta(_),group:z.array(vF).min(1).meta(_),cap:z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month"]).meta(_)}).meta(_)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),SF=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),uP=z.object({capRules:z.array(xF).default([]).meta(_),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(_),remindLaterMinutes:z.number().int().min(0).default(60).meta(_),testMode:SF.default("off").meta(_)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Oi}),tg=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:pr.meta({..._,readOnly:true}),global_frequency_cap:uP.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(_)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Fl,"x-revturbine-schema-exposure":Oi,...dP,...bs()}),PF=Hr("PlacementSettingsAnchor"),IF=z.object({field:z.string().min(1).meta(_),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(_),value:z.string().meta(_)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),TF=z.object({name:z.string().min(1).meta(_),handle:z.string().min(1).meta(_),predicates:z.array(IF).optional().meta(_),dimension_id:z.string().optional().meta(_),experiment_id:z.string().min(1).optional().meta(_)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),CF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),tier_position:z.number().int().min(0).default(0).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:ma.default("public").meta(_)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),RF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:ma.default("public").meta(_)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...Ol}),kF=z.object({handle:z.string().min(1).meta(_),plan_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:cd.meta(_),visibility:ma.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:om.meta(_)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),EF=z.object({handle:z.string().min(1).meta(_),addon_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:cd.meta(_),visibility:ma.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:om.meta(_)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),wF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),is_default:z.boolean().default(false).meta(_),entitlement_handles:z.array(z.string()).default([]).meta(_)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),AF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().nullable().default(null).meta(_),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),soft_limit_action:z.string().meta(_),hard_limit_action:z.string().meta(_),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(_),notification_channels:z.array(z.string()).default([]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),OF=z.object({handle:z.string().min(1).meta(_),global_frequency_cap:uP.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),jF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:z.string().nullable().default(null).meta(_),visibility_toggle:z.boolean().default(true).meta(_),source_type:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),FF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().min(1).meta(_),meter_handle:z.string().min(1).meta(_),limit:z.number().int().min(0).nullable().default(null).meta(_),reset_period:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),LF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),type:em.meta(_),unit:z.string().optional().meta(_),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),mP=z.object({id:z.string().min(1).meta(_),entitlement_id:z.string().min(1).meta(_),targets:z.array(rP).min(1).meta(_),segment_ids:z.array(z.string()).default([]).meta(_),kind:em.optional().meta({..._,readOnly:true}),unit:z.string().optional().meta({..._,readOnly:true}),tier_name:z.string().optional().meta({..._,readOnly:true}),tier_description:z.string().optional().meta({..._,readOnly:true}),...jl.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(_),allocation:sm.optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),BF=z.object({slot_id:z.string().min(1).meta(_),active:z.boolean().meta(_),triggers:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),UF=z.object({id:z.string().min(1).meta(_),label:z.string().min(1).meta(_),description:z.string().meta(_),surface_type:z.string().meta(_),placement_handle:z.string().min(1).meta(_),template:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),VF=z.object({name:z.string().min(1).meta(_),type:z.string().optional().meta(_),required:z.boolean().optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),qF=z.object({id:z.string().min(1).meta(_),surface_type:z.string().meta(_),fields:z.array(VF).optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),DF=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":mt,"x-revturbine-schema-exposure":Nt}),MF=z.object({name:z.string().min(1).meta(_),action_type:DF.meta(_),plan_handle:z.string().optional().meta(_),promotion_id:z.string().optional().meta(_),placement_handle:z.string().optional().meta(_),url:z.string().optional().meta(_),tour_id:z.string().optional().meta(_),target_billing_period:z.enum(["monthly","annual"]).optional().meta(_),description:z.string().optional().meta(_)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),NF=z.object({id:z.string().meta(_),name:z.string().meta(_),discount:z.string().meta(_),type:z.string().meta(_),status:z.string().meta(_)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),zF=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(_),label:z.string().min(1).meta(_),description:z.string().optional().meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().optional().meta(_),example_value:z.string().optional().meta(_),value_map:z.record(z.string(),z.string()).optional().meta(_),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(_)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),YS=z.object({header:z.string().optional().meta(_),body:z.string().optional().meta(_),cta_label:z.string().optional().meta(_),secondary_cta_label:z.string().optional().meta(_)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),HF=z.object({block_id:z.string().min(1).meta(_),tenant_id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),surface_template_id:z.string().optional().meta(_),default_content:YS.meta(_),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:YS})).optional().meta(_),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(_),tokens_used:z.array(z.string()).optional().meta(_),status:z.enum(["draft","active","archived"]).meta(_),created_at:z.string().datetime().meta({..._,readOnly:true}),updated_at:z.string().datetime().meta({..._,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),KF=z.object({label:z.string().meta(_),path:NS.meta(_),config:z.record(z.string(),z.string()).optional().meta(_)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),pP=z.object({template_id:z.string().min(1).meta(_),fields:z.record(z.string(),z.string()).meta(_),ctas:z.array(KF).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),fP=z.object({plan_ids:z.array(z.string()).meta(_),billing_cadences:z.array(z.string()).optional().meta(_),segment_chips:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),GF=z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month","lifetime"]).meta(_)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),hP=z.object({max_per_period:GF.optional().meta(_),cooldown_days:z.number().int().min(0).optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),$F=z.object({id:z.string().min(1).meta(_),target:fP.meta(_),surfaces:z.array(pP).meta(_),caps:hP.optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().optional().meta({..._,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(_),recommendation_plan_override:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),WF=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:Ha}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ha}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ha}),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":mt,"x-revturbine-schema-exposure":Nt}),ZF=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt}),YF=z.object({id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:ZF.meta(_),trigger:WF.meta(_),payloads:z.array($F).meta(_),order:z.number().int().min(0).meta(_)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),JF=z.object({payload_id:z.string().min(1).meta(_),placement_id:z.string().min(1).meta(_),target:fP.meta(_),caps:hP.optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().meta({..._,readOnly:true}),updated_at:z.string().datetime().optional().meta({..._,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(_),surfaces:z.array(pP).optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),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(_)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),XF=z.object({kind:z.string().min(1).meta(_),schema_version:z.number().int().nonnegative().meta(_),config:z.unknown().meta(_)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),QF=Ln.merge(aP).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),eL=Ln.merge(oP).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...ua}),tL=z.object({plans:z.array(CF).meta({..._,...wt}),addons:z.array(RF).optional().meta({..._,...Ol}),entitlements:z.array(LF).meta({..._,...wt}),entitlement_rules:z.array(mP).meta({..._,...wt}),segments:z.array(TF).meta({..._,...wt}),content_ui_paths:z.array(MF).meta({..._,...wt}),slot_configs:z.array(BF).optional().meta({..._,...wt,...Wh({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({..._,...wt,...Wh({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({..._,...pF,...Wh({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(UF).optional().meta({..._,...wt}),message_blocks:z.array(HF).optional().meta({..._,...wt}),placement_payloads:z.array(JF).optional().meta({..._,...wt}),placements:z.array(YF).optional().meta({..._,...wt}),content_promotions:z.array(NF).optional().meta({..._,...wt}),personalization_tokens:z.array(zF).optional().meta({..._,...wt}),surface_templates:z.array(qF).optional().meta({..._,...wt}),free_trial_rules:z.array(QF).optional().meta({..._,...Ol}),reverse_trial_rules:z.array(eL).optional().meta({..._,...Ol}),plan_variations:z.array(kF).optional().meta({..._,...Ol}),addon_variations:z.array(EF).optional().meta({..._,...Ol}),extension_rules:z.array(XF).optional().meta({..._,...wt}),seat_types:z.array(wF).optional().meta({..._,...wt}),enforcement_defaults:z.array(AF).optional().meta({..._,...wt}),placement_settings:z.array(OF).optional().meta({..._,...wt}),segment_dimensions:z.array(jF).optional().meta({..._,...wt}),meter_bindings:z.array(FF).optional().meta({..._,...wt}),experiments:z.array(z.unknown()).max(0).optional().meta({..._,...ua}),signal_catalog:z.object({}).strict().optional().meta({..._,...ua})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt}),nL=z.object({artifact_type:z.literal("playbook").meta({..._,...Tl,readOnly:true}),format_version:z.literal(hF).meta({..._,...Tl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({..._,...Tl}),playbook_version_id:z.string().nullable().default(null).meta({..._,...Xh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),environment_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),project_id:z.string().min(1).optional().meta({..._,...Qh,readOnly:true}),exported_at:z.string().datetime().optional().meta({..._,...Xh,readOnly:true}),schema_version:z.string().min(1).optional().meta({..._,...Tl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({..._,...Tl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({..._,...Tl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...Xh}),gP=nL.extend(tL.shape).meta({"x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});function rL(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function _P(t){if(!rL(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,gP).meta({id:"Playbook","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});z.preprocess(_P,gP.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":mt,"x-revturbine-schema-exposure":Nt,...wt});({"/api/seat-type-anchors":{get:U({operationId:"listSeatTypeAnchors",requestParams:{query:fn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:pn(gF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:U({operationId:"listSeatTypes",requestParams:{query:fn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:pn(nd)}}}},"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:zr(nd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nd}}}},"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:nd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nd}}}},"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:fn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:pn(_F)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:U({operationId:"listPersonalizationTokens",requestParams:{query:fn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:pn(rd)}}}},"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:zr(rd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rd}}}},"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:rd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rd}}}},"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:pi(eg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:eg}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:U({operationId:"listMeteringConfigs",requestParams:{query:fn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:pn(id)}}}},"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:zr(id)}}},responses:{201:{description:"Created",content:{"application/json":{schema:id}}}},"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:id.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:id}}}},"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:fn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:pn(yF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:U({operationId:"listUsageEnforcementSettings",requestParams:{query:fn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:pn(sd)}}}},"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:zr(sd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sd}}}},"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:sd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:sd}}}},"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:fn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:pn(PF)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:U({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pi(tg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:tg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var lm=new Int32Array(2);new Float32Array(lm.buffer);new Float64Array(lm.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var cm;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(cm||(cm={}));var {Unrestricted:Ke}=zi,{Persisted:um,Transient:pa}=da,{External:ji}=hs,TP=nr(In.Playbook,{sdkInput:true});nr(In.Playbook,{inConfig:false,sdkInput:false});var lL=nr(In.Playbook,{inConfig:false,sdkInput:true}),cL=nr(In.Playbook,{inConfig:false,sdkInput:false,source:Hi.Runtime}),dL=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var CP=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),RP=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),uL=z.object({count:z.number().int().positive().meta(Ke),period:RP.meta(Ke)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji});z.object({surface_type:z.string().min(1).meta(Ke),rules:z.array(uL).meta(Ke),cooldown_ms:z.number().int().nonnegative().optional().meta(Ke)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...zi.Operational,...lL});var mL=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),Ll=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...Ke,readOnly:true}),name:Vs.meta(Ke),handle:pr.meta(Ke),description:tm.meta(Ke),category:CP.meta(Ke),drag_order_in_category:z.number().int().default(0).meta(Ke),surface_slot_id:z.string().optional().meta(Ke),entitlement_id:z.string().optional().meta(Ke),tier_threshold:z.string().optional().meta(Ke),threshold_percent:Ha.optional().meta(Ke),trial_type:z.enum(["free","reverse"]).optional().meta(Ke),trigger_type:z.string().optional().meta(Ke),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ke),days_before_end:z.number().int().min(0).optional().meta(Ke),qualifier:dL.optional().meta(Ke),activation_window_start:z.string().datetime().optional().meta(Ke),activation_window_end:z.string().datetime().optional().meta(Ke),metadata:_i.meta(Ke)}).meta({id:"Placement","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...TP,..._s()}),pL=Hr("PlacementAnchor"),fL=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),hL=z.object({code:fL.meta(Ke),message:z.string().min(1).meta(Ke),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ke)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),IP=Ll.extend({warnings:z.array(hL).optional().meta(Ke)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),gL=z.object({label:z.string().min(1).max(200).meta(Ke),cta_path_type:mL.meta(Ke),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ke)}).meta({id:"CtaObject","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ji}),dd=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({anchor_id:z.string().min(1).meta({...Ke,readOnly:true}),handle:pr.meta({...Ke,readOnly:true}),placement_id:z.string().min(1).meta(Ke),drag_order:z.number().int().default(0).meta(Ke),target_plan_ids:z.array(z.string()).default([]).meta(Ke),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ke),target_segments:z.array(z.string()).default([]).meta(Ke),surface_slot_ids:z.array(z.string()).default([]).meta(Ke),surface_template_id:z.string().min(1).meta(Ke),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ke),cta_list:z.array(gL).default([]).meta(Ke),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ke),max_period_unit:RP.default("session").meta(Ke),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ke),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ke),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ke),recommendation_plan_override:z.string().optional().meta(Ke)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...TP,...bs()}),_L=Hr("PlacementPayloadAnchor"),bL=Ln.merge(Kn).merge(Gn).merge(or).merge(fr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ke),surface_type:$h.meta(Ke),surface_template_ids:z.array(z.string()).default([]).meta(Ke),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ke),first_seen:z.string().datetime().meta({...Ke,readOnly:true}),last_seen:z.string().datetime().meta({...Ke,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ke),placement_count:z.number().int().min(0).default(0).meta({...Ke,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":um,"x-revturbine-schema-exposure":ji,...cL,..._s("surface_slot_handle")}),yL=pi(Ll),vL=pi(dd);({"/api/placement-anchors":{get:U({operationId:"listPlacementAnchors",requestParams:{query:fn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:pn(pL)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:U({operationId:"listPlacements",requestParams:{query:fn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:pn(Ll)}}}},"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:zr(Ll)}}},responses:{201:{description:"Created",content:{"application/json":{schema:IP}}}},"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:Ll}}}},"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:yL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:IP}}}},"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:ir}}}},"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:Ll}}}},"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:CP,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:fn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:pn(_L)}}},default:{description:"Error response",content:{"application/json":{schema:ir}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:U({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:fn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:pn(dd)}}}},"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:zr(dd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:dd}}}},"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:vL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dd}}}},"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:fn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:pn(bL)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var kP=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(kP).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 TL=["web-client","server"],CL=z.enum(TL),RL=["method","meta","component"],kL=z.enum(RL),EL=["ts","python","java","csharp","rust"];z.enum(EL);var wL=z.object({ts:z.string().min(1).optional(),python:z.string().min(1).optional(),java:z.string().min(1).optional(),csharp:z.string().min(1).optional(),rust:z.string().min(1).optional()}).strict(),AL=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:kL,appliesTo:z.array(CL).min(1),composes:z.string().min(1).optional(),perLanguage:wL.optional(),description:z.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),OL=z.object({version:z.number().int().positive(),functions:z.array(AL).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 s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});OL.parse({version:2,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client","server"],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","server"],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:"evaluate",aliases:[],kind:"method",appliesTo:["server"],description:"Batch-evaluate placements + entitlements for a user, returning a serializable payload the client SDK can hydrate."},{canonical:"getTrialStatus",aliases:[],kind:"method",appliesTo:["server"],description:"Fetch the user's trial status for server-side gating."},{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 jL=[{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 FL(){let t=[];for(let[e,n]of Object.entries(WS))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function LL(t){return [...t].sort((e,n)=>e.from.localeCompare(n.from)||e.field.localeCompare(n.field)||e.to.localeCompare(n.to)||(e.targetKind??"").localeCompare(n.targetKind??""))}Object.freeze(LL([...FL(),...jL]));var EP=createContext(Nr);function ag({theme:t,children:e}){return jsx(EP.Provider,{value:t,children:e})}function Tn(){return useContext(EP)}var ML={display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 24px",lineHeight:"1.5",zIndex:9990,width:"100%",boxSizing:"border-box"},NL={display:"flex",flexDirection:"column",gap:"2px",flex:1},zL={display:"flex",alignItems:"center",gap:"8px",marginLeft:"16px",flexShrink:0};function Ka({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(false),[p,v]=useState(i);i&&!p&&b(false),i!==p&&v(i);let P=t.position||"top",S=t.dismissible!==false,y=useCallback(()=>{b(true),n();},[n]),T=useCallback(()=>{b(true),r?.();},[r]),E=useMemo(()=>{let{colors:A,typography:k,shape:O}=o;return {banner:{...ML,backgroundColor:A.primary,color:A.primaryText,fontFamily:k.fontFamily,fontSize:k.fontSize,position:"sticky",...P==="bottom"?{bottom:0}:{top:0}},header:{fontWeight:600,fontSize:"15px"},body:{opacity:.9},cta:{padding:"6px 16px",backgroundColor:A.primaryText,color:A.primary,border:"none",borderRadius:O.borderRadiusSmall,fontWeight:600,fontSize:k.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap"},dismiss:{padding:"4px 8px",background:"transparent",border:"none",color:A.primaryText,fontSize:"18px",cursor:"pointer",opacity:.7,lineHeight:1},remind:{padding:"4px 8px",background:"transparent",border:"none",color:A.primaryText,fontSize:k.fontSizeSmall,fontWeight:500,cursor:"pointer",opacity:.85,whiteSpace:"nowrap"}}},[o,P]);return !i||l?null:jsxs("div",{className:s,style:{...E.banner,...a},role:"banner","data-rt-placement":"banner",children:[jsxs("div",{style:NL,children:[t.header&&jsx("div",{style:E.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:E.body,children:t.body||t.message})]}),jsxs("div",{style:zL,children:[t.cta_label&&jsx("button",{type:"button",style:E.cta,onClick:e,children:t.cta_label}),r&&S&&jsx("button",{type:"button",style:E.remind,onClick:T,"data-rt-action":"remind-later",children:"Remind me later"}),S&&jsx("button",{type:"button",style:E.dismiss,onClick:y,"aria-label":"Dismiss",children:"\xD7"})]})]})}Ka.displayName="BannerSlot";var GL={position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999},$L={width:"100%",maxHeight:"200px",objectFit:"cover",marginBottom:"16px"},WL={display:"flex",gap:"12px",justifyContent:"flex-end"};function Ga({content:t,onCtaClick:e,onSecondaryCtaClick:n,onDismiss:r,onRemindLater:i,visible:s,className:a,style:o}){let l=Tn(),b=useRef(null),p=t.style||"optional",[v,P]=useState(false),S=useRef(s);useEffect(()=>{s&&!S.current&&P(false),S.current=s;},[s]);let y=useCallback(()=>{P(true),r();},[r]),T=useCallback(()=>{P(true),i?.();},[i]),E=useCallback(O=>{p==="optional"&&O.target===O.currentTarget&&y();},[p,y]),A=useCallback(O=>{O.key==="Escape"&&p==="optional"&&y();},[p,y]);useEffect(()=>{if(s)return document.addEventListener("keydown",A),b.current?.focus(),()=>document.removeEventListener("keydown",A)},[s,A]);let k=useMemo(()=>{let{colors:O,typography:R,shape:C,shadows:D}=l;return {overlay:{...GL,backgroundColor:O.overlay,fontFamily:R.fontFamily},dialog:{position:"relative",maxWidth:"480px",width:"90%",backgroundColor:O.background,borderRadius:C.borderRadiusLarge,boxShadow:D.large,padding:"32px",boxSizing:"border-box"},close:{position:"absolute",top:"12px",right:"12px",background:"transparent",border:"none",fontSize:"20px",color:O.textMuted,cursor:"pointer",padding:"4px 8px",lineHeight:1},image:{...$L,borderRadius:C.borderRadius},header:{fontSize:R.fontSizeHeader,fontWeight:700,color:O.text,marginBottom:"8px",lineHeight:1.3},body:{fontSize:"15px",color:O.textSecondary,lineHeight:1.6,marginBottom:"24px"},primaryBtn:{padding:"10px 24px",backgroundColor:O.primary,color:O.primaryText,border:"none",borderRadius:C.borderRadius,fontWeight:600,fontSize:R.fontSize,cursor:"pointer"},secondaryBtn:{padding:"10px 24px",backgroundColor:"transparent",color:O.textSecondary,border:`1px solid ${O.surfaceBorder}`,borderRadius:C.borderRadius,fontWeight:500,fontSize:R.fontSize,cursor:"pointer"},remindBtn:{padding:"10px 16px",backgroundColor:"transparent",color:O.textMuted,border:"none",borderRadius:C.borderRadius,fontWeight:500,fontSize:R.fontSize,cursor:"pointer",marginRight:"auto"}}},[l]);return !s||v?null:jsx("div",{style:k.overlay,onClick:E,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:b,className:a,style:{...k.dialog,...o},tabIndex:-1,children:[p==="optional"&&jsx("button",{type:"button",style:k.close,onClick:y,"aria-label":"Close",children:"\xD7"}),t.image_url&&jsx("img",{src:t.image_url,alt:"",style:k.image}),t.header&&jsx("div",{style:k.header,children:t.header}),t.body&&jsx("div",{style:k.body,children:t.body}),jsxs("div",{style:WL,children:[i&&p==="optional"&&jsx("button",{type:"button",style:k.remindBtn,onClick:T,"data-rt-action":"remind-later",children:"Remind me later"}),t.secondary_cta_label&&n&&jsx("button",{type:"button",style:k.secondaryBtn,onClick:n,children:t.secondary_cta_label}),t.cta_label&&jsx("button",{type:"button",style:k.primaryBtn,onClick:e,children:t.cta_label})]})]})})}Ga.displayName="ModalSlot";var YL={width:"100%",maxHeight:"180px",objectFit:"cover",marginBottom:"12px"};function pd({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn(),a=useMemo(()=>{let{colors:o,typography:l,shape:b}=s;return {container:{backgroundColor:o.surface,border:`1px solid ${o.surfaceBorder}`,borderRadius:b.borderRadius,padding:"20px",fontFamily:l.fontFamily,boxSizing:"border-box"},header:{fontSize:"16px",fontWeight:600,color:o.text,marginBottom:"6px",lineHeight:1.4},body:{fontSize:l.fontSize,color:o.textSecondary,lineHeight:1.6,marginBottom:"16px"},image:{...YL,borderRadius:b.borderRadiusSmall},cta:{padding:"8px 20px",backgroundColor:o.primary,color:o.primaryText,border:"none",borderRadius:b.borderRadiusSmall,fontWeight:600,fontSize:l.fontSizeSmall,cursor:"pointer"}}},[s]);return n?jsxs("div",{className:r,style:{...a.container,...i},"data-rt-placement":"inline-embed",children:[t.image_url&&jsx("img",{src:t.image_url,alt:"",style:a.image}),t.header&&jsx("div",{style:a.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:a.body,children:t.body||t.message}),t.cta_label&&jsx("button",{type:"button",style:a.cta,onClick:e,children:t.cta_label})]}):null}pd.displayName="InlineEmbedSlot";function Ds(t){return jsx(pd,{...t})}Ds.displayName="InPageSlot";var UP={"top-right":{top:"16px",right:"16px"},"bottom-right":{bottom:"16px",right:"16px"},"bottom-center":{bottom:"16px",left:"50%",transform:"translateX(-50%)"}},tB={position:"absolute",zIndex:9995,maxWidth:"380px",width:"90%",lineHeight:1.5,display:"flex",alignItems:"center",gap:"12px",boxSizing:"border-box"},nB={flex:1};function $a({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(i),[p,v]=useState(i);i&&!p&&b(true),i!==p&&v(i);let P=t.position||"bottom-right",S=typeof t.duration=="number"?t.duration:5,y=useCallback(()=>{b(false),n();},[n]),T=useCallback(()=>{b(false),r?.();},[r]);useEffect(()=>{if(!l||S<=0)return;let k=setTimeout(()=>{y();},S*1e3);return ()=>clearTimeout(k)},[l,S,y]);let E=useMemo(()=>{let{colors:k,typography:O,shape:R,shadows:C}=o;return {container:{...tB,backgroundColor:k.toastBackground,color:k.toastText,borderRadius:R.borderRadius,boxShadow:C.medium,padding:"14px 18px",fontFamily:O.fontFamily,fontSize:O.fontSize},cta:{color:k.info,background:"transparent",border:"none",fontWeight:600,fontSize:O.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap",textDecoration:"underline",padding:0},close:{background:"transparent",border:"none",color:k.textMuted,fontSize:"16px",cursor:"pointer",padding:"2px 4px",lineHeight:1,flexShrink:0},remind:{background:"transparent",border:"none",color:k.textMuted,fontSize:O.fontSizeSmall,fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",padding:"2px 4px",flexShrink:0}}},[o]);if(!l)return null;let A=UP[P]??UP["bottom-right"];return jsxs("div",{className:s,style:{...E.container,...A,...a},role:"status","aria-live":"polite","data-rt-placement":"toast",children:[jsx("div",{style:nB,children:t.message||t.body||t.header}),t.cta_label&&jsx("button",{type:"button",style:E.cta,onClick:e,children:t.cta_label}),r&&jsx("button",{type:"button",style:E.remind,onClick:T,"data-rt-action":"remind-later",children:"Later"}),jsx("button",{type:"button",style:E.close,onClick:y,"aria-label":"Close",children:"\xD7"})]})}$a.displayName="ToastSlot";function Wa({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn();if(!n)return null;let a=t.style||"primary",o={padding:"8px 20px",border:"none",borderRadius:s.shape.borderRadiusSmall,fontWeight:600,fontSize:s.typography.fontSize,cursor:"pointer",fontFamily:s.typography.fontFamily,whiteSpace:"nowrap",lineHeight:1.4},l={primary:{...o,backgroundColor:s.colors.primary,color:s.colors.primaryText},secondary:{...o,backgroundColor:s.colors.secondary,color:s.colors.secondaryText,border:`1px solid ${s.colors.surfaceBorder}`},accent:{...o,backgroundColor:s.colors.accent,color:s.colors.accentText}},b=l[a]??l.primary;return jsx("button",{type:"button",className:r,style:{...b,...i},onClick:e,"data-rt-placement":"button",children:t.cta_label||"Upgrade"})}Wa.displayName="ButtonSlot";function ug(t){if(typeof t.usage_percent=="number")return t.usage_percent;let e=typeof t.usage_current=="number"?t.usage_current:0,n=typeof t.usage_limit=="number"?t.usage_limit:100;return n>0?Math.min(100,Math.round(e/n*100)):0}function VP(t,e){return t>=90?e.colors.danger:t>=70?e.colors.warning:e.colors.primary}function sB({content:t,theme:e}){let n=ug(t),r=t.usage_current??n,i=t.usage_limit??100;return jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted,marginBottom:"8px",display:"flex",justifyContent:"space-between",alignItems:"baseline"},children:[jsx("span",{children:typeof t.header=="string"?t.header:"Usage"}),jsxs("span",{style:{fontWeight:600,color:e.colors.text},children:[String(r)," / ",String(i)]})]}),jsx("div",{style:{width:"100%",height:"8px",backgroundColor:e.colors.track,borderRadius:e.shape.borderRadiusSmall,overflow:"hidden",marginBottom:"12px"},children:jsx("div",{style:{height:"100%",borderRadius:e.shape.borderRadiusSmall,transition:"width 0.3s ease",width:`${Math.min(100,n)}%`,backgroundColor:VP(n,e)}})})]})}function aB({content:t,theme:e}){let n=t.usage_current??0,r=t.usage_limit??100;return jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:"24px",fontWeight:700,color:e.colors.text,marginBottom:"4px"},children:[String(n)," / ",String(r)]}),jsx("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted,marginBottom:"12px"},children:typeof t.header=="string"?t.header:"Usage"})]})}var Ki=80,cg=8,dg=(Ki-cg)/2,lg=2*Math.PI*dg;function oB({content:t,theme:e}){let n=ug(t),r=t.usage_current??n,i=t.usage_limit??100,s=lg-n/100*lg,a=VP(n,e);return jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",marginBottom:"12px"},children:[jsxs("svg",{width:Ki,height:Ki,style:{flexShrink:0},children:[jsx("circle",{cx:Ki/2,cy:Ki/2,r:dg,fill:"none",stroke:e.colors.track,strokeWidth:cg}),jsx("circle",{cx:Ki/2,cy:Ki/2,r:dg,fill:"none",stroke:a,strokeWidth:cg,strokeLinecap:"round",strokeDasharray:lg,strokeDashoffset:s,transform:`rotate(-90 ${Ki/2} ${Ki/2})`,style:{transition:"stroke-dashoffset 0.3s ease"}}),jsxs("text",{x:Ki/2,y:Ki/2+1,textAnchor:"middle",dominantBaseline:"central",fontSize:"16",fontWeight:"700",fill:e.colors.text,children:[n,"%"]})]}),jsxs("div",{children:[jsxs("div",{style:{fontSize:e.typography.fontSize,fontWeight:600,color:e.colors.text},children:[String(r)," / ",String(i)]}),jsx("div",{style:{fontSize:e.typography.fontSizeSmall,color:e.colors.textMuted},children:typeof t.header=="string"?t.header:"Usage"})]})]})}function Bl({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn();if(!n)return null;let a=t.display_style||"progress_bar",o=typeof t.show_at=="number"?t.show_at:0,l=ug(t);if(o>0&&l<o)return null;let b={backgroundColor:s.colors.surface,border:`1px solid ${s.colors.surfaceBorder}`,borderRadius:s.shape.borderRadius,padding:"16px 20px",fontFamily:s.typography.fontFamily,boxSizing:"border-box"},p={padding:"6px 16px",backgroundColor:s.colors.primary,color:s.colors.primaryText,border:"none",borderRadius:s.shape.borderRadiusSmall,fontWeight:600,fontSize:s.typography.fontSizeSmall,cursor:"pointer"};return jsxs("div",{className:r,style:{...b,...i},"data-rt-placement":"quota-meter",children:[a==="numeric_counter"?jsx(aB,{content:t,theme:s}):a==="circular_gauge"?jsx(oB,{content:t,theme:s}):jsx(sB,{content:t,theme:s}),t.cta_label&&jsx("button",{type:"button",style:p,onClick:e,children:t.cta_label})]})}Bl.displayName="QuotaMeterSlot";var lB={maxWidth:"800px",margin:"0 auto",padding:"40px 24px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},cB={fontSize:"28px",fontWeight:700,color:"#111827",textAlign:"center",marginBottom:"12px",lineHeight:1.3},dB={fontSize:"16px",color:"#4b5563",textAlign:"center",lineHeight:1.6,marginBottom:"32px",maxWidth:"600px",marginLeft:"auto",marginRight:"auto"},uB={display:"flex",justifyContent:"center",gap:"16px"},mB={padding:"12px 32px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"8px",fontWeight:600,fontSize:"16px",cursor:"pointer"},pB={padding:"12px 32px",backgroundColor:"transparent",color:"#4b5563",border:"1px solid #d1d5db",borderRadius:"8px",fontWeight:500,fontSize:"16px",cursor:"pointer"};function Ul({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){return r?jsxs("div",{className:i,style:{...lB,...s},"data-rt-placement":"full-page",children:[t.header&&jsx("h1",{style:cB,children:t.header}),t.body&&jsx("p",{style:dB,children:t.body}),jsxs("div",{style:uB,children:[t.cta_label&&jsx("button",{type:"button",style:mB,onClick:e,children:t.cta_label}),t.secondary_cta_label&&n&&jsx("button",{type:"button",style:pB,onClick:n,children:t.secondary_cta_label})]})]}):null}Ul.displayName="FullPageSlot";var fB={backgroundColor:"#1e1e1e",color:"#d4d4d4",fontFamily:'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace',fontSize:"13px",lineHeight:1.6,padding:"16px 20px",borderRadius:"6px",boxSizing:"border-box"},hB={whiteSpace:"pre-wrap",marginBottom:"12px"},gB={display:"flex",gap:"16px"},MP={color:"#569cd6",background:"transparent",border:"none",cursor:"pointer",fontFamily:"inherit",fontSize:"inherit",padding:0,textDecoration:"underline"};function fd({content:t,onCtaClick:e,visible:n,className:r,style:i}){if(!n)return null;let s=t.message||t.body||"",a=t.action_links,o=Array.isArray(a)?a.filter(l=>typeof l=="string"):[];return jsxs("div",{className:r,style:{...fB,...i},"data-rt-placement":"cli",children:[s&&jsx("div",{style:hB,children:s}),(o.length>0||t.cta_label)&&jsxs("div",{style:gB,children:[t.cta_label&&jsx("button",{type:"button",style:MP,onClick:e,children:t.cta_label}),o.map(l=>jsx("button",{type:"button",style:MP,onClick:e,children:l},l))]})]})}fd.displayName="CliSlot";var _B={backgroundColor:"#ffffff",border:"1px solid #e2e8f0",borderRadius:"8px",padding:"16px 20px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},bB={display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"4px"},yB={fontSize:"13px",color:"#6b7280"},vB={fontSize:"28px",fontWeight:700,color:"#111827"},xB={fontSize:"12px",color:"#9ca3af",marginBottom:"12px"},SB={width:"100%",height:"6px",backgroundColor:"#e5e7eb",borderRadius:"3px",overflow:"hidden",marginBottom:"12px"},PB={height:"100%",borderRadius:"3px",transition:"width 0.3s ease"},IB={display:"flex",gap:"8px"},TB={padding:"6px 16px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"6px",fontWeight:600,fontSize:"13px",cursor:"pointer"};function CB(t,e){if(e<=0)return "#1e40af";let n=t/e*100;return n<=10?"#dc2626":n<=25?"#f59e0b":"#1e40af"}function hd({content:t,onCtaClick:e,visible:n,className:r,style:i}){if(!n)return null;let s=typeof t.credits_remaining=="number"?t.credits_remaining:0,a=typeof t.credits_total=="number"?t.credits_total:s,o=typeof t.show_at=="number"?t.show_at:0,l=t.show_burn_rate===true,b=t.display_style||"numeric_balance";if(o>0&&s>o)return null;let p=a>0?s/a*100:0;return jsxs("div",{className:r,style:{..._B,...i},"data-rt-placement":"credit-balance",children:[jsxs("div",{style:bB,children:[jsx("span",{style:yB,children:typeof t.header=="string"?t.header:"Credits Remaining"}),jsx("span",{style:vB,children:String(s)})]}),l&&typeof t.burn_rate_label=="string"&&jsx("div",{style:xB,children:t.burn_rate_label}),(b==="balance_bar"||b==="balance_burn_rate")&&a>0&&jsx("div",{style:SB,children:jsx("div",{style:{...PB,width:`${Math.min(100,p)}%`,backgroundColor:CB(s,a)}})}),jsx("div",{style:IB,children:t.cta_label&&jsx("button",{type:"button",style:TB,onClick:e,children:t.cta_label})})]})}hd.displayName="CreditBalanceSlot";var kB={position:"absolute",top:"16px",right:"16px"};function EB(t,e,n){return e==="top"?{position:"fixed",left:`${t.left+t.width/2}px`,top:`${t.top-n}px`,transform:"translate(-50%, -100%)"}:e==="left"?{position:"fixed",left:`${t.left-n}px`,top:`${t.top+t.height/2}px`,transform:"translate(-100%, -50%)"}:e==="right"?{position:"fixed",left:`${t.left+t.width+n}px`,top:`${t.top+t.height/2}px`,transform:"translate(0, -50%)"}:{position:"fixed",left:`${t.left+t.width/2}px`,top:`${t.top+t.height+n}px`,transform:"translate(-50%, 0)"}}function gd({content:t,onCtaClick:e,onDismiss:n,onRemindLater:r,visible:i,className:s,style:a}){let o=Tn(),[l,b]=useState(false),[p,v]=useState(null),P=t.anchor_selector||void 0,S=t.position||"top",y=typeof t.anchor_gap=="number"?t.anchor_gap:10,T=useCallback(()=>{if(!P||typeof window>"u"){v(null);return}let R=window.document.querySelector(P);if(!R){v(null);return}let C=R.getBoundingClientRect();v({top:C.top,left:C.left,width:C.width,height:C.height});},[P]);useEffect(()=>{i&&b(false);},[i]),useEffect(()=>{if(!i||(T(),typeof window>"u"))return;let R=()=>T();return window.addEventListener("resize",R),window.addEventListener("scroll",R,true),()=>{window.removeEventListener("resize",R),window.removeEventListener("scroll",R,true);}},[i,T]);let E=useCallback(()=>{b(true),n();},[n]),A=useCallback(()=>{b(true),r?.();},[r]),k=useMemo(()=>{let{colors:R,typography:C,shape:D,shadows:ae}=o;return {container:{zIndex:9996,maxWidth:"320px",width:"max-content",lineHeight:1.45,display:"flex",flexDirection:"column",gap:"10px",boxSizing:"border-box",backgroundColor:R.toastBackground,color:R.toastText,borderRadius:D.borderRadius,boxShadow:ae.medium,padding:"12px 14px",fontFamily:C.fontFamily,fontSize:C.fontSizeSmall},body:{margin:0},actions:{display:"flex",alignItems:"center",gap:"10px"},cta:{color:R.info,background:"transparent",border:"none",fontWeight:600,fontSize:C.fontSizeSmall,cursor:"pointer",textDecoration:"underline",padding:0},close:{marginLeft:"auto",background:"transparent",border:"none",color:R.textMuted,fontSize:"14px",cursor:"pointer",lineHeight:1,padding:"2px 4px"},remind:{background:"transparent",border:"none",color:R.textMuted,fontSize:C.fontSizeSmall,fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",padding:"2px 4px"}}},[o]);if(!i||l)return null;let O=p?EB(p,S,y):kB;return jsxs("div",{className:s,style:{...k.container,...O,...a},role:"status","aria-live":"polite","data-rt-placement":"tooltip",children:[jsx("p",{style:k.body,children:t.message||t.body||t.header}),jsxs("div",{style:k.actions,children:[t.cta_label&&jsx("button",{type:"button",style:k.cta,onClick:e,children:t.cta_label}),r&&jsx("button",{type:"button",style:k.remind,onClick:A,"data-rt-action":"remind-later",children:"Later"}),jsx("button",{type:"button",style:k.close,onClick:E,"aria-label":"Close tooltip",children:"\xD7"})]})]})}gd.displayName="TooltipSlot";function AB(t){return t==="connected"?"#22c55e":t==="pending"?"#f59e0b":"#ef4444"}function OB(t){return t==="connected"?"Connected":t==="pending"?"Pending":"Disconnected"}function _d({content:t,onCtaClick:e,visible:n,className:r,style:i}){let s=Tn(),a=t.connection_state||"disconnected",o=useMemo(()=>{let{colors:l,typography:b,shape:p,shadows:v}=s;return {card:{backgroundColor:l.surface,border:`1px solid ${l.surfaceBorder}`,borderRadius:p.borderRadius,boxShadow:v.medium,padding:"16px",display:"flex",flexDirection:"column",gap:"12px",fontFamily:b.fontFamily,maxWidth:"420px"},row:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"10px"},heading:{margin:0,color:l.text,fontSize:"15px",fontWeight:600},body:{margin:0,color:l.textSecondary,fontSize:b.fontSizeSmall,lineHeight:1.45},badge:{display:"inline-flex",alignItems:"center",gap:"6px",borderRadius:"999px",border:`1px solid ${l.surfaceBorder}`,padding:"3px 8px",fontSize:"12px",color:l.textSecondary},dot:{width:"8px",height:"8px",borderRadius:"50%",backgroundColor:AB(a)},cta:{alignSelf:"flex-start",backgroundColor:l.primary,color:l.primaryText,border:"none",borderRadius:p.borderRadiusSmall,padding:"7px 12px",fontWeight:600,fontSize:b.fontSizeSmall,cursor:"pointer"}}},[s,a]);return n?jsxs("section",{className:r,style:{...o.card,...i},"data-rt-placement":"agent-connector",children:[jsxs("div",{style:o.row,children:[jsx("h3",{style:o.heading,children:t.header||"Connect your assistant"}),jsxs("span",{style:o.badge,children:[jsx("span",{style:o.dot}),OB(a)]})]}),jsx("p",{style:o.body,children:t.body||"Enable your agent connector to automate premium workflows."}),t.cta_label&&jsx("button",{type:"button",style:o.cta,onClick:e,children:t.cta_label})]}):null}_d.displayName="AgentConnectorSlot";var yd=(t,e="")=>t==null||t===""?e:String(t);function FB(t){let e=[];return t.cta_label&&e.push({kind:"primary",label:t.cta_label}),t.secondary_cta_label&&e.push({kind:"secondary",label:t.secondary_cta_label}),e}var hg={fontSize:"10px",textTransform:"uppercase",letterSpacing:"0.05em",color:"#94a3b8"};function gg({content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:r,accentText:i}){let s=FB(t);if(s.length===0)return null;let a={padding:"5px 12px",borderRadius:"6px",fontSize:"12px",fontWeight:600,cursor:"pointer",whiteSpace:"nowrap"};return jsx("div",{style:{display:"flex",gap:"8px",marginTop:"8px",alignItems:"center"},children:s.map(o=>o.kind==="primary"?jsx("button",{type:"button","data-rt-cta":"primary",onClick:e,style:{...a,backgroundColor:r,color:i,border:"none"},children:o.label},"primary"):n&&jsx("button",{type:"button","data-rt-cta":"secondary",onClick:n,style:{...a,backgroundColor:"transparent",color:r,border:`1px solid ${r}`},children:o.label},"secondary"))})}function _g(){let t=Tn();return useMemo(()=>({accent:t.colors.primary,accentText:t.colors.primaryText}),[t])}function bm({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"email",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",...s},children:[jsxs("div",{style:{borderBottom:"1px solid #f1f5f9",padding:"8px 12px"},children:[jsx("p",{style:{...hg,margin:0},children:"Email preview"}),jsx("p",{style:{margin:"2px 0 0",fontSize:"14px",fontWeight:600,color:"#1e293b"},children:yd(t.subject,"(no subject)")})]}),jsxs("div",{style:{padding:"8px 12px",fontSize:"12px",color:"#475569",whiteSpace:"pre-wrap"},children:[yd(t.body,"(empty body)"),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]})]}):null}bm.displayName="EmailPreviewSlot";function ym({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"sms",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",padding:"12px",...s},children:[jsx("p",{style:{...hg,margin:0},children:"SMS preview"}),jsx("div",{style:{display:"inline-block",maxWidth:"85%",marginTop:"4px",borderRadius:"16px",backgroundColor:"#dcfce7",padding:"8px 12px",fontSize:"12px",color:"#1e293b"},children:yd(t.body??t.message,"(empty message)")}),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]}):null}ym.displayName="SmsPreviewSlot";function vm({content:t,onCtaClick:e,onSecondaryCtaClick:n,visible:r,className:i,style:s}){let{accent:a,accentText:o}=_g();return r?jsxs("div",{className:i,"data-rt-placement":"push",style:{borderRadius:"8px",border:"1px solid #e2e8f0",backgroundColor:"#ffffff",padding:"12px",boxShadow:"0 1px 2px rgba(0,0,0,0.05)",...s},children:[jsx("p",{style:{...hg,margin:0},children:"Push preview"}),jsx("p",{style:{margin:"4px 0 0",fontSize:"14px",fontWeight:600,color:"#1e293b"},children:yd(t.header??t.title,"(no title)")}),jsx("p",{style:{margin:0,fontSize:"12px",color:"#475569"},children:yd(t.body,"(empty body)")}),jsx(gg,{content:t,onCtaClick:e,onSecondaryCtaClick:n,accent:a,accentText:o})]}):null}vm.displayName="PushPreviewSlot";function bg(t){t.register({id:"banner",label:"Banner",description:"Full-width banner placement at the top or bottom of the page.",surfaceType:"banner",component:Ka,defaultProps:{content:{position:"top",dismissible:true}}}),t.register({id:"modal",label:"Modal Overlay",description:"Centered overlay dialog. Supports optional (dismissible) and blocking modes.",surfaceType:"modal",component:Ga}),t.register({id:"in_page",label:"Inline Embed",description:"Content card or message embedded in the page flow.",surfaceType:"in_page",component:Ds}),t.register({id:"plans_cta",label:"Plans CTA",description:"Pricing page CTA-focused module with concise upgrade actions.",surfaceType:"in_page",component:Ds,priority:30,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["plans_cta","pricing_page_cta","plans_pricing_cta"].includes(e.surface.template)}),t.register({id:"plans_full",label:"Plans Full Page",description:"Dedicated plans and pricing full-page experience.",surfaceType:"full_page",component:Ul,priority:30,accepts:e=>typeof e.surface.template=="string"&&["plans_full","pricing_page_full","plans_pricing_full"].includes(e.surface.template)}),t.register({id:"inline_gate_message",label:"Inline Gate Message",description:"Inline entitlement gate message with upgrade CTA.",surfaceType:"in_page",component:Ds,priority:40,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["inline_gate_message","inline_feature_gate","feature_gate_inline"].includes(e.surface.template)}),t.register({id:"tooltip",label:"Tooltip",description:"Compact tooltip-like guidance near a feature surface.",surfaceType:"toast",component:gd,priority:50,accepts:e=>{let n=typeof e.surface.template=="string"?e.surface.template:"";return n==="tooltip"||n==="feature_tooltip"||n==="inline_tooltip"},defaultProps:{content:{position:"top-right",duration:0}}}),t.register({id:"toast",label:"Toast Notification",description:"Small transient notification that auto-dismisses.",surfaceType:"toast",component:$a,defaultProps:{content:{position:"bottom-right",duration:5}}}),t.register({id:"button",label:"Button",description:"Persistent button in the product navigation or UI.",surfaceType:"button",component:Wa,defaultProps:{content:{style:"primary"}}}),t.register({id:"full_page",label:"Full Page",description:"Dedicated managed page (e.g. plans & pricing).",surfaceType:"full_page",component:Ul}),t.register({id:"quota_meter",label:"Quota Meter",description:"Visual usage meter with upgrade CTA. Triggers at configurable threshold.",surfaceType:"in_page",component:Bl,accepts:e=>e.surface.type==="in_page"&&(e.surface.template==="quota_meter"||e.surface.template==="quota_meter_counter_upgrade_button")}),t.register({id:"trial_counter",label:"Trial Counter",description:"Trial countdown/counter with conversion CTA.",surfaceType:"in_page",component:Bl,priority:35,accepts:e=>e.surface.type==="in_page"&&typeof e.surface.template=="string"&&["trial_counter","trial_countdown","trial_days_counter"].includes(e.surface.template),defaultProps:{content:{display_style:"numeric_counter"}}}),t.register({id:"cli",label:"CLI Message",description:"Message in a CLI or chat-style interface with action links.",surfaceType:"cli",component:fd}),t.register({id:"email",label:"Email Preview",description:"Static email channel preview (subject + body + CTAs).",surfaceType:"email",component:bm}),t.register({id:"sms",label:"SMS Preview",description:"Static SMS channel preview (message bubble + CTAs).",surfaceType:"sms",component:ym}),t.register({id:"push",label:"Push Preview",description:"Static push-notification channel preview (title + body + CTAs).",surfaceType:"push",component:vm}),t.register({id:"agent_connector",label:"Agent Connector",description:"Agent-surface placement for assistant/connector experiences.",surfaceType:"agent",component:_d,priority:30,accepts:e=>{let n=typeof e.surface.template=="string"?e.surface.template:"";return e.surface.type==="agent"||n==="agent_connector"}}),t.register({id:"credit_balance",label:"Credit Balance Counter",description:"Depleting credit balance display with purchase/upgrade CTA.",surfaceType:"in_page",component:hd,accepts:e=>e.surface.type==="in_page"&&(e.surface.template==="credit_balance_counter"||e.surface.template==="credit_balance")});}lS(bg);var yg=createContext({sdk:null,isReady:false,error:"",setContext:()=>{}});function ai(){return useContext(yg)}var qB=[];function _9({options:t,bootstrapPlacements:e,domCapture:n,children:r}){let i=e??qB,[s,a]=useState(null),[o,l]=useState(false),[b,p]=useState(""),[v,P]=useState(Nr),[S,y]=useState(0),T=useRef(null),E=useRef(null);useEffect(()=>{if(Fg()){T.current=t,E.current=i;return}T.current&&T.current!==t&&console.warn("[RevTurbine] RevTurbineProvider options prop identity changed. Memoize options to avoid unnecessary SDK re-initialization."),E.current&&E.current!==i&&console.warn("[RevTurbine] RevTurbineProvider bootstrapPlacements identity changed. Memoize bootstrap arrays to avoid repeated preloads."),T.current=t,E.current=i;},[t,i]),useEffect(()=>!s||!n||typeof document>"u"?void 0:Ah(document,(R,C)=>{s.capture(R,C).catch(()=>{});},typeof n=="object"?n:{}),[s,n]),useEffect(()=>{let O=true;async function R(){let C;try{C=Jc(t);let D=t.user;D&&typeof D=="object"&&D.id&&C.identify(D.id,D);let Me=hl(t.localRuntime)?.theme,L=Me&&typeof Me=="object"?Me:void 0;if(t.fetchThemeOverride){let Ae=C,Oe=await gl({tenantId:t.tenantId??"local",endpoint:t.endpoint??"https://api.revturbine.local",apiKey:t.apiKey??"local-only",base:L,onOverride:lt=>{Ae.setApiBranding(lt&&Object.keys(lt).length>0?{theme:lt}:void 0);}},lt=>{O&&P(lt);});O&&P(Oe);}else O&&P(Bs(L));let J=C.getUserContext().user_id,ge=[];for(let Ae of i){let Oe=await C.registerPlacement(Ae.placement),lt=Ae.userId||J;lt&&ge.push({placementId:Oe,userId:lt,contextMode:Ae.contextMode,overrides:Ae.overrides,traits:Ae.traits,ttlMs:Ae.ttlMs});}if(ge.length>0&&await C.bootstrapPlacementDecisions(ge),!O)return;a(C),l(!0);}catch(D){if(!O)return;console.error("[RevTurbine] SDK provider initialization failed:",D);let ae=D instanceof Error?D.message:String(D);C?.reportSdkError("provider_init_failed",ae),p(`Failed to initialize RevTurbine SDK provider: ${ae}`),l(false);}}return R(),()=>{O=false;}},[t,i]);let A=useCallback(O=>{s&&(s.setUserContext(O),y(R=>R+1));},[s]),k=useMemo(()=>({sdk:s,isReady:o,error:b,setContext:A}),[s,o,b,A,S]);return jsx(yg.Provider,{value:k,children:jsx(ag,{theme:v,children:r})})}function Sm({placement:t,surfaceSlot:e,userId:n,contextMode:r="auto",overrides:i,traits:s,ttlMs:a,autoLoad:o=true,autoTrackImpression:l,placementExposure:b}){let{sdk:p,isReady:v}=ai(),[,P]=useState(0),S=useRef(null),y=useRef(null),T=n||(p?p.getUserContext().user_id:""),E=useMemo(()=>JSON.stringify({placement:t??null,surfaceSlot:e??null}),[t,e]);useEffect(()=>{if(!p){S.current=null;return}let C=new _l(p,{placement:t??void 0,surfaceSlot:e??void 0,userId:T||void 0,contextMode:r,overrides:i,traits:s,ttlMs:a,autoTrackImpression:l,placementExposure:b});S.current=C,P(ae=>ae+1);let D=C.onChange(()=>{P(ae=>ae+1);});return ()=>{D(),S.current=null;}},[p,E]),useEffect(()=>{S.current;},[T,r,i,s,a,p]);let A=useCallback(async()=>{let C=S.current;!C||!v||!T||await C.load();},[v,T]);useEffect(()=>{o&&A();},[o,A]);let k=useCallback(C=>{y.current?.(),y.current=null,C&&(S.current?.markRendered(),y.current=Na.observe(C,{},D=>{S.current?.markVisible(D);}));},[]);useEffect(()=>()=>{y.current?.(),y.current=null;},[]);let O=S.current,R=O?.state;return {isLoading:R?.isLoading??false,error:R?.error??"",placementId:R?.placementId??"",visible:R?.visible??false,decision:R?.decision??null,content:R?.content??null,refresh:async()=>{await O?.refresh();},dismiss:async(C=1440*60*1e3)=>{await O?.dismiss(C);},snooze:async(C=3600)=>{await O?.snooze(C);},remindMeLater:async(C=3600)=>{await O?.remindMeLater(C);},ctaClick:async C=>{await O?.ctaClick(C);},ctaComplete:async C=>{await O?.ctaComplete(C);},exposureRef:k,exposureBasis:R?.exposureBasis??null}}function NB({placement:t,userId:e,contextMode:n,overrides:r,traits:i,ttlMs:s,autoLoad:a,fallback:o=null,children:l}){let b=Sm({placement:t,userId:e,contextMode:n,overrides:r,traits:i,ttlMs:s,autoLoad:a});return b.visible?jsx(Fragment,{children:l(b)}):jsx(Fragment,{children:o})}function Tm({placement:t,personalization:e={},registry:n,ctaResolvers:r,onCtaClick:i,onSecondaryCtaClick:s,onDismiss:a,onRemindLater:o,onImpression:l,exposureRef:b,visible:p=true,className:v,style:P,fallback:S=null}){let y=n??Vu(),T=r??Ma(),E=useRef(false),A=useMemo(()=>y.resolve(t),[y,t]),k=useMemo(()=>fl(t.content,e),[t.content,e]),O=useMemo(()=>Bu(t.cta_path??t.ui_path??{}),[t.cta_path,t.ui_path]),R=useMemo(()=>Uu(t.promotion),[t.promotion]),C=useCallback(()=>{Mu(O,{placement:t,kind:"primary"},T,i);},[O,t,T,i]),D=useCallback(()=>{Mu(O,{placement:t,kind:"secondary"},T,s);},[O,t,T,s]),ae=useCallback(()=>{a?.(t.output_id);},[a,t.output_id]),Me=useCallback(()=>{o?.(t.output_id);},[o,t.output_id]);if(useEffect(()=>{p&&A&&!E.current&&(E.current=true,l?.(t.output_id));},[p,A,l,t.output_id]),!A)return jsx(Fragment,{children:S});let L=A.component,J=A.defaultProps?.content,ge=J?{...J,...k}:k,Ae={placement:t,content:ge,uiPath:O,promotion:R,onCtaClick:C,onSecondaryCtaClick:D,onDismiss:ae,...o?{onRemindLater:Me}:{},...b?{exposureRef:b}:{},visible:p,className:v,style:P};return jsx(L,{...Ae})}Tm.displayName="PlacementRenderer";function xg(t){if(!t||typeof t.getTargeting!="function")return {};try{let n=t.getTargeting()?.traits;if(!n||typeof n!="object"||Array.isArray(n))return {};let r={};for(let[i,s]of Object.entries(n))typeof s=="string"||typeof s=="number"?r[i]=s:typeof s=="boolean"&&(r[i]=s?"true":"false");return r}catch{return {}}}function Sg(t,e){let n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return false;for(let i of n)if(t[i]!==e[i])return false;return true}function xd({userId:t,personalization:e,refreshKey:n}){let{sdk:r,isReady:i}=ai(),s=t||(r?r.getUserContext().user_id:void 0),[a,o]=useState({});return useEffect(()=>{let l=false;async function b(){if(!r||!i){if(!l){let p={...xg(r),...e??{}};o(v=>Sg(v,p)?v:p);}return}try{let p=await r.providerRegistry.resolveAll();if(l)return;let v=to({userId:s,providers:p,base:e}),P={...xg(r),...v};o(S=>Sg(S,P)?S:P);}catch{if(!l){let p={...xg(r),...e??{}};o(v=>Sg(v,p)?v:p);}}}return b(),()=>{l=true;}},[r,i,s,e,n]),useMemo(()=>a,[a])}function Ms(t){let{surfaceSlot:e,personalization:n,registry:r,onCtaClick:i,className:s,style:a,...o}=t,l=Sm({...o,surfaceSlot:e}),b=xd({personalization:n,refreshKey:l.decision?.requestId}),p=useCallback(y=>{l.ctaClick(y.type),i?.(y);},[l.ctaClick,i]),v=useCallback(()=>{l.dismiss();},[l.dismiss]),P=useMemo(()=>!l.decision||!l.visible?null:l.decision.output?l.decision.output:{output_id:l.placementId,category:"dynamic",surface:{type:"in_page"},content:l.content?{header:l.content.header,body:l.content.body,cta_label:l.content.cta_label}:{},cta_path:{},ui_path:{},rule_id:"",decision_id:l.decision.requestId,config_version:"",present_upsell:false},[l.decision,l.visible,l.placementId,l.content]),S=useMemo(()=>!P||!l.visible?null:jsx(Tm,{placement:P,personalization:b,registry:r,onCtaClick:p,onDismiss:v,exposureRef:l.exposureRef,visible:l.visible,className:s,style:a}),[P,l.visible,b,r,p,v,l.exposureRef,s,a]);return {...l,element:S}}function Cm({id:t,name:e,category:n,surfaceTemplateIds:r,metadata:i,fallback:s=null,...a}){let o=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:r,metadata:{...i,...n?{surface_slot_category:n}:void 0}}),[t,e,n,r,i]),{element:l,visible:b,isLoading:p}=Ms({...a,autoLoad:true,surfaceSlot:o});return p?null:!b||!l?jsx(Fragment,{children:s}):jsx(Fragment,{children:l})}Cm.displayName="SurfaceSlotComponent";function aI({id:t,name:e,surfaceTemplateIds:n=Qc,metadata:r,fallback:i=null,...s}){let a=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:n,metadata:{...r,surface_slot_category:"fixed"}}),[t,e,n,r]),{element:o,visible:l}=Ms({...s,autoLoad:true,surfaceSlot:a});return l&&o?jsx(Fragment,{children:o}):jsx(Fragment,{children:i})}aI.displayName="FixedSurfaceSlot";function Rm({handle:t,context:e,autoCheck:n=true,autoGate:r=false,gatePlacementRequest:i}){let{sdk:s,isReady:a}=ai(),[,o]=useState(0),l=useRef(null);useEffect(()=>{if(!s){l.current=null;return}let v=new bl(s,{handle:t,context:e,autoGate:r,gatePlacementRequest:i});l.current=v;let P=v.onChange(()=>{o(S=>S+1);});return ()=>{P(),l.current=null;}},[s,t]);let b=useCallback(async()=>{await l.current?.check();},[]);useEffect(()=>{n&&a&&l.current&&l.current.check();},[n,a]);let p=l.current?.state;return {isLoading:p?.isLoading??false,error:p?.error??null,result:p?.result??null,allowed:p?.allowed??false,limited:p?.limited??false,denied:p?.denied??false,gatedPlacement:p?.gatedPlacement??null,recheck:b}}function lI(){let{sdk:t,isReady:e}=ai(),[n,r]=useState(0),i=useCallback(()=>{r(a=>a+1);},[]);return useEffect(()=>{e&&i();},[e,i]),{usage:useMemo(()=>!t||!e?{}:t.getUsage(),[t,e,n]),refresh:i}}function aU(t,e){let n=[];return t&&n.push({entitlement:t}),e&&n.push(...Array.isArray(e)?e:[e]),n}function Pg({id:t,name:e,can:n,check:r,children:i,deniedFallback:s=null,limitedFallback:a,surfaceTemplateIds:o,metadata:l,onDenied:b,...p}){let v=aU(n,r),P=v.find(J=>"entitlement"in J),S=P?.entitlement??"",{result:y,isLoading:T}=Rm({handle:S,context:P?.context,autoCheck:!!S,autoGate:true}),E=v.filter(J=>"usage"in J),{usage:A}=lI(),k=E.some(J=>{let ge=A[J.usage];return !ge||ge.limit==null||ge.limit===0?false:ge.current/ge.limit*100>=J.threshold}),R=!!S&&!!y&&(y.status==="denied"||y.allowed===false)||k,C=!!S&&y?.status==="limited",D=Lm.useRef(b);D.current=b,Lm.useEffect(()=>{R&&y&&D.current?.(y);},[R,y]);let ae=useMemo(()=>({id:t,name:e||t,surfaceTemplateIds:o??ed,metadata:{...l,surface_slot_category:"gated",entitlement_handle:S??null}}),[t,e,o,l,S]),{element:Me,visible:L}=Ms({...p,autoLoad:R,surfaceSlot:ae});return T&&S?null:R?L&&Me?jsx(Fragment,{children:Me}):jsx(Fragment,{children:s}):C&&a!==void 0?jsx(Fragment,{children:a}):jsx(Fragment,{children:i})}Pg.displayName="AccessGateSurfaceSlot";var pI=Lm.forwardRef(function({id:e,name:n,trigger:r="on_mount",intervalMs:i=6e4,surfaceTemplateIds:s,metadata:a,onPresented:o,onDismissed:l,...b},p){let v=r==="on_mount"||r==="on_interval",P=useMemo(()=>({id:e,name:n||e,surfaceTemplateIds:s??td,metadata:{...a,surface_slot_category:"triggered",trigger_type:r}}),[e,n,s,a,r]),{element:S,visible:y,decision:T,refresh:E,dismiss:A}=Ms({...b,autoLoad:v,surfaceSlot:P}),k=useCallback(()=>{E();},[E]);Lm.useImperativeHandle(p,()=>({triggerEvent:k,refresh:E}),[k,E]),useEffect(()=>{if(r!=="on_interval")return;let ae=setInterval(()=>E(),i);return ()=>clearInterval(ae)},[r,i,E]);let O=useRef(false),R=useRef(o);R.current=o,useEffect(()=>{y&&T?.output&&!O.current&&(O.current=true,R.current?.(T.output)),y||(O.current=false);},[y,T]);let C=useRef(l);C.current=l;useCallback(()=>{A(),C.current?.();},[A]);return !y||!S?null:jsx(Fragment,{children:S})});pI.displayName="MessageSurfaceSlot";function gI({content:t,onCtaClick:e,onSecondaryCtaClick:n,onDismiss:r,visible:i,className:s,style:a,modalType:o,layout:l,accentColor:b,accentBg:p,dialogWidth:v,dialogHeight:P,badge:S,sideContent:y,sidePanelWidth:T=420,ctaLabel:E,secondaryCtaLabel:A,children:k}){let O=Tn(),R=useRef(null),C=o??t.style??"optional",D=l??"centered",[ae,Me]=useState(false),L=useRef(i);useEffect(()=>{i&&!L.current&&Me(false),L.current=i;},[i]);let J=useCallback(()=>{Me(true),r();},[r]),ge=useCallback(dn=>{C==="optional"&&dn.target===dn.currentTarget&&J();},[C,J]),Ae=useCallback(dn=>{dn.key==="Escape"&&C==="optional"&&J();},[C,J]);useEffect(()=>{if(i)return document.addEventListener("keydown",Ae),R.current?.focus(),()=>document.removeEventListener("keydown",Ae)},[i,Ae]);let Oe=b??O.colors.primary,lt=p??O.colors.secondary,Je=useMemo(()=>{let{colors:dn,typography:Jt,shape:Ot,shadows:Y}=O,X=D==="two_column",je=X?"1024px":"480px",Zn=v!=null?typeof v=="number"?`${v}px`:v:je,Gr=X?P!=null?typeof P=="number"?`${P}px`:P:"600px":void 0;return {overlay:{position:"fixed",inset:0,display:"flex",alignItems:"center",justifyContent:"center",zIndex:9999,backgroundColor:dn.overlay,fontFamily:Jt.fontFamily},dialog:{position:"relative",maxWidth:Zn,width:X?Zn:"90%",height:Gr,backgroundColor:dn.background,borderRadius:Ot.borderRadiusLarge,boxShadow:Y.large,padding:X?0:"32px",boxSizing:"border-box",display:X?"flex":void 0,overflow:X?"hidden":void 0},leftColumn:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",padding:"32px",gap:"24px"},sidePanel:{width:T,flexShrink:0,position:"relative",overflow:"hidden",backgroundColor:dn.surface},close:{position:"absolute",top:"12px",right:"12px",background:X?"rgba(255,255,255,0.8)":"transparent",border:"none",fontSize:"20px",color:dn.textMuted,cursor:"pointer",padding:"4px 8px",lineHeight:1,borderRadius:X?Ot.borderRadiusSmall:void 0,zIndex:1},image:{width:"100%",maxHeight:"200px",objectFit:"cover",marginBottom:"16px",borderRadius:Ot.borderRadius},header:{fontSize:Jt.fontSizeHeader,fontWeight:700,color:dn.text,marginBottom:"8px",lineHeight:1.3},body:{fontSize:"15px",color:dn.textSecondary,lineHeight:1.6,marginBottom:"24px"},primaryBtn:{padding:"10px 24px",backgroundColor:Oe,color:dn.primaryText,border:"none",borderRadius:Ot.borderRadius,fontWeight:600,fontSize:Jt.fontSize,cursor:"pointer"},secondaryBtn:{padding:"10px 24px",backgroundColor:"transparent",color:dn.textSecondary,border:`1px solid ${dn.surfaceBorder}`,borderRadius:Ot.borderRadius,fontWeight:500,fontSize:Jt.fontSize,cursor:"pointer"}}},[O,D,v,P,T,Oe]);if(!i||ae)return null;let Xe=E??t.cta_label,zt=A??t.secondary_cta_label,At=jsxs("div",{style:{display:"flex",gap:"12px",alignItems:"center"},children:[Xe&&jsx("button",{type:"button",style:Je.primaryBtn,onClick:e,children:Xe}),zt&&n&&jsx("button",{type:"button",style:Je.secondaryBtn,onClick:n,children:zt})]});return D==="two_column"?jsx("div",{style:Je.overlay,onClick:ge,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:R,className:s,style:{...Je.dialog,...a},tabIndex:-1,children:[jsxs("div",{style:Je.leftColumn,children:[S,t.header&&jsx("div",{style:Je.header,children:t.header}),k??(t.body&&jsx("div",{style:Je.body,children:t.body})),At]}),jsx("div",{style:Je.sidePanel,children:y??(t.image_url?jsx("img",{src:t.image_url,alt:"",style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"cover"}}):jsx("div",{style:{position:"absolute",inset:0,background:`linear-gradient(135deg, ${lt} 0%, ${Oe}44 100%)`}}))}),C==="optional"&&jsx("button",{type:"button",style:Je.close,onClick:J,"aria-label":"Close",children:"\xD7"})]})}):jsx("div",{style:Je.overlay,onClick:ge,role:"dialog","aria-modal":"true","aria-label":typeof t.header=="string"?t.header:"Placement","data-rt-placement":"modal",children:jsxs("div",{ref:R,className:s,style:{...Je.dialog,...a},tabIndex:-1,children:[C==="optional"&&jsx("button",{type:"button",style:Je.close,onClick:J,"aria-label":"Close",children:"\xD7"}),S,t.image_url&&jsx("img",{src:t.image_url,alt:"",style:Je.image}),t.header&&jsx("div",{style:Je.header,children:t.header}),k??(t.body&&jsx("div",{style:Je.body,children:t.body})),jsxs("div",{style:{display:"flex",gap:"12px",justifyContent:"flex-end"},children:[zt&&n&&jsx("button",{type:"button",style:Je.secondaryBtn,onClick:n,children:zt}),Xe&&jsx("button",{type:"button",style:Je.primaryBtn,onClick:e,children:Xe})]})]})})}gI.displayName="ModalFrame";function bI({content:t,onCtaClick:e,onDismiss:n,visible:r,className:i,style:s,position:a,variant:o,accentColor:l,accentTextColor:b,dismissible:p,ctaLabel:v,ctaVariant:P,icon:S,children:y}){let T=Tn(),[E,A]=useState(false),[k,O]=useState(r);r&&!k&&A(false),r!==k&&O(r);let R=a??t.position??"top",C=p??t.dismissible!==false,D=o??"default",ae=P??"button",Me=useCallback(()=>{A(true),n();},[n]),L=useMemo(()=>{let{colors:ge,typography:Ae,shape:Oe}=T,lt,Je;switch(D){case "info":lt=l??ge.surface,Je=b??ge.accent;break;case "upsell":lt=l??ge.secondary,Je=b??ge.accent;break;case "warning":lt=l??"#FEF3C7",Je=b??ge.warning;break;default:lt=l??ge.primary,Je=b??ge.primaryText;}return {banner:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 24px",lineHeight:"1.5",zIndex:9990,width:"100%",boxSizing:"border-box",backgroundColor:lt,color:Je,fontFamily:Ae.fontFamily,fontSize:Ae.fontSize,position:"sticky",...R==="bottom"?{bottom:0}:{top:0}},header:{fontWeight:600,fontSize:"15px"},body:{opacity:.9},ctaButton:{padding:"6px 16px",backgroundColor:Je,color:lt,border:"none",borderRadius:Oe.borderRadiusSmall,fontWeight:600,fontSize:Ae.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap"},ctaLink:{padding:0,background:"none",border:"none",color:Je,fontWeight:500,fontSize:Ae.fontSizeSmall,cursor:"pointer",whiteSpace:"nowrap",textDecoration:"none"},dismiss:{padding:"4px 8px",background:"transparent",border:"none",color:Je,fontSize:"18px",cursor:"pointer",opacity:.7,lineHeight:1}}},[T,R,D,l,b]);if(!r||E)return null;let J=v??t.cta_label;return jsxs("div",{className:i,style:{...L.banner,...s},role:"banner","data-rt-placement":"banner",children:[y??jsxs("div",{style:{display:"flex",alignItems:"center",gap:"12px",flex:1},children:[S,jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[t.header&&jsx("div",{style:L.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:L.body,children:t.body||t.message})]})]}),jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginLeft:"16px",flexShrink:0},children:[J&&jsx("button",{type:"button",style:ae==="link"?L.ctaLink:L.ctaButton,onClick:e,children:J}),C&&jsx("button",{type:"button",style:L.dismiss,onClick:Me,"aria-label":"Dismiss",children:"\xD7"})]})]})}bI.displayName="BannerFrame";function vI({content:t,onCtaClick:e,visible:n,className:r,style:i,ctaLabel:s,alignment:a,ctaVariant:o,accentColor:l,icon:b,children:p}){let v=Tn(),P=a??"left",S=o??"filled",y=useMemo(()=>{let{colors:E,typography:A,shape:k}=v,O=l??E.primary,R=P==="center",C={backgroundColor:E.surface,border:`1px solid ${E.surfaceBorder}`,borderRadius:k.borderRadius,padding:"20px",fontFamily:A.fontFamily,boxSizing:"border-box",display:R?"flex":void 0,flexDirection:R?"column":void 0,alignItems:R?"center":void 0,justifyContent:R?"center":void 0,gap:R?"16px":void 0,textAlign:R?"center":void 0},D={fontSize:"16px",fontWeight:600,color:E.text,marginBottom:R?0:"6px",lineHeight:1.4},ae={fontSize:A.fontSize,color:E.textSecondary,lineHeight:1.6,marginBottom:R?0:"16px",maxWidth:R?"400px":void 0},Me={width:"100%",maxHeight:"180px",objectFit:"cover",marginBottom:"12px",borderRadius:k.borderRadiusSmall},L={borderRadius:k.borderRadiusSmall,fontWeight:600,fontSize:A.fontSizeSmall,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"6px"},J;switch(S){case "outline":J={...L,padding:"8px 16px",backgroundColor:"transparent",color:E.text,border:`1px solid ${E.surfaceBorder}`};break;case "inline":J={...L,padding:"4px 8px",backgroundColor:O,color:E.primaryText,border:"none"};break;default:J={...L,padding:"8px 20px",backgroundColor:O,color:E.primaryText,border:"none"};}return {container:C,header:D,body:ae,image:Me,ctaButton:J}},[v,P,S,l]);if(!n)return null;let T=s??t.cta_label;return jsxs("div",{className:r,style:{...y.container,...i},"data-rt-placement":"inline-embed",children:[p??jsxs(Fragment,{children:[b,t.image_url&&!b&&jsx("img",{src:t.image_url,alt:"",style:y.image}),t.header&&jsx("div",{style:y.header,children:t.header}),(t.body||t.message)&&jsx("div",{style:y.body,children:t.body||t.message})]}),T&&jsx("button",{type:"button",style:y.ctaButton,onClick:e,children:T})]})}vI.displayName="InlineCardPlacement";function gU(t,e){return e>0?Math.min(100,Math.round(t/e*100)):0}function II(t){return t>=90?"#dc2626":t>=70?"#f59e0b":"#1e40af"}var _U={backgroundColor:"#ffffff",border:"1px solid #e2e8f0",borderRadius:"8px",padding:"16px 20px",fontFamily:"system-ui, -apple-system, sans-serif",boxSizing:"border-box"},bU={fontSize:"13px",color:"#6b7280",marginBottom:"8px",display:"flex",justifyContent:"space-between",alignItems:"baseline"},yU={width:"100%",height:"8px",backgroundColor:"#e5e7eb",borderRadius:"4px",overflow:"hidden",marginBottom:"12px"},vU={height:"100%",borderRadius:"4px",transition:"width 0.3s ease"},xU={fontSize:"24px",fontWeight:700,color:"#111827",marginBottom:"4px"},SU={fontSize:"13px",color:"#6b7280",marginBottom:"12px"},PU={padding:"6px 16px",backgroundColor:"#1e40af",color:"#ffffff",border:"none",borderRadius:"6px",fontWeight:600,fontSize:"13px",cursor:"pointer"};function IU({header:t,current:e,limit:n,pct:r}){return jsxs(Fragment,{children:[jsxs("div",{style:bU,children:[jsx("span",{children:t}),jsxs("span",{style:{fontWeight:600,color:"#111827"},children:[e," / ",n]})]}),jsx("div",{style:yU,children:jsx("div",{style:{...vU,width:`${Math.min(100,r)}%`,backgroundColor:II(r)}})})]})}function TU({header:t,current:e,limit:n}){return jsxs(Fragment,{children:[jsxs("div",{style:xU,children:[e," / ",n]}),jsx("div",{style:SU,children:t})]})}var Wi=80,Rg=8,kg=(Wi-Rg)/2,Cg=2*Math.PI*kg;function CU({header:t,current:e,limit:n,pct:r}){let i=Cg-r/100*Cg,s=II(r);return jsxs("div",{style:{display:"flex",alignItems:"center",gap:"16px",marginBottom:"12px"},children:[jsxs("svg",{width:Wi,height:Wi,style:{flexShrink:0},children:[jsx("circle",{cx:Wi/2,cy:Wi/2,r:kg,fill:"none",stroke:"#e5e7eb",strokeWidth:Rg}),jsx("circle",{cx:Wi/2,cy:Wi/2,r:kg,fill:"none",stroke:s,strokeWidth:Rg,strokeLinecap:"round",strokeDasharray:Cg,strokeDashoffset:i,transform:`rotate(-90 ${Wi/2} ${Wi/2})`,style:{transition:"stroke-dashoffset 0.3s ease"}}),jsxs("text",{x:Wi/2,y:Wi/2+1,textAnchor:"middle",dominantBaseline:"central",fontSize:"16",fontWeight:"700",fill:"#111827",children:[r,"%"]})]}),jsxs("div",{children:[jsxs("div",{style:{fontSize:"14px",fontWeight:600,color:"#111827"},children:[e," / ",n]}),jsx("div",{style:{fontSize:"13px",color:"#6b7280"},children:t})]})]})}var RU=16,Eg=6.5,SI=2.5,PI=2*Math.PI*Eg;function kU(t){return t<.1?{arc:"#DC2626",track:"#FEE2E2"}:t<.33?{arc:"#CA8A04",track:"#FEF9C3"}:{arc:"#2563EB",track:"#E5E7EB"}}function TI({ratio:t,size:e,arcColor:n,trackColor:r}){let i=e??RU,s=kU(t),a=n??s.arc,o=r??s.track,l=t*PI;return jsxs("svg",{viewBox:"0 0 16 16",style:{width:i,height:i,transform:"rotate(-90deg)",flexShrink:0},children:[jsx("circle",{cx:"8",cy:"8",r:Eg,fill:"none",stroke:o,strokeWidth:SI}),jsx("circle",{cx:"8",cy:"8",r:Eg,fill:"none",stroke:a,strokeWidth:SI,strokeDasharray:`${l} ${PI}`,strokeLinecap:"round"})]})}function CI({content:t,onCtaClick:e,visible:n,className:r,style:i,displayStyle:s,size:a,usageCurrent:o,usageLimit:l,showAtPercent:b,ctaLabel:p,ctaVariant:v,accentColor:P,children:S}){let y=s??t.display_style??"progress_bar",T=a??"standard",E=v??"button",A=o??(typeof t.usage_current=="number"?t.usage_current:0),k=l??(typeof t.usage_limit=="number"?t.usage_limit:100),O=typeof t.usage_percent=="number"?t.usage_percent:gU(A,k),R=k>0?Math.max(0,Math.min(1,A/k)):0,C=b??(typeof t.show_at=="number"?t.show_at:0),D=typeof t.header=="string"?t.header:"Usage",ae=p??t.cta_label,Me=useMemo(()=>T==="compact"?{display:"flex",alignItems:"center",gap:"12px",...i}:{..._U,...i},[i,T]),L=useMemo(()=>E==="link"?{marginLeft:"auto",fontSize:"13px",fontWeight:500,color:P??"#762DCC",background:"none",border:"none",padding:0,cursor:"pointer"}:PU,[E,P]);return !n||C>0&&O<C?null:T==="compact"?jsxs("div",{className:r,style:Me,"data-rt-placement":"quota-meter",children:[jsx(TI,{ratio:R}),jsxs("div",{style:{display:"flex",flexDirection:"column"},children:[t.header&&jsx("span",{style:{fontSize:13,fontWeight:500,color:"#212121",lineHeight:"18px"},children:t.header}),t.body&&jsx("span",{style:{fontSize:12,color:"#9E9E9E",lineHeight:"16px"},children:t.body})]}),S,ae&&jsx("button",{type:"button",style:L,onClick:e,children:ae})]}):jsxs("div",{className:r,style:Me,"data-rt-placement":"quota-meter",children:[y==="numeric_counter"?jsx(TU,{header:D,current:A,limit:k}):y==="circular_gauge"?jsx(CU,{header:D,current:A,limit:k,pct:O}):jsx(IU,{header:D,current:A,limit:k,pct:O}),S,ae&&jsx("button",{type:"button",style:L,onClick:e,children:ae})]})}CI.displayName="QuotaMeterFrame";function Pd(t,e){let n=xd({userId:e.userId,personalization:e.personalization,refreshKey:e.personalizationRefreshKey});return useMemo(()=>fl(t,n),[t,n])}function AJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Wa,{...r,content:i})}function OJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ds,{...r,content:i})}function jJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ka,{...r,content:i})}function FJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx(Ga,{...r,content:i})}function LJ({userId:t,personalization:e,personalizationRefreshKey:n,...r}){let i=Pd(r.content,{userId:t,personalization:e,personalizationRefreshKey:n});return jsx($a,{...r,content:i})}function kI({targeting:t,title:e="User Profile",className:n,style:r}){let i=Tn().colors,s=Object.entries(t.usage??{}).sort(([o],[l])=>o.localeCompare(l)),a=Object.entries(t.traits??{}).sort(([o],[l])=>o.localeCompare(l));return jsxs("section",{className:n,style:{border:`1px solid ${i.surfaceBorder}`,borderRadius:8,padding:10,background:i.surface,color:i.text,...r},"data-rt-inspector":"user-profile",children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:e}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["userId: ",jsx("code",{children:t.userId})]}),jsxs("div",{children:["plan: ",jsx("strong",{children:t.plan??"n/a"})]}),jsxs("div",{children:["matched segments: ",t.segmentIds.length>0?t.segmentIds.join(", "):"none"]})]}),s.length>0&&jsxs("details",{style:{marginTop:8},children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Usage (",s.length,")"]}),jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:s.map(([o,l])=>jsxs("li",{children:[o,": ",String(l)]},o))})]}),a.length>0&&jsxs("details",{style:{marginTop:8},children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Traits (",a.length,")"]}),jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:a.map(([o,l])=>jsxs("li",{children:[o,": ",JSON.stringify(l)]},o))})]})]})}function AI(t){let e=new Map;for(let n of t){let r=n.planScopes.length>0?n.planScopes.join(" | "):"all plans",i=e.get(r)??[];i.push(n),e.set(r,i);}return Array.from(e.entries()).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>({planScope:n,rules:r}))}function GJ({placement:t,surfaceSlot:e,userId:n,contextMode:r="auto",overrides:i,traits:s,ttlMs:a,autoLoad:o=true,className:l,style:b,showRawJson:p=false}){let{sdk:v,isReady:P}=ai(),S=Tn(),y=S.colors,T=(Y,X)=>`color-mix(in srgb, ${Y} ${X}%, ${y.background})`,[E,A]=useState(""),[k,O]=useState(null),[R,C]=useState(false),[D,ae]=useState(""),Me=useRef(0),L=useRef(""),J=n||(v?v.getUserContext().user_id:""),ge=useMemo(()=>JSON.stringify(e??t),[e,t]);useEffect(()=>{L.current="",A(""),O(null),ae("");},[ge]);let Ae=useCallback(async()=>{if(!v||!P||!J)return;let Y=Me.current+1;Me.current=Y,C(true),ae("");try{let X=E;if(!X||L.current!==ge){if(e)X=await v.registerSurfaceSlot({id:e.id,name:e.name??e.id,surfaceTemplateIds:e.surfaceTemplateIds});else if(t)X=await v.registerPlacement(t);else throw new Error("Either surfaceSlot or placement must be provided.");if(Y!==Me.current)return;L.current=ge,A(X);}let je=await v.explainPlacementDecision({placementId:X,userId:J,contextMode:r,overrides:i,traits:s,ttlMs:a});if(Y!==Me.current)return;O(je);}catch{Y===Me.current&&ae("Failed to load placement decision explanation.");}finally{Y===Me.current&&C(false);}},[v,P,J,E,t,e,ge,r,i,s,a]);useEffect(()=>{o&&Ae();},[o,Ae]);let Oe=k?.segments.filter(Y=>Y.matched)??[],lt=k?.segments.filter(Y=>!Y.matched)??[],Je=k?.entitlementRules.filter(Y=>Y.matched)??[],Xe=k?.entitlementRules.filter(Y=>!Y.matched)??[],zt=k?.eligiblePayloads??[],At=zt.find(Y=>Y.selected),dn=zt.filter(Y=>!Y.selected),Jt=AI(Je),Ot=AI(Xe);return jsxs("section",{className:l,style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:10,padding:14,background:y.background,fontFamily:S.typography.fontFamily,color:y.text,...b},"data-rt-inspector":"placement-decision",children:[jsxs("header",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:12},children:[jsxs("div",{children:[jsx("h3",{style:{margin:0,fontSize:16},children:"Placement Decision Inspector"}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:2},children:[e?`Slot: ${e.id}`:t?`Placement: ${t.name}`:"(no target)"," | User: ",J||"(missing)"]})]}),jsx("button",{type:"button",onClick:()=>{Ae();},disabled:R||!J,children:R?"Refreshing...":"Refresh"})]}),!J&&jsx("p",{style:{marginTop:12,color:y.warning},children:"No userId is available. Provide `userId` or set `user.id` in RevTurbineProvider options."}),D&&jsx("p",{style:{marginTop:12,color:y.danger},children:D}),!k&&!D&&J&&jsx("p",{style:{marginTop:12,color:y.textMuted},children:R?"Loading explanation...":"No explanation loaded yet."}),k&&jsxs(Fragment,{children:[jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Decision Summary"}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["visible: ",jsx("strong",{children:String(k.decision.visible)})]}),jsxs("div",{children:["source: ",jsx("strong",{children:k.decision.decisionSource})]}),jsxs("div",{children:["placementId: ",jsx("code",{children:k.decision.placementId})]}),jsxs("div",{children:["ruleId: ",jsx("code",{children:k.placementRules.ruleId??"n/a"})]}),jsxs("div",{children:["decisionId: ",jsx("code",{children:k.placementRules.decisionId??"n/a"})]}),jsxs("div",{children:["suppression: ",jsx("code",{children:k.placementRules.suppressionReason??"none"})]}),jsxs("div",{children:["reasonCodes: ",k.placementRules.reasonCodes.length>0?k.placementRules.reasonCodes.join(", "):"none"]})]})]}),jsx("section",{style:{marginTop:14},children:jsx(kI,{targeting:k.targeting,title:"User Context"})}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Segments"}),jsxs("div",{style:{fontSize:13,color:y.textSecondary,marginBottom:6},children:["matched IDs: ",k.targeting.segmentIds.length>0?k.targeting.segmentIds.join(", "):"none"]}),jsxs("div",{style:{display:"grid",gap:8},children:[Oe.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:T(y.success,8)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.segmentName??Y.segmentId})," (",Y.segmentId,")"," ","\u2192 matched"]}),Y.predicates.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:Y.predicates.map((X,je)=>jsxs("li",{children:[X.field," ",X.operator," ",JSON.stringify(X.expected)," ","| actual: ",JSON.stringify(X.actual)," ","| ",X.matched?"pass":"fail"]},`${Y.segmentId}-${X.field}-${je}`))})]},Y.segmentId)),lt.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Unmatched segments (",lt.length,")"]}),jsx("div",{style:{display:"grid",gap:8,marginTop:8},children:lt.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:y.surface},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.segmentName??Y.segmentId})," (",Y.segmentId,")"," ","\u2192 not matched"]}),Y.predicates.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:Y.predicates.map((X,je)=>jsxs("li",{children:[X.field," ",X.operator," ",JSON.stringify(X.expected)," ","| actual: ",JSON.stringify(X.actual)," ","| ",X.matched?"pass":"fail"]},`${Y.segmentId}-${X.field}-${je}`))})]},Y.segmentId))})]})]})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Entitlement Rules"}),k.entitlementRules.length===0?jsx("div",{style:{fontSize:13,color:y.textMuted},children:"No entitlement rules found in exported config."}):jsxs("div",{style:{display:"grid",gap:8},children:[Jt.map(Y=>jsxs("section",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8},children:[jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginBottom:6},children:[jsx("strong",{children:"Plan scope:"})," ",Y.planScope]}),jsx("div",{style:{display:"grid",gap:6},children:Y.rules.map(X=>jsxs("div",{style:{border:`1px solid ${T(y.success,35)}`,borderRadius:8,padding:8,background:T(y.success,8)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:X.entitlementHandle??X.entitlementId??X.ruleId}),X.kind?jsx("span",{style:{color:y.textMuted},children:` (${X.kind})`}):""," ","\u2192"," ",jsx("span",{style:{color:X.outcome==="denied"?y.danger:y.success},children:X.outcomeDescription??X.outcome})]}),X.reason&&jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:2},children:["reason: ",X.reason]})]},X.ruleId))})]},`matched-${Y.planScope}`)),Xe.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13,color:y.textMuted},children:[Xe.length," rule",Xe.length===1?"":"s"," for other plans"]}),jsx("div",{style:{display:"grid",gap:6,marginTop:8},children:Ot.map(Y=>jsxs("section",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8},children:[jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginBottom:4},children:[jsx("strong",{children:"Plan scope:"})," ",Y.planScope]}),jsx("ul",{style:{margin:0,paddingLeft:18,fontSize:12,color:y.textMuted},children:Y.rules.map(X=>jsxs("li",{children:[X.entitlementHandle??X.entitlementId??X.ruleId,X.kind?` (${X.kind})`:""," ","\u2014 ",X.matchesPlan?X.matchesSegment?"skipped":"segment mismatch":"plan mismatch"]},X.ruleId))})]},`unmatched-${Y.planScope}`))})]})]})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Other Rule Signals"}),jsxs("div",{style:{fontSize:13,lineHeight:1.5},children:[jsxs("div",{children:["category: ",k.placementRules.category??"n/a"]}),jsxs("div",{children:["cap policies: ",k.placementRules.capPolicies.length]})]}),k.placementRules.capPolicies.length>0&&jsx("ul",{style:{margin:"6px 0 0 18px",fontSize:12},children:k.placementRules.capPolicies.map((Y,X)=>jsxs("li",{children:["max_per_period: ",Y.count," / ",Y.period,typeof Y.cooldownMs=="number"?` | cooldownMs: ${Y.cooldownMs}`:""]},`${Y.period}-${Y.count}-${X}`))})]}),jsxs("section",{style:{marginTop:14},children:[jsx("h4",{style:{margin:"0 0 8px 0",fontSize:14},children:"Eligible Placement Payloads"}),zt.length===0?jsx("div",{style:{fontSize:13,color:y.textMuted},children:"No payload records found for this placement in exported config."}):jsxs(Fragment,{children:[jsxs("div",{style:{fontSize:13,color:y.textSecondary,marginBottom:8},children:["selected payload: ",At?At.payloadId:"none"]}),jsxs("div",{style:{display:"grid",gap:8},children:[At&&jsxs("div",{style:{border:`2px solid ${y.success}`,borderRadius:8,padding:8,background:T(y.success,16)},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:At.payloadId})," ","\u2192 ",At.eligible?"eligible":"not eligible"," (selected)"]}),jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:4},children:["status: ",At.status," | plan scopes: ",At.planScopes.length>0?At.planScopes.join(", "):"all plans"," | segment chips: ",At.segmentChips.length>0?At.segmentChips.join(", "):"none"," | templates: ",At.surfaceTemplateIds.length>0?At.surfaceTemplateIds.join(", "):"none"]}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:4},children:["gate checks \u2192 planMatch: ",String(At.matchesPlan)," | segmentMatch: ",String(At.matchesSegment)]})]},At.payloadId),dn.length>0&&jsxs("details",{children:[jsxs("summary",{style:{cursor:"pointer",fontSize:13},children:["Unselected payloads (",dn.length,")"]}),jsx("div",{style:{display:"grid",gap:8,marginTop:8},children:dn.map(Y=>jsxs("div",{style:{border:`1px solid ${y.surfaceBorder}`,borderRadius:8,padding:8,background:Y.eligible?T(y.success,8):y.surface},children:[jsxs("div",{style:{fontSize:13},children:[jsx("strong",{children:Y.payloadId})," ","\u2192 ",Y.eligible?"eligible":"not eligible"]}),jsxs("div",{style:{fontSize:12,color:y.textSecondary,marginTop:4},children:["status: ",Y.status," | plan scopes: ",Y.planScopes.length>0?Y.planScopes.join(", "):"all plans"," | segment chips: ",Y.segmentChips.length>0?Y.segmentChips.join(", "):"none"," | templates: ",Y.surfaceTemplateIds.length>0?Y.surfaceTemplateIds.join(", "):"none"]}),jsxs("div",{style:{fontSize:12,color:y.textMuted,marginTop:4},children:["gate checks \u2192 planMatch: ",String(Y.matchesPlan)," | segmentMatch: ",String(Y.matchesSegment)]})]},Y.payloadId))})]})]})]})]}),p&&jsx("section",{style:{marginTop:14},children:jsxs("details",{children:[jsx("summary",{style:{cursor:"pointer",fontSize:13},children:"Raw Explanation JSON"}),jsx("pre",{style:{marginTop:8,background:y.cliBackground,color:y.cliText,borderRadius:8,padding:10,overflowX:"auto",fontSize:12},children:JSON.stringify(k,null,2)})]})})]})]})}var Cd=createContext({});function FI({children:t,...e}){let n=useContext(Cd),r=useMemo(()=>({area:e.area??n.area,action:e.action??n.action,purpose:e.purpose??n.purpose}),[e.area,e.action,e.purpose,n]);return jsx(Cd.Provider,{value:r,children:t})}function JJ(){return useContext(Cd)}var VU=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time","event_id","request_id","origin","playbook_version","decision_id"]),LI=false;function qU(t){if(!t)return {};let e={},n=false;for(let[r,i]of Object.entries(t)){if(VU.has(r)){n=true;continue}e[r]=i;}return n&&!LI&&typeof console<"u"&&(LI=true,console.warn("[RevTurbine] Dropped reserved property name(s) from a tracked event \u2014 these are RevTurbine canonical/provenance fields and cannot be overwritten from event data.")),e}function Yi(){let{sdk:t}=ai(),e=useContext(Cd),n=useRef(new Set);return useCallback((r,i,s)=>{if(!t)return;let a=s?.dedupeKey??(s?.once?`once:${r}`:null);if(a!==null){if(n.current.has(a))return;n.current.add(a);}let o=s?.area??e.area,l=s?.action??e.action,b=s?.purpose??e.purpose,p={...qU(i)};o!=null&&(p.area=o),l!=null&&(p.action=l),b!=null&&(p.purpose=b),t.capture(r,p,{immediate:s?.immediate}).catch(()=>{});},[t,e])}function oX({event:t,data:e,options:n,threshold:r,minVisibleMs:i,as:s="div",className:a,style:o,children:l}){let b=Yi(),p=useRef(false),v=useRef(null),P=useRef({event:t,data:e,options:n,track:b});P.current={event:t,data:e,options:n,track:b};let S=useCallback(y=>{v.current?.(),v.current=null,!(!y||p.current)&&(v.current=Na.observe(y,{threshold:r,minVisibleMs:i},()=>{if(p.current)return;p.current=true;let T=P.current;T.track(T.event,T.data,T.options);}));},[r,i]);return useEffect(()=>()=>{v.current?.(),v.current=null;},[]),Lm.createElement(s,{ref:S,className:a,style:o},l)}function mX({area:t,viewEvent:e="engagement_view",dwellEvent:n="engagement_dwell",interactionEvent:r="engagement_interaction",purpose:i,threshold:s=.5,as:a="div",className:o,style:l,children:b}){let p=Yi(),v=useRef(p);v.current=p;let P=useRef(false),S=useRef(false),y=useRef(true),T=useRef(null),E=useRef(0),A=useRef(null),k=()=>S.current&&y.current,O=useCallback(()=>{T.current!==null&&(E.current+=Date.now()-T.current,T.current=null);},[]),R=useCallback(()=>{k()&&T.current===null&&(T.current=Date.now());},[]),C=useCallback(()=>{S.current=true,R(),P.current||(P.current=true,v.current(e,{},{area:t,purpose:i}));},[e,t,i,R]),D=useCallback(()=>{O(),S.current=false;},[O]),ae=useCallback(J=>{if(A.current?.disconnect(),A.current=null,!J)return;if(typeof IntersectionObserver>"u"){C();return}let ge=new IntersectionObserver(Ae=>{for(let Oe of Ae)Oe.isIntersecting&&Oe.intersectionRatio>=s?C():D();},{threshold:s});ge.observe(J),A.current=ge;},[s,C,D]);useEffect(()=>{if(typeof document>"u")return;let J=()=>{let ge=document.visibilityState!=="hidden";y.current!==ge&&(y.current=ge,ge?R():O());};return y.current=document.visibilityState!=="hidden",document.addEventListener("visibilitychange",J),()=>document.removeEventListener("visibilitychange",J)},[O,R]),useEffect(()=>()=>{O();let J=E.current;J>0&&v.current(n,{dwell_ms:J},{area:t,purpose:i});},[O,n,t,i]);let Me=useCallback(()=>{v.current(r,{},{area:t,purpose:i});},[r,t,i]),L=Lm.createElement(a,{ref:ae,className:o,style:l,onClickCapture:Me},b);return jsx(FI,{area:t,purpose:i,children:L})}function Ag(t){if(t instanceof Error){let e=t.name.toLowerCase(),n=t.message.toLowerCase();if(e==="aborterror"||n.includes("abort"))return "aborted";if(e==="timeouterror"||n.includes("timeout")||n.includes("timed out"))return "timeout";if(n.includes("network")||n.includes("failed to fetch")||n.includes("fetch"))return "network";if(e==="validationerror"||n.includes("invalid")||n.includes("validation"))return "validation";if(n.includes("permission")||n.includes("forbidden")||n.includes("unauthorized"))return "permission"}return "unknown"}function _X(t,e,n){let r=Yi(),[i,s]=useState(false),[a,o]=useState(null),l=useRef({name:t,fn:e,options:n,track:r});return l.current={name:t,fn:e,options:n,track:r},{run:useCallback(async(...p)=>{let{name:v,fn:P,options:S,track:y}=l.current;s(true),o(null),y(`${v}_started`,{},S);try{let T=await P(...p);return y(`${v}_completed`,{},S),T}catch(T){let E=Ag(T);throw o(E),y(`${v}_failed`,{error_category:E},S),T}finally{s(false);}},[]),isRunning:i,error:a}}function PX(t,e,n,r){let{sdk:i}=ai(),s=Yi(),[a,o]=useState(false),[l,b]=useState(false),[p,v]=useState(null),[P,S]=useState(null),y=useRef({action:t,fn:e,context:n,options:r,track:s,sdk:i});return y.current={action:t,fn:e,context:n,options:r,track:s,sdk:i},{run:useCallback(async(...E)=>{let{action:A,fn:k,context:O,options:R,track:C,sdk:D}=y.current;if(!D){let ae={ran:false,entitlement:{status:"denied",allowed:false}};return b(true),ae}o(true),S(null);try{let ae=await D.gate(A,async()=>{C(`${A}_started`,{},R);try{let Me=await k(...E);return C(`${A}_completed`,{},R),Me}catch(Me){let L=Ag(Me);throw S(L),C(`${A}_failed`,{error_category:L},R),Me}},O);return b(!ae.ran),v(ae.entitlement),ae}finally{o(false);}},[]),isRunning:a,denied:l,entitlement:p,error:P}}function kX({event:t,data:e,options:n,asChild:r,as:i="span",className:s,style:a,children:o}){let l=Yi(),b=useCallback(p=>{p.defaultPrevented||l(t,e,n);},[l,t,e,n]);if(r){let p=Lm.Children.toArray(o),v=p.length===1?p[0]:null;if(!v||!Lm.isValidElement(v))return Lg("<Track asChild> requires a single React element child; rendering children unchanged."),jsx(Fragment,{children:o});let P=v,S=P.props.onClick,y=T=>{S?.(T),b(T);};return Lm.cloneElement(P,{onClick:y})}return Lm.createElement(i,{className:s,style:a,onClick:b},o)}function EX(t,e,n){let r=Yi();return {onClick:useCallback(s=>{s.defaultPrevented||r(t,e,n);},[r,t,e,n])}}function jX(t,e){let{denied:n,limited:r,result:i,isLoading:s,error:a}=Rm({handle:t,...e}),o=i!==null;return {can:o&&!n,limited:r&&!n,isLoading:s||!o&&a===null,result:i}}
2
2
  export{Pg as AccessGateSurfaceSlot,_d as AgentConnectorSlot,bI as BannerFrame,Ka as BannerSlot,jJ as BannerSurface,Hh as BrowserRuntime,cc as BrowserStorage,Wa as ButtonSlot,AJ as ButtonSurface,Pb as CONTROL_PLANE_EVENT_SOURCE,Ib as CONTROL_PLANE_SOURCE_KEY,ub as CapEnforcer,fd as CliSlot,TI as CompactCircularGauge,hd as CreditBalanceSlot,Du as CtaResolverRegistry,Fp as DEFAULT_BRANDING,Nr as DEFAULT_THEME,ep as DecisionEngine,oc as DomainProviderRegistry,mX as EngagementArea,bl as EntitlementGate,LS as FIXED_BANNER_TEMPLATE_IDS,Qc as FIXED_SURFACE_TEMPLATE_IDS,aI as FixedSurfaceSlot,Ul as FullPageSlot,ed as GATED_SURFACE_TEMPLATE_IDS,BS as GENERAL_BANNER_TEMPLATE_IDS,VS as GENERAL_MODAL_TEMPLATE_IDS,US as GENERAL_TOAST_TEMPLATE_IDS,Pg as Gate,Po as InMemoryStorage,Ds as InPageSlot,OJ as InPageSurface,vI as InlineCardPlacement,pd as InlineEmbedSlot,db as InteractionTracker,td as MESSAGE_SURFACE_TEMPLATE_IDS,pI as MessageSurfaceSlot,gI as ModalFrame,Ga as ModalSlot,FJ as ModalSurface,NB as Placement,_l as PlacementController,GJ as PlacementDecisionInspector,Tm as PlacementRenderer,Da as PlacementTypeRegistry,CI as QuotaMeterFrame,Bl as QuotaMeterSlot,xS as RECOGNIZED_UPDATE_KEYS,Cm as RTSlot,zh as RevTurbineApiError,Dh as RevTurbineCustomerSdk,_9 as RevTurbineProvider,Qu as RevTurbineServer,ag as RevTurbineThemeProvider,Hu as RuntimeMode,bb as SERVER_TRAITS_DOMAIN,Yu as SdkSession,lc as ServerUserContextProvider,Cm as Slot,Cm as SurfaceSlotComponent,FI as TelemetryScope,Cd as TelemetryScopeContext,$a as ToastSlot,LJ as ToastSurface,gd as TooltipSlot,kX as Track,oX as TrackOnView,kI as UserProfile,vo as applyValueMaps,Th as bridgeUiPathResolversIntoRegistry,OS as bucketSubject,Vp as buildControlPlaneEvent,Ag as categorizeActionError,IS as clearPersistedTheme,jS as createAnalyticsProvider,ej as createBasicExperimentProvider,w8 as createChainedPlacementRequest,C8 as createCustomEndpointRuntimeConfig,E8 as createEntitlementPlacementRequest,GC as createHydrationProviders,_2 as createLocalRuntimeConfig,FS as createPostHogAnalyticsProvider,rj as createPostHogIntegration,J2 as createRevTurbineApiClient,O8 as createSemanticEvent,T8 as createServerRuntimeConfig,k8 as createSlotPlacementRequest,yo as createStaticPlacementContentLookupProvider,ya as createStaticPlacementResolver,KC as createStaticProviders,R8 as createStrictLocalRuntimeConfig,A8 as createTreatmentInteraction,I8 as defineUiPathResolvers,kd as deriveLocalTrialStatusFromInstance,to as derivePlacementPersonalizationTokens,Um as deriveReverseTrialGrants,Mu as dispatchCtaClick,Xc as entitlementResultDenies,Zl as evaluateSegments,Ed as evaluateTrialStatus,qg as findActiveTrialInstance,Vm as findLatestStartedTrialInstance,Ma as getDefaultCtaResolverRegistry,Vu as getDefaultRegistry,H2 as initRevTurbine,Fr as isBrowser,So as isServer,gl as loadTheme,Bs as mergeTheme,Ug as normalizeConfigArtifactOrThrow,Uu as parsePromotion,Bu as parseUiPath,bg as registerBuiltinSlotTypes,Ch as registerBuiltinSnoozeResolver,XO as registerCtaResolver,JO as resetDefaultCtaResolverRegistry,dS as resetDefaultRegistry,Lp as resolveBranding,fl as resolveContent,hl as resolveLocalPlaybook,Yd as resolvePayloadForUser,sc as resolvePayloadForUserWithProvider,$s as resolvePersistentStorage,qp as resolveSessionStorage,Ih as resolveTokens,QO as unregisterCtaResolver,jX as useCan,Rm as useEntitlement,PX as useGatedAction,Sm as usePlacement,xd as usePlacementPersonalization,ai as useRevTurbine,Tn as useRevTurbineTheme,Ms as useSurfaceSlot,EX as useTelemetryProps,JJ as useTelemetryScope,Yi as useTrack,_X as useTrackedAction,lI as useUsageSnapshot};//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map