@revturbine/sdk 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/headless.d.ts +306 -502
- package/dist/headless.js +2 -2
- package/dist/headless.js.map +1 -1
- package/dist/index.d.ts +306 -502
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types/server-node/client.d.ts +1 -41
- package/dist/types/server-node/client.d.ts.map +1 -1
- package/dist/types/server-node/index.d.ts +17 -11
- package/dist/types/server-node/index.d.ts.map +1 -1
- package/dist/types/web-sdk/customer-side.d.ts +26 -0
- package/dist/types/web-sdk/customer-side.d.ts.map +1 -1
- package/dist/types/web-sdk/headless.d.ts +12 -0
- package/dist/types/web-sdk/headless.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/headless.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {z}from'zod';var kP=Object.defineProperty;var AP=(t,e,n)=>e in t?kP(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var k=(t,e,n)=>AP(t,typeof e!="symbol"?e+"":e,n);function wP(){try{return "production"}catch{return}}function jP(){try{return typeof process<"u"}catch{return false}}function Gs(){let t=wP();if(t!==void 0)return t!=="production";if(jP())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var dm="1.0.0",Zh=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],OP=["slot_configs","content_overrides"];function qP(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function DP(t,e){if(!Gs())return;let n=OP.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 UP(t,e){for(let n of Zh)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function MP(t){return t.artifact_type==="playbook"&&t.format_version===dm&&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&&Zh.every(e=>Array.isArray(t[e]))}function FP(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 Qh(t,e,n){if(t===void 0)return;if(!qP(t))throw new Error(`Invalid ${e}: expected top-level object`);DP(t,e),UP(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!==dm)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==dm)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let a=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,i=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!a)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!i)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(t.playbook_handle!==void 0&&(typeof t.playbook_handle!="string"||t.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!FP(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:o,..._}=t,T=r?t.playbook_version_id??null:o??null,P={..._,artifact_type:"playbook",format_version:dm,playbook_handle:t.playbook_handle??"default",playbook_version_id:T,tenant_id:a,environment_id:i};if(!MP(P))throw new Error(`Invalid ${e}: malformed Playbook header`);return P}function Ei(t,e,n){return Qh(t,e,n)}var sd=864e5,LP=75;function Jh(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function NP(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=LP?"running_out":"active"}function VP(t,e,n){let r=Math.max(0,e-t),a=Math.max(0,n-t),i=Math.max(0,e-n),s=Math.max(1,Math.round(r/sd)),o=Math.min(s,Math.floor(a/sd)),_=Math.max(0,Math.ceil(i/sd)),T=Math.min(100,Math.max(0,a/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:o,daysRemaining:_,daysTotal:s,progressPercent:T}}function BP(t,e){let n=Math.max(1,e),r=Math.max(0,t),a=Math.max(0,n-r),i=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:a,usageLimit:n,progressPercent:i}}function pm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:a,usageBalances:i}=t,s=Date.parse(e.started_at),o=Date.parse(r);if(Number.isNaN(s)||Number.isNaN(o)||e.status==="not_started"||o<s)return;let _=e.trial_limit_type??"time",T=0,P=false,C,R,I,E,j,ne;if(_==="usage"){let H=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),Ze=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof H!="string"||typeof Ze!="number"||Ze<1)return;let Yt=i?.[H]??0,pr=BP(Yt,Ze);T=pr.progressPercent,P=pr.isExpiredByBounds,I=pr.usageConsumed,E=pr.usageRemaining,j=pr.usageLimit,ne=H;}else {let H=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(H))return;let Ze=VP(s,H,o);T=Ze.progressPercent,P=Ze.isExpiredByBounds,C=Ze.dayNumber,R=Ze.daysRemaining;}let G=Jh(e.status,P),pe=NP(G,T),Re;e.rule_type==="reverse_trial"?Re=a:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(Re=n.plan_id);let J=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:G==="active",trial_type:J,...Re!==void 0?{plan_handle:Re}:{},state:pe,trial_limit_type:_,progress_percent:T,...C!==void 0?{day_number:C}:{},...R!==void 0?{days_remaining:R}:{},...ne!==void 0?{usage_entitlement_handle:ne}:{},...I!==void 0?{usage_consumed:I}:{},...E!==void 0?{usage_remaining:E}:{},...j!==void 0?{usage_limit:j}:{}}}function Xh(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let a,i=-1/0;for(let s of t){let o=Date.parse(s.started_at);if(Number.isNaN(o)||r<o)continue;let _=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(_=(n[s.usage_entitlement_handle]??0)>=s.usage_limit_value);else if(s.expires_at){let P=Date.parse(s.expires_at);Number.isNaN(P)||(_=r>=P);}let T=Jh(s.status,_);T!=="active"&&T!=="converted"||o>i&&(a=s,i=o);}return a}function od(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 ld(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,a=-1/0;for(let i of t){if(i.status!=="active"&&i.status!=="expired"&&i.status!=="converted")continue;let s=Date.parse(i.started_at);Number.isNaN(s)||n<s||s>a&&(r=i,a=s);}return r}function gm(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:a,usageBalances:i,basePlanHandle:s}=t,o=ld(r,a);if(!o)return {trial:void 0,reverseGrants:null};if(o.rule_type==="reverse_trial"){let P=(n??[]).find(I=>I.id===o.rule_id),C=pm({instance:o,...P!==void 0?{rule:P}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),R=P!==void 0?od(o,P):null;return {trial:C,reverseGrants:R}}let _=(e??[]).find(P=>P.id===o.rule_id);return {trial:pm({instance:o,..._!==void 0?{rule:_}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),reverseGrants:null}}function he(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function jl(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Qn(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function Sn(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 Ys(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function cd(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Ol(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 md(t){if(!he(t))return null;let e=Number(t.count),n=typeof t.period=="string"?t.period:"";return !Number.isFinite(e)||e<=0||n!=="session"&&n!=="day"&&n!=="week"&&n!=="month"&&n!=="lifetime"?null:{count:e,period:n}}function ud(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function ef(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 tf(t){let e=t,n=he(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(s=>typeof s=="string"):[];if(r.length>0)return r;let a=he(t.content)?t.content:{};return Array.isArray(a.__target_plan_ids)?a.__target_plan_ids.filter(s=>typeof s=="string"):[]}function dd(t,e){let n=tf(t);if(n.length===0||!e)return true;let r=ef(e);return r.length===0?true:n.some(a=>{let i=a.toLowerCase();return r.some(s=>i===s||i.endsWith(`_${s}`)||i.includes(s))})}function pd(t,e){if(e.length===0)return null;let n=[...e].sort((a,i)=>a.tier_position!==i.tier_position?a.tier_position-i.tier_position:a.sort_order!==i.sort_order?a.sort_order-i.sort_order:a.source_id.localeCompare(i.source_id)),r=n.findIndex(a=>a.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function Ws(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function gd(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function hd(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function ii(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))he(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function hm(t){if(typeof t.plan_handle=="string"&&t.plan_handle.trim().length>0)return t.plan_handle.trim();if(typeof t.plan=="string"&&t.plan.trim().length>0)return t.plan.trim();if(he(t.plan)&&typeof t.plan.handle=="string"&&t.plan.handle.trim().length>0)return t.plan.handle.trim()}function ys(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0&&(n=e.trim()),!n)return;let r=n.toLowerCase();for(let a of t.plans){if(!he(a))continue;if((typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"")===r){let s=typeof a.name=="string"?a.name.trim():"";if(s.length>0)return s}}}function fm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function $i(t){let e=String(t||"").trim().toLowerCase();return e?e.includes("gated")||e.includes("entitlement")?0:e.includes("fixed")?1:e.includes("usage")||e.includes("credit")||e.includes("seat")||e.includes("quota")||e.includes("trial")?2:e.includes("conversion")||e.includes("expansion")||e.includes("upsell")||e.includes("retention")||e.includes("winback")||e.includes("churn")?4:99:99}function ql(t){let e=t,n=he(t.content)?t.content:{};return [Sn(e.score),Sn(e.ltv_propensity_score),Sn(n.score),Sn(n.ltv_propensity_score),Sn(n.ranking_score)].find(a=>a!==null)??0}function _m(t){let e=t,n=he(t.content)?t.content:{};return [Sn(e.priority),Sn(e.placement_priority),Sn(n.priority),Sn(n.placement_priority)].find(a=>a!==null)??0}function fd(t){let e=he(t.content)?t.content:{};return [Sn(e.usage_percent),Sn(e.trial_percent_elapsed),Sn(e.threshold_percent)].find(r=>r!==null)??ql(t)}var zP=new Set(["trial_started","trial_ended","trial_converted"]),KP=new Set(["trial_progress","trial_ending"]);function _d(t){let e=he(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&zP.has(n))return 1;if(n&&KP.has(n))return 3;let r=[Sn(e.usage_percent),Sn(e.threshold_percent)].find(a=>a!==null);return r!=null&&r>=100?2:3}function Dl(t){let e=t,n=he(t.content)?t.content:{};return [Sn(e.server_order),Sn(e.order),Sn(e.rank),Sn(e.order_index),Sn(n.server_order),Sn(n.order),Sn(n.rank),Sn(n.order_index)].find(a=>a!==null)??null}function yd(t){let e=he(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=Sn(n);if(r!==null)return String(r);let a=e.milestone_version;if(typeof a=="string"&&a.trim().length>0)return a.trim();let i=Sn(a);return i!==null?String(i):null}function vd(t){let n=(he(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(a=>typeof a=="string"?a.trim():Sn(a)).filter(a=>a!==null&&a!=="").map(a=>String(a));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=Sn(n);return r!==null?[String(r)]:[]}function Ri(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>Ri(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${Ri(r)}`).join(",")}}`}function bd(t){return he(t)?{in_trial:typeof t.in_trial=="boolean"?t.in_trial:false,...typeof t.trial_type=="string"?{trial_type:t.trial_type}:{},...typeof t.plan_handle=="string"?{plan_handle:t.plan_handle}:{},...typeof t.day_number=="number"?{day_number:t.day_number}:{},...typeof t.days_remaining=="number"?{days_remaining:t.days_remaining}:{}}:{in_trial:false}}var HP=/^[a-z0-9._]{1,100}$/,Hi={Persisted:"persisted",Transient:"transient"},si={Internal:"internal",External:"external"},$a={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},GP="readOnly";function da(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[GP]===true||(e[n]=r);}return z.object(e)}function Nr(t){let e=da(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(HP)}):e}var {Unrestricted:Jr}=$a,{Transient:Xr,Persisted:WP}=Hi,{Internal:vs,External:ki}=si;z.object({page:z.coerce.number().int().min(1).default(1).meta(Jr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Jr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki});var Mn=z.object({created_at:z.string().datetime().meta({...Jr,readOnly:true}),updated_at:z.string().datetime().meta({...Jr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki}),kn=z.object({id:z.string().min(1).meta({...Jr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki}),Fn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Jr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki});var xd=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":Xr,"x-revturbine-schema-exposure":ki}),rf=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki});var ym=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki}),af=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":ki});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vs});var Ai=z.string().min(1).max(200),hr=z.string().min(1).max(100),vm=z.string().max(500).optional(),xa=z.record(z.string(),z.unknown()).default({}),bs=z.number().int().min(10).max(100).multipleOf(10),bm=z.string().datetime().nullable().default(null),lr=z.object({environment_id:z.string().min(1).default("production").meta({...Jr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vs}),fr=z.object({playbook_version_id:z.string().nullable().default(null).meta(Jr),is_current:z.boolean().default(true).meta({...Jr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Jr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Jr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Jr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Jr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vs}),ZP=kn.merge(Mn).merge(Fn).merge(lr).extend({handle:hr.meta({...Jr,readOnly:true}),active:z.boolean().default(true).meta({...Jr,readOnly:true})});function Vr(t){return ZP.meta({id:t,"x-revturbine-schema-persistence":WP,"x-revturbine-schema-exposure":vs})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":vs});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":Xr,"x-revturbine-schema-exposure":vs});var sf=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":Xr,"x-revturbine-schema-exposure":ki}),QP=new Set(xd.options);function xm(t,e){if(!he(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=he(t.surface)?t.surface:{},a=QP.has(r.type)?r.type:"custom",i=he(t.cta_path)?t.cta_path:he(t.ui_path)?t.ui_path:{};return {output_id:n,category:typeof t.category=="string"?t.category:"unknown",surface:{...typeof r.template=="string"?{template:r.template}:{},type:a,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:he(t.content)?t.content:{},...he(t.promotion)?{promotion:t.promotion}:{},cta_path:i,ui_path:i,rule_id:typeof t.rule_id=="string"?t.rule_id:"",decision_id:typeof t.decision_id=="string"?t.decision_id:e(),config_version:typeof t.config_version=="string"?t.config_version:"unknown",present_upsell:typeof t.present_upsell=="boolean"?t.present_upsell:false}}var JP="__no_dim__";function cf(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),a=new Map;for(let i of t){let s=n(i)??JP,o=a.get(s)??[];o.push(i),a.set(s,o);}for(let i of a.values())if(!i.some(s=>r.has(s)))return false;return true}var XP=999999;function eT(t){return t==null||t==="unlimited"||t===XP}function Ul(t){return eT(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function tT(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 mf(t,e,n){return t.map(r=>{let a=r.targets!=null&&r.targets.length>0?r.targets.some(s=>tT(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),i=cf(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:a,matchesSegment:i,matched:a&&i}})}function uf(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return Ul(e.limit_value)??0;case "credits":return Ul(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return Ul(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function df(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let a of t){let i=e(a);(n===void 0||i>r)&&(n=a,r=i);}return n}function nT(t){return df(t,e=>uf(e.rule))?.rule}function Sd(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let a=mf(r,n,t.segmentDimensions);return nT(a.filter(i=>i.matched))}function rT(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 aT(t,e,n){let r=new Map;for(let a of n)typeof a.handle=="string"&&r.set(a.handle,typeof a.dimension_id=="string"?a.dimension_id:void 0);return cf(rT(t),e,a=>r.get(a))}function of(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 Ml(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:a,segmentIds:i,usageBalances:s,userUsage:o,trialGrantedEntitlementHandles:_,effectivePlanHandle:T}=t,C=(r.entitlements??[]).find(_t=>typeof _t?.unique_handle=="string"&&_t.unique_handle===e),R=typeof C?.unique_handle=="string"?C.unique_handle:e,I=typeof C?.unique_handle=="string"?C.unique_handle:void 0,E=!!(_&&_.size>0&&(_.has(e)||_.has(R)||I!==void 0&&_.has(I)));if(E&&(T===void 0||T===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let ne=String((E&&T?T:a)||"").trim().toLowerCase(),pe=(r.plans??[]).find(_t=>typeof _t.unique_handle=="string"&&_t.unique_handle.toLowerCase()===ne),Re=typeof pe?.unique_handle=="string"?pe.unique_handle:ne||void 0;if(Re===void 0)return {status:"denied",allowed:false,reason:"no_plan_identity"};let H=(r.entitlement_rules??[]).filter(_t=>!((typeof _t.entitlement_id=="string"?_t.entitlement_id:typeof _t.entitlementId=="string"?_t.entitlementId:"")!==R||!(Array.isArray(_t.targets)?_t.targets.filter(Dt=>he(Dt)&&Dt.kind==="plan"&&typeof Dt.id=="string").map(Dt=>Dt.id):Array.isArray(_t.plan_ids)?_t.plan_ids.filter(Dt=>typeof Dt=="string"):Array.isArray(_t.planIds)?_t.planIds.filter(Dt=>typeof Dt=="string"):[]).includes(Re)||!aT(_t,i,r.segments??[])));if(H.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let Ze=(()=>{let _t=(r.entitlements??[]).find(On=>On.unique_handle===R);return _t&&typeof _t.type=="string"?_t.type:void 0})(),Yt=_t=>{let On=he(_t)?_t:{},Dt={...he(On.type_fields)?On.type_fields:he(On.typeFields)?On.typeFields:{},...On};return typeof Dt.kind!="string"&&Ze&&(Dt.kind=Ze),Dt},pr=df(H,_t=>{let On=Yt(_t);return uf({kind:typeof On.kind=="string"?On.kind:"",fields:On})})??H[0],ie=Yt(pr);typeof ie.kind=="string"?ie.kind:void 0;let ln=_t=>{let On=o?.[_t];if(he(On)&&typeof On.amount=="number")return On.amount},cn=n?.used??(Number.isFinite(s[e])?s[e]:void 0)??(Number.isFinite(s[R])?s[R]:void 0)??ln(e)??ln(R)??0;return Sm(ie,cn)}function lf(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function pf(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Sm(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=Ul(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?lf(of(e>=r,t.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(n==="credits"){let r=t.allowance_value!==void 0?t.allowance_value:t.allowance,a=r===void 0?void 0:Ul(r),i=Number(t.initial_grant),s=a!==void 0&&a>=0?a:Number.isFinite(i)&&i>=0?i:void 0;return s!==void 0&&Number.isFinite(s)?lf(of(e>=s,t.enforcement,"credit_balance_exhausted"),s,e):{status:"allowed",allowed:true}}if(n==="capability_tier"){let r=typeof t.tier_name=="string"?t.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function Pd(t,e,n,r,a=80){let i=e.get(t);if(i)return i;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let o=Number(r[t]);if(o>0)return {limit:o,warningPercent:a}}return null}var iT=0;function sT(){return `core_${Date.now()}_${++iT}`}function gf(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var Td=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=sT(),n=this.placements.get(t.placementId);if(this.interactionTracker){let i=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(i.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:gf(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let a={__providers:await this.registry.resolveAll()};if(t.traits&&(a.traits=t.traits),this.placementResolver){let i=await this.placementResolver(t,n,a);if(i.visible&&i.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(i.output);if(!s.allowed)return {...i,visible:false,reasonCodes:[...i.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return i}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:gf("No resolver","No placement resolver configured.","")}}async evaluateBatch(t){return Promise.all(t.map(e=>this.evaluate(e)))}async checkEntitlement(t,e){let n=await this.registry.resolveAll();return this.deriveEntitlementResult(t,n,e)}trackInteraction(t){this.interactionTracker?.track(t);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(t,e,n){let r=this.options.defaultEntitlementPolicy??"allow",a=e.entitlements;if(!a)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let i=a.entries[t];if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let s=a.usage?.[t];if(e.rules){let o=Sd(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(o){let _={kind:o.kind,...o.fields};if(pf(_.kind))return Sm(_,n?.used??s?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return s&&n?.used!==void 0&&s.limit>0&&n.used>=s.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:s.limit,used:n.used,remaining:Math.max(0,s.limit-n.used)}:{status:i.status,allowed:i.status==="allowed",reason:i.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};var hf=["high","medium","low"];function Fl(t,e){return t==="active"?hf.includes(e):t===e}var oT="activity_level";function ff(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),a=t.value,i=t.field===oT;switch(t.operator){case "eq":return i?Fl(a,r):r===a;case "neq":return i?!Fl(a,r):r!==a;case "gt":return Number(r)>Number(a);case "lt":return Number(r)<Number(a);case "gte":return Number(r)>=Number(a);case "lte":return Number(r)<=Number(a);case "contains":return r.includes(a);case "in":{let s=a.split(",").map(o=>o.trim());return i?s.some(o=>Fl(o,r)):s.includes(r)}default:return false}}function Ll(t,e,n={}){return t.filter(r=>{let a=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(n,r.experiment_id))return false;if(!a)return true}else if(!a)return false;return r.predicates.every(i=>ff(i,e))}).map(r=>r.handle)}function _f(t){let e={};for(let n of t)n.experiment_id&&(e[n.handle]=n.experiment_id);return e}function yf(t,e,n={}){for(let r of e){let a=t[r];if(!a)continue;let i=n[a];if(typeof i=="string")return {experiment_id:a,variant_key:i}}}function Id(t,e){let n=String(t.field||""),r=String(t.operator||""),a=String(t.value||""),i=e[n],s=typeof i=="string"||typeof i=="number"||typeof i=="boolean"?i:null,o=ff(t,e);return {field:n,operator:r,expected:a,actual:s,matched:o}}function Pm(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Nl(t){let e=2166136261;for(let a=0;a<t.length;a+=1)e^=t.charCodeAt(a),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let n=new Uint8Array(8),r=new DataView(n.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),Pm(n)}var Cd={async sha256Base64Url(t){return Nl(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 vf=z.enum(["session","day","week","month"]),bf=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(bf),cap:z.object({count:z.number().int().min(1),period:vf})});function lT(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 Sf(t,e){return `${t}:${e}`}function Vl(t){let{now:e}=t;if(t.sessionCooldownMinutes!=null&&t.sessionCooldownMinutes>0&&t.lastSessionPresentationAt!=null&&e-t.lastSessionPresentationAt<t.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(t.rules&&t.candidate){let n=t.candidate,r=t.counters??new Map;for(let a of t.rules){if(!a.group.some(_=>_.kind==="template"?_.id===n.templateId:_.kind==="slot"?_.id===n.slotId:false))continue;let s=Sf(a.id,a.cap.period);if((r.get(s)??0)>=a.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:a.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:a}=t.perPayload;if(a!=null&&Number.isFinite(a)&&a>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let i of n)for(let s of i.rules){let o=lT(s.period,e);if(r.filter(T=>T>=o&&T<=e).length>=s.count)return {allowed:false,reason:`suppressed_by_payload_cap_${s.period}`}}}return {allowed:true}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function Ed(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 Pf={Named:"named",Minted:"minted"},Tf="x-revturbine-schema-identity";function Ha(t="handle"){return {[Tf]:{kind:Pf.Named,handleField:t}}}function Ga(t="handle"){return {[Tf]:{kind:Pf.Minted,handleField:t}}}var pn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ca={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},mT="x-revturbine-context",uT="x-revturbine-in-config",dT="x-revturbine-sdk-input",pT="x-revturbine-source",gT="x-revturbine-deprecation",hT={[pn.Playbook]:Ca.Customer,[pn.Branding]:Ca.Customer,[pn.Billing]:Ca.Stripe,[pn.Metering]:Ca.Customer,[pn.CustomerOperations]:Ca.Runtime,[pn.EventIngestion]:Ca.Runtime};function $n(t,e){return {[mT]:t,[uT]:e.inConfig??t===pn.Playbook,[dT]:e.sdkInput,[pT]:e.source??hT[t]}}function Tm(t){return {deprecated:true,[gT]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var en=t=>z.object({items:z.array(t)}),Jn=z.object({error:z.string(),code:z.string(),request_id:z.string()}),O=t=>t,tn=z.object({page:z.number().int().min(1).default(1).optional(),per_page:z.number().int().min(1).max(100).default(25).optional(),sort:z.string().optional(),order:z.enum(["asc","desc"]).default("asc").optional(),include_deleted:z.boolean().default(false).optional()});async function kd(t,e){let n=Ys(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 Nl(r).slice(0,22)}function Ad(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function wd(t){let e=Ri({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:Ys(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${Nl(e)}`}function wf(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let a=r.surface.template;if(!a)continue;let i=vd(r);if(i.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==a)continue;let o=yd(s);o&&i.includes(o)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let a=n.get(r.surface.template)??[];a.push(r),n.set(r.surface.template,a);}for(let r of n.values()){if(r.length<=1)continue;let a=r.map(s=>{let o=he(s.content)?s.content:{};return {output:s,order:Sn(o.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(s=>Number.isFinite(s.order));if(a.length<=1)continue;let i=a.reduce((s,o)=>o.order>s.order?o:s);for(let s of a)s.output.output_id!==i.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function If(t){let n=(he(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function fT(t,e,n){if(n===1){let r=t.surface.slot_id,a=e.surface.slot_id;if(typeof r=="string"&&r&&typeof a=="string"&&a)return {leftKey:r,rightKey:a}}else if(n===0){let r=If(t),a=If(e);if(r&&a)return {leftKey:r,rightKey:a}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function Im(t){if(t.length<=1)return t;let e=new Set;for(let n=0;n<t.length;n+=1)for(let r=n+1;r<t.length;r+=1){let a=t[n],i=t[r];if(a.surface.type!==i.surface.type)continue;let s=$i(a.category),o=$i(i.category);if(s!==o){s<o?e.add(i.output_id):e.add(a.output_id);continue}if(s===0||s===1){let{leftKey:_,rightKey:T}=fT(a,i,s);_===T&&e.add(i.output_id);}}return t.filter(n=>!e.has(n.output_id))}function jd(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(_=>$i(_.category)===1)),r.length===0)return null;let a=wf(r);if(a.length===0)return null;let i=a.some(_=>Dl(_)!==null),s=i?a:Im(a);return s.length===0?null:[...s].sort((_,T)=>{if(i){let j=Dl(_),ne=Dl(T);if(j!==null&&ne!==null&&j!==ne)return j-ne;if(j!==null&&ne===null)return -1;if(j===null&&ne!==null)return 1}let P=$i(_.category),C=$i(T.category),R=P-C;if(R!==0)return R;if(P===2){let j=_d(_)-_d(T);if(j!==0)return j;let ne=fd(T)-fd(_);if(ne!==0)return ne}let I=ql(T)-ql(_);if(I!==0)return I;let E=_m(T)-_m(_);return E!==0?E:_.output_id.localeCompare(T.output_id)})[0]??null}function _T(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function Od(t,e,n,r){let a=he(r)?r:{},i=he(a.decision)?a.decision:{},s=he(a.content)?a.content:he(i.content)?i.content:{},o=typeof i.visible=="boolean"?i.visible:typeof a.visible=="boolean"?a.visible:true;return {placementId:t,requestId:typeof a.request_id=="string"?a.request_id:e,visible:o,decisionSource:"remote",reasonCodes:Array.isArray(a.reason_codes)?a.reason_codes.filter(_=>typeof _=="string"):[],content:_T(typeof s.title=="string"?s.title:`${n} recommendation`,typeof s.body=="string"?s.body:"Treatment selected by RevTurbine decisioning.",typeof s.cta=="string"?s.cta:"Continue")}}function Cm(t){let e=[],n=[t,t.content,he(t.content)?t.content.payload:void 0,he(t.content)?t.content.placement:void 0,he(t.content)?t.content.surface:void 0];for(let r of n){if(!he(r))continue;let a=he(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=md(a.max_per_period);s&&i.push(s);let o=Number(a.cooldown_days),_=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:i,..._!==void 0?{cooldownMs:_}:{}});}return e}function qd(t,e,n,r,a="impression"){if($i(t.category)<=1)return {allowed:true};let i=Cm(t);if(i.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(C=>Number.isFinite(C)&&C>0)},o=Vl({perPayload:{policies:i,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!o.allowed)return {allowed:false,reason:o.reason,updatedState:s};let _=[...s.seenAt,r],T=a==="dismiss"?i.map(C=>C.cooldownMs).filter(C=>typeof C=="number"&&Number.isFinite(C)&&C>0):[],P=T.length>0?r+Math.max(...T):void 0;return {allowed:true,updatedState:{seenAt:_,...P!==void 0?{cooldownUntil:P}:{}}}}function Dd(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 Rd(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Dd(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 jf(t,e){let n=t.filter(s=>s.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(s=>s.trialTrigger?.kind!=="trial_progress"?false:e>=s.trialTrigger.progressPercent);if(r.length===0)return null;let a=r[0];for(let s of r.slice(1)){let o=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,_=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1;(o>_||o===_&&s.entryOrder<a.entryOrder)&&(a=s);}let i=r.filter(s=>s!==a).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:a,supersededIds:i}}function Of(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 yT(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 vT(t,e){let n=yT(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 bT(t,e){if(!e)return null;let n=vT(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 Cf(t,e){if(!t)return true;let n=bT(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Me}=$a,{Persisted:Em,Transient:Gi}=Hi,{External:Ra}=si,qf=$n(pn.Playbook,{sdkInput:true});$n(pn.Playbook,{inConfig:false,sdkInput:false});var xT=$n(pn.Playbook,{inConfig:false,sdkInput:true}),ST=$n(pn.Playbook,{inConfig:false,sdkInput:false,source:Ca.Runtime}),PT=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),TT={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function IT(t){return TT[t]??[]}function CT(t,e){return IT(e).includes(t)}var Df=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),Uf=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),ET=z.object({count:z.number().int().positive().meta(Me),period:Uf.meta(Me)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra});z.object({surface_type:z.string().min(1).meta(Me),rules:z.array(ET).meta(Me),cooldown_ms:z.number().int().nonnegative().optional().meta(Me)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Ra,...$a.Operational,...xT});var RT=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":Gi,"x-revturbine-schema-exposure":Ra}),Qs=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Me,readOnly:true}),name:Ai.meta(Me),handle:hr.meta(Me),description:vm.meta(Me),category:Df.meta(Me),drag_order_in_category:z.number().int().default(0).meta(Me),surface_slot_id:z.string().optional().meta(Me),entitlement_id:z.string().optional().meta(Me),tier_threshold:z.string().optional().meta(Me),threshold_percent:bs.optional().meta(Me),trial_type:z.enum(["free","reverse"]).optional().meta(Me),trigger_type:z.string().optional().meta(Me),trial_progress_percent:z.number().min(0).max(100).optional().meta(Me),days_before_end:z.number().int().min(0).optional().meta(Me),qualifier:PT.optional().meta(Me),activation_window_start:z.string().datetime().optional().meta(Me),activation_window_end:z.string().datetime().optional().meta(Me),metadata:xa.meta(Me)}).meta({id:"Placement","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Ra,...qf,...Ha()}),kT=Vr("PlacementAnchor"),AT=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),wT=z.object({code:AT.meta(Me),message:z.string().min(1).meta(Me),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Me)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),Ef=Qs.extend({warnings:z.array(wT).optional().meta(Me)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),jT=z.object({label:z.string().min(1).max(200).meta(Me),cta_path_type:RT.meta(Me),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Me)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Gi,"x-revturbine-schema-exposure":Ra}),zl=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Me,readOnly:true}),handle:hr.meta({...Me,readOnly:true}),placement_id:z.string().min(1).meta(Me),drag_order:z.number().int().default(0).meta(Me),target_plan_ids:z.array(z.string()).default([]).meta(Me),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Me),target_segments:z.array(z.string()).default([]).meta(Me),surface_slot_ids:z.array(z.string()).default([]).meta(Me),surface_template_id:z.string().min(1).meta(Me),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Me),cta_list:z.array(jT).default([]).meta(Me),max_per_period:z.number().int().min(0).nullable().default(null).meta(Me),max_period_unit:Uf.default("session").meta(Me),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Me),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Me),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Me),recommendation_plan_override:z.string().optional().meta(Me)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Ra,...qf,...Ga()}),OT=Vr("PlacementPayloadAnchor"),qT=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Me),surface_type:xd.meta(Me),surface_template_ids:z.array(z.string()).default([]).meta(Me),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Me),first_seen:z.string().datetime().meta({...Me,readOnly:true}),last_seen:z.string().datetime().meta({...Me,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Me),placement_count:z.number().int().min(0).default(0).meta({...Me,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Em,"x-revturbine-schema-exposure":Ra,...ST,...Ha("surface_slot_handle")}),DT=da(Qs),UT=da(zl);({"/api/placement-anchors":{get:O({operationId:"listPlacementAnchors",requestParams:{query:tn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:en(kT)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:O({operationId:"listPlacements",requestParams:{query:tn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:en(Qs)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:O({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Nr(Qs)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ef}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:O({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:O({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:DT}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ef}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:O({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:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:O({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:O({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Df,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:O({operationId:"listPlacementPayloadAnchors",requestParams:{query:tn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:en(OT)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:O({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:tn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:en(zl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:O({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Nr(zl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:O({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:UT}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:O({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:O({operationId:"listSurfaceSlots",requestParams:{query:tn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:en(qT)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function Rf(t,e,n){if(!t)return true;if(!CT(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 kf(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let a=r.indexOf(t.tierThreshold);if(a<0)return false;let i=n?.tiers?.[t.entitlementHandle];return (i?r.indexOf(i):-1)<a}function Rm(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(s=>[s.block_id,s])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],a=Array.isArray(t.promotions)?t.promotions:[],i=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:s=>e.filter(o=>o.surface_template_id===s),getMessageBlockById:s=>n.get(s),getUiPathById:s=>r.find(o=>o.id===s||o.name===s),getPromotionById:s=>a.find(o=>o.id===s||o.name===s),listPersonalizationTokens:()=>i}}function Kl(t,e){let n={...t};for(let r of e){let a=t[r.token];if(a==null||!r.value_map)continue;let i=String(a),s=r.value_map[i];s!==void 0&&(n[r.token]=s);}return n}function Ud(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,a)=>{let i=e[a];if(i===void 0){let s=n[a];s&&(i=e[s]);}return i===void 0?r:String(i)})}function Md(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=Ud(a,e):n[r]=a;return n}function Mf(t,e){return Md(t,e)}function Fd(t,e,n,r,a,i,s){let o=n.filter(R=>R.surface_template_id===t&&R.status==="active");if(o.length===0)return null;let _=new Map(r.map(R=>[R.block_id,R])),T=new Set(e.segmentIds),P=Kl(i,a),C=s?.segmentDimensions;for(let R of o){let I=R.default_message_block_id,E,j=R.ui_path_id,ne=R.promotion_id;if(R.segment_content_map){if(C&&Object.keys(C).length>0){let J=new Map;for(let H of R.segment_content_map){let Ze=H.dimension;if(!Ze)continue;let Yt=J.get(Ze)??[];Yt.push(H),J.set(Ze,Yt);}if(J.size>0){let H=true,Ze;for(let[,Yt]of J){let pr=Yt.find(ie=>T.has(ie.segment_id));if(!pr){H=false;break}Ze||(Ze=pr);}if(H&&Ze)I=Ze.message_block_id,E=Ze.segment_id,Ze.ui_path_id&&(j=Ze.ui_path_id),Ze.promotion_id&&(ne=Ze.promotion_id);else if(!H)continue}else for(let H of R.segment_content_map)if(T.has(H.segment_id)){I=H.message_block_id,E=H.segment_id,H.ui_path_id&&(j=H.ui_path_id),H.promotion_id&&(ne=H.promotion_id);break}}else for(let J of R.segment_content_map)if(T.has(J.segment_id)){I=J.message_block_id,E=J.segment_id,J.ui_path_id&&(j=J.ui_path_id),J.promotion_id&&(ne=J.promotion_id);break}}let G=_.get(I);if(!G||G.status!=="active")continue;let pe={...G.default_content};if(G.segment_overrides){let J=E?G.segment_overrides.find(H=>H.segment_value_id===E):G.segment_overrides.find(H=>T.has(H.segment_value_id));J&&(pe={...pe,...J.content},E=J.segment_value_id);}let Re=Mf(pe,P);return {payload:R,messageBlock:G,resolvedContent:Re,matchedSegmentId:E,uiPathId:j,promotionId:ne}}return null}async function km(t,e,n,r,a){let s=(await Promise.resolve(n.listPayloads(t))).filter(P=>P.status==="active");if(s.length===0)return null;let o=new Set(e.segmentIds),_=a??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),T=Kl(r,_);for(let P of s){let C=P.default_message_block_id,R,I=P.ui_path_id,E=P.promotion_id;if(P.segment_content_map){for(let J of P.segment_content_map)if(o.has(J.segment_id)){C=J.message_block_id,R=J.segment_id,J.ui_path_id&&(I=J.ui_path_id),J.promotion_id&&(E=J.promotion_id);break}}let j=await Promise.resolve(n.getMessageBlockById(C));if(!j||j.status!=="active")continue;let ne={...j.default_content};if(j.segment_overrides){let J=R?j.segment_overrides.find(H=>H.segment_value_id===R):j.segment_overrides.find(H=>o.has(H.segment_value_id));J&&(ne={...ne,...J.content},R=J.segment_value_id);}let G=Mf(ne,T),pe;I&&n.getUiPathById&&(pe=await Promise.resolve(n.getUiPathById(I)));let Re;return E&&n.getPromotionById&&(Re=await Promise.resolve(n.getPromotionById(E))),{payload:P,messageBlock:j,resolvedContent:G,matchedSegmentId:R,uiPathId:I,promotionId:E,uiPath:pe??void 0,promotion:Re??void 0}}return null}var MT={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 FT(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let a=e[r];return a==null?`{{${r}}}`:String(a)})}function LT(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=FT(r,t);continue}e[n]=r;}return e}function NT(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 VT(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function BT(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 VT(e,n)}function zT(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 KT(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 zT(n,e,r)}function $T(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 HT(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 $T(n,e,r)}function GT(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function YT(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function WT(t,e){let n={...MT};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 a=new Map;for(let o of t.entitlements??[])o.tier_definitions?.length&&a.set(o.unique_handle,o.tier_definitions.map(_=>_.handle));let i=new Map,s=new Map;for(let o of e.placements){let _=o.payloads[0];if(!_)continue;let T=_.surfaces[0];if(!T)continue;let P=T.template_id,C=n[P]??"custom",R={...T.fields};T.ctas?.[0]&&(R.cta_label=T.ctas[0].label),T.ctas?.[1]&&(R.secondary_cta_label=T.ctas[1].label);let I=NT(T.ctas?.[0]),E=Array.isArray(_.target?.plan_ids)?_.target.plan_ids:[],j=GT(o.trigger),ne=YT(o.trigger),G=Of(o.trigger),pe=KT(o.trigger,j),Re=BT(o.trigger),J=HT(o.trigger,j),H={output_id:_.id,category:o.category,surface:{template:P,type:C,slot_id:o.id},content:{...R,__target_plan_ids:E,...j?{__trigger_entitlement_handle:j}:{},...G?{__trigger_kind:G.kind}:{}},cta_path:I,rule_id:o.id,decision_id:_.id,config_version:fm(t),present_upsell:true},Ze=i.get(P)??[];Ze.push({output:H,entryOrder:o.order??0,entryCategory:o.category,triggerEntitlementHandle:j,triggerSlotId:ne,trialTrigger:G,thresholdTrigger:pe,qualifierTrigger:Re,entitlementGateTrigger:J}),i.set(P,Ze);let Yt=o.id.replace(/^pl_/,"");s.set(Yt,H),s.set(o.id,H);}for(let o of i.values())o.sort((_,T)=>_.entryOrder-T.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:r,tierLaddersByHandle:a}}function ZT(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let a=new Map;for(let s of e.placements){let o=s.payloads[0]?.surfaces?.[0]?.template_id;o&&a.set(s.id,o);}let i=[];for(let s of r){let o=s.content_link?.message_block_id;if(!o)continue;let _=a.get(s.placement_id);_&&i.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:_,default_message_block_id:o,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(i.length!==0)return Rm({payloads:i,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function Ff(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:a,planHandleToId:i,tierLaddersByHandle:s}=WT(e.exportedConfig,e.placements),o=ZT(e.exportedConfig,e.placements),_=_f(e.exportedConfig.segments??[]);function T(P,C,R,I){let E=Array.isArray(P.content.__target_plan_ids)?P.content.__target_plan_ids.filter(ne=>typeof ne=="string"):[],j=Array.isArray(P.content.__target_billing_periods)?P.content.__target_billing_periods.filter(ne=>typeof ne=="string"):[];return Ed({target_plan_ids:E,target_billing_periods:j,category:P.category},{currentPlanId:C,planHandle:R,billingPeriod:I}).eligible}return async(P,C,R)=>{let I=R?.__providers,E=I?.plan?.currentPlanHandle,j=I?.plan?.billingPeriod,ne=E?i.get(E):void 0,G=Dt=>typeof Dt=="string"?Dt:"",pe=Array.isArray(C?.metadata?.surface_template_ids)?C.metadata.surface_template_ids:void 0,Re,J=[];if(pe&&pe.length>0){let Dt=[];for(let Ct of pe){let Or=r.get(Ct);Or&&Dt.push(...Or);}if(Dt.length===0)return Af(P,"no_candidates_for_template","No placements configured for this surface template");Dt.sort((Ct,Or)=>Ct.entryOrder-Or.entryOrder);let mn=C?.metadata?.entitlement_handle,Kn=C?.metadata?.surface_slot_category,un=Kn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Kn]:void 0,an=Dt;if(mn){let Ct=Dt.filter(Or=>Or.triggerEntitlementHandle===mn);Ct.length>0&&(an=Ct);}let Sr=C?.metadata?.surface_slot_id;if(Sr){let Ct=an.filter(Or=>Or.triggerSlotId===Sr);Ct.length>0&&(an=Ct);}if(C?.metadata?.fixedOnly===true&&(an=an.filter(Ct=>Ct.entryCategory==="fixed")),un&&Kn!=="fixed"&&an.length>1){let Ct=an.filter(Or=>un.includes(Or.entryCategory));Ct.length>0&&(an=Ct);}n&&(an=an.filter(Ct=>!n.isHiddenSync(Ct.output.rule_id??""))),an=an.filter(Ct=>Rd(Ct.trialTrigger,I?.plan)),an=an.filter(Ct=>Cf(Ct.thresholdTrigger,I?.entitlements)),an=an.filter(Ct=>Rf(Ct.qualifierTrigger,Ct.entryCategory,I?.plan)),an=an.filter(Ct=>kf(Ct.entitlementGateTrigger,s,I?.entitlements));let xn,Qe=[],gr=Dd(I?.plan);if(gr!==null&&an.length>1){let Ct=an.map(Hs=>({ruleId:Hs.output.rule_id??void 0,entryOrder:Hs.entryOrder,trialTrigger:Hs.trialTrigger,output:Hs.output})),Or=jf(Ct,gr);if(Or){xn=Or.winner,Qe=Or.supersededIds;let Hs=Or.winner.ruleId;an=an.filter(Wh=>Wh.trialTrigger?.kind!=="trial_progress"||(Wh.output.rule_id??void 0)===Hs);}}let ba;for(let Ct of an)if(T(Ct.output,ne,E,j)){Re=Ct.output,ba=Ct;break}ba&&xn&&xn.ruleId===(ba.output.rule_id??void 0)&&Qe.length>0&&(Re={...Re,content:{...Re.content,__superseded_placement_ids:Qe}}),Re||(J=["no_eligible_candidate"]);}else {let Dt=C?.name,mn=(Dt?a.get(Dt):void 0)??a.get(P.placementId),Kn;if(mn)for(let jr of r.values()){let un=jr.find(an=>an.output===mn);if(un){Kn=un;break}}mn&&n?.isHiddenSync(mn.rule_id??"")?J=["placement_retired"]:mn&&!Rd(Kn?.trialTrigger,I?.plan)?J=["trial_trigger_unmet"]:mn&&!Cf(Kn?.thresholdTrigger,I?.entitlements)?J=["threshold_trigger_unmet"]:mn&&!Rf(Kn?.qualifierTrigger,Kn?.entryCategory??mn.category,I?.plan)?J=["qualifier_trigger_unmet"]:mn&&!kf(Kn?.entitlementGateTrigger,s,I?.entitlements)?J=["entitlement_gate_unmet"]:mn&&T(mn,ne,E,j)?Re=mn:mn?J=["plan_target_mismatch"]:J=["placement_not_found"];}if(!Re){let Dt=J[0]??"placement_not_found";return Af(P,Dt,"Placement not configured")}let H=Re.content,Ze=Re.surface.template;if(o&&Ze){let Dt={userId:typeof P.userId=="string"?P.userId:"",segmentIds:I?.segments?.segmentIds??[]},mn=await km(Ze,Dt,o,{});mn&&(H={...Re.content,...mn.resolvedContent});}let Yt={...H},pr=typeof Yt.entitlement=="string"?Yt.entitlement:typeof Yt.__trigger_entitlement_handle=="string"?Yt.__trigger_entitlement_handle:void 0,ie=pr?I?.entitlements?.usage?.[pr]:void 0;if(ie){Yt.usage_remaining=Number.isFinite(ie.remaining)?ie.remaining:0,Yt.usage_limit=Number.isFinite(ie.limit)?ie.limit:0,Yt.usage_current=Number.isFinite(ie.used)?ie.used:0,Yt.usage_percent=ie.limit>0?Math.min(100,Math.round(ie.used/ie.limit*100)):0;let Dt=ie.reset_date;typeof Dt=="string"&&Dt.length>0&&(Yt.reset_date=Dt);}let Wt=LT(Yt),ln=yf(_,I?.segments?.segmentIds??[],I?.experiments?.assignments),cn={...Re,content:Wt,...ln},or=!((Re.category==="upsell"||Re.category==="trial_conversion")&&E==="enterprise");return {placementId:P.placementId,requestId:`local_${Date.now()}`,visible:or,decisionSource:"fallback",reasonCodes:or?[]:["plan_tier_suppressed"],content:{header:G(cn.content.header),body:G(cn.content.body),cta_label:G(cn.content.cta_label),title:G(cn.content.header),cta:G(cn.content.cta_label)},output:cn}}}function Af(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 Xs(t){return Ff({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function Js(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 Bl(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function QT(t,e){let n=Js(t.limit_value??t.usage_limit??t.limit??t.allowance??t.initial_grant);if(n!==void 0)return n;let r=t.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let a=(e??"").toLowerCase();for(let[i,s]of Object.entries(r))if(i.toLowerCase()===a)return Js(s)}}function JT(t){let e=Js(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 Lf(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[I,E]of Object.entries(t.base))(typeof E=="string"||typeof E=="number")&&(e[I]=E);let r=n?.plan?.currentPlanHandle,a=n?.plan?.currentPlanName??r;typeof a=="string"&&a.length>0&&(e.plan_name=a);let i=n?.plan?.trialDaysRemaining;i!==void 0&&Number.isFinite(i)&&(e.trial_days_remaining=i);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let o=n?.traits?.traits??{};for(let[I,E]of Object.entries(o))(typeof E=="string"||typeof E=="number")&&(e[I]=E);let _=n?.entitlements?.usage??{};for(let[I,E]of Object.entries(_)){let j=Bl(I);if(!j)continue;let ne=Js(E.used),G=Js(E.remaining),pe=Js(E.limit);if(ne!==void 0&&(e[`${j}_usage_current`]=ne,e.usage_current===void 0&&(e.usage_current=ne),e.current_usage===void 0&&(e.current_usage=ne)),pe!==void 0&&(e[`${j}_usage_limit`]=pe,e.usage_limit===void 0&&(e.usage_limit=pe),e.current_limit===void 0&&(e.current_limit=pe)),G!==void 0)e[`${j}_usage_remaining`]=G,e.usage_remaining===void 0&&(e.usage_remaining=G);else if(ne!==void 0&&pe!==void 0){let J=Math.max(0,pe-ne);e[`${j}_usage_remaining`]=J,e.usage_remaining===void 0&&(e.usage_remaining=J);}if(ne!==void 0&&pe!==void 0&&pe>0){let J=Math.min(100,Math.round(ne/pe*100));e[`${j}_usage_percent`]=J,e.usage_percent===void 0&&(e.usage_percent=J);}let Re=E.reset_date;typeof Re=="string"&&Re.length>0&&(e[`${j}_reset_date`]=Re,e.reset_date===void 0&&(e.reset_date=Re));}let T=n?.rules?.entitlementRules??{};for(let[I,E]of Object.entries(T)){if(!Array.isArray(E)||E.length===0)continue;let j=E.find(J=>J.kind==="usage_limit"||J.kind==="usage_rate"||J.kind==="credits"||J.kind==="seat");if(!j)continue;let ne=Bl(I);if(!ne)continue;let G=j.fields??{},pe=QT(G,r);pe!==void 0&&e[`${ne}_usage_limit`]===void 0&&(e[`${ne}_usage_limit`]=pe);let Re=JT(G);Re!==void 0&&(e[`${ne}_usage_warning_threshold_percent`]=Re);}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 C=t.effectiveGrants;if(C)for(let[I,E]of Object.entries(C)){if(E.allocation==="per_user"||E.allocation==="per_user_pooled"||!E.allocation){let j=Bl(I);if(!j)continue;E.used!==void 0&&e[`${j}_usage_current`]===void 0&&(e[`${j}_usage_current`]=E.used),E.limit!==void 0&&e[`${j}_usage_limit`]===void 0&&(e[`${j}_usage_limit`]=E.limit);}if(E.enforcement&&(E.status==="limited"||E.status==="denied")){let j=Bl(I);j&&e[`${j}_enforcement`]===void 0&&(e[`${j}_enforcement`]=E.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=E.enforcement);}}let R=n?.rules?.entitlementRules??{};for(let[I,E]of Object.entries(R)){if(!Array.isArray(E))continue;let j=Bl(I);if(j)for(let ne of E){if(ne.kind==="credits"){let G=e[`${j}_usage_remaining`];G!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=G);}if(ne.kind==="seat"){let G=e[`${j}_usage_current`],pe=e[`${j}_usage_limit`];G!==void 0&&e.seat_count===void 0&&(e.seat_count=G),pe!==void 0&&e.seat_limit===void 0&&(e.seat_limit=pe);}}}if(t.featureInteractions&&C){let{invokedFeatureHandles:I,interactionCounts:E,topFeaturesByEngagement:j}=t.featureInteractions,ne=new Set(I),G=new Set;for(let[J,H]of Object.entries(C))(H.status==="denied"||H.status==="limited")&&G.add(J);let pe=0,Re=0;for(let J of I)G.has(J)&&(pe++,E&&(Re+=E[J]??0));if(e.gated_features_used_count=pe,E&&(e.gated_action_count=Re),j){let J=j.find(H=>!ne.has(H)&&G.has(H));J&&(e.top_unused_gated_feature=J);}if(n?.plan?.trialActive){let J=0;for(let H of I)H in C&&J++;e.trial_features_used=J;}}return e}function Ld(t,e){let n={};for(let[r,a]of Object.entries(e))a!==void 0&&(n[r]=a);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function Am(t,e,n){let r={};for(let[a,i]of Object.entries(t))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(r[a]=i);e&&r.plan===void 0&&(r.plan=e);for(let[a,i]of Object.entries(n))r[a]===void 0&&(r[a]=i);return r}function wm(t,e,n){let r=hm(t),a=ys(e,r),i=a??r,s={...t.custom??{}};for(let[_,T]of Object.entries(t.entitlements??{}))s[_]===void 0&&(s[_]=T);r?s.plan_handle=r:delete s.plan_handle,a&&s.plan_name===void 0&&(s.plan_name=a),i&&s.plan===void 0&&(s.plan=i);let o={...ii(t.usage),...n??{}};for(let[_,T]of Object.entries(o))s[_]===void 0&&(s[_]=T);return {effectivePlan:i,traits:s,usage:o,segmentTraits:Am(s,i,o)}}function XT(t){return {plan_handle:t.plan_handle??null,plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function Nd(t,e=Cd){return e.sha256Base64Url(Ri(XT(t)))}function Vd(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:a,usageThresholdLookup:i}=t,s={};for(let[G,pe]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(G)||(s[G]=pe);let o={...s},_=ys(n,hm(e));_?o.plan_name=_:typeof e.plan=="object"&&e.plan?.name&&(o.plan_name=e.plan.name);let T={...ii(e.usage),...r},P=Object.entries(T).filter(([,G])=>Number.isFinite(G)).sort(([G],[pe])=>G.localeCompare(pe)),C,R,I,E,j=[];for(let[G,pe]of P){let Re=a.get(G)??Ws(G);if(!Re)continue;let H=i(G)?.limit,Ze=H!==void 0?Math.max(0,H-pe):void 0,Yt=H!==void 0&&H>0?Math.min(100,Math.round(pe/H*100)):void 0;o[`${Re}_usage_current`]=pe,H!==void 0&&(o[`${Re}_usage_limit`]=H),Ze!==void 0&&(o[`${Re}_usage_remaining`]=Ze),Yt!==void 0&&(o[`${Re}_usage_percent`]=Yt),j.push({prefix:Re,current:pe,...H!==void 0?{limit:H}:{},...Ze!==void 0?{remaining:Ze}:{},...Yt!==void 0?{percent:Yt}:{}}),C===void 0&&(C=pe,R=H,I=Ze,E=Yt);}let ne=j.find(G=>G.prefix==="core")??j.find(G=>G.limit!==void 0)??j[0];return ne&&(C=ne.current,R=ne.limit,I=ne.remaining,E=ne.percent),C!==void 0&&(o.usage_current=C),R!==void 0&&(o.usage_limit=R),I!==void 0&&(o.usage_remaining=I),E!==void 0&&(o.usage_percent=E),o}function Bd(t,e,n){let r=[];for(let[a,i]of Object.entries(e)){let s=t[a]||0;if(!Number.isFinite(i)||i<=s)continue;let o=n(a);if(!o)continue;let _=s/o.limit*100,T=i/o.limit*100;T>=o.warningPercent&&_<o.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:a,current_usage:i,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(T)),threshold:o.warningPercent}),i>=o.limit&&s<o.limit&&r.push({type:"usage_limit_reached",entitlement_handle:a,current_usage:i,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(T)),threshold:100});}return r}function zd(t,e,n=3){if(!t.in_trial)return e==="none"?"none":"expired";let r=Number(t.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=n)return "expiring";let a=Number(t.day_number);if(Number.isFinite(a)&&a>0&&Number.isFinite(r)){let i=a+Math.max(0,r);if(i>0&&a>=Math.ceil(i/2))return "midpoint"}return "none"}var Nf="__self__",eI={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Kd={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:Nf,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:eI},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 Vf=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(Vf).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:_e}=$a,{Persisted:Xd,Transient:pa}=Hi,{Internal:Kf,External:ea}=si,$f=$n(pn.Playbook,{sdkInput:true}),rI=$n(pn.Playbook,{inConfig:false,sdkInput:false}),Hf=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),qm=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),aI=z.enum(rf).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),iI=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),Gf=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),Hd=z.object({entitlement_id:z.string().min(1).meta(_e),entitlement_handle:z.string().min(1).meta(_e),status:aI.meta(_e),limit:z.number().optional().meta(_e),used:z.number().optional().meta(_e),allocation:qm.optional().meta(_e),enforcement:Gf.optional().meta(_e),source:iI.optional().meta(_e),plan_id:z.string().optional().meta(_e),segment_id:z.string().optional().meta(_e),seat_type_id:z.string().optional().meta(_e),rule_id:z.string().optional().meta(_e)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea,...$a.Operational});z.object({account:z.record(z.string(),Hd).optional().meta(_e),instance:z.record(z.string(),Hd).optional().meta(_e),user:z.record(z.string(),Hd).optional().meta(_e)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea,...$a.Operational});var sI=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),oI=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),Yf=z.object({kind:oI.meta(_e),id:z.string().min(1).meta(_e)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),lI=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),io=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({..._e,readOnly:true}),name:Ai.meta(_e),handle:hr.meta(_e),customer_facing_description:z.string().max(500).optional().meta(_e),type:ym.meta(_e),unit:z.string().max(100).optional().meta(_e),period_scope:Hf.optional().meta(_e),allocation:qm.optional().meta(_e),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(_e),sort_order:z.number().int().default(0).meta(_e),metadata:xa.meta(_e)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Xd,"x-revturbine-schema-exposure":ea,...$f,...Ha()}),cI=Vr("EntitlementAnchor"),po=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({..._e,readOnly:true}),handle:hr.meta({..._e,readOnly:true}),entitlement_id:z.string().min(1).meta(_e),targets:z.array(Yf).min(1).meta(_e),segment_ids:z.array(z.string()).default([]).meta(_e),visibility:sI.default("public").meta(_e),period_scope:Hf.optional().meta(_e),instance:z.string().max(100).optional().meta(_e),reset_period:lI.optional().meta(_e),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(_e),enforcement:Gf.optional().meta(_e),warning_threshold_percent:bs.optional().meta(_e),overage_price_ref:z.string().optional().meta(_e),grace_period_hours:z.number().int().min(0).optional().meta(_e),tier_value:z.string().optional().meta(_e),rate_value:z.number().optional().meta(_e),initial_grant:z.number().optional().meta(_e),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(_e),rollover_enabled:z.boolean().optional().meta(_e),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(_e),seat_type_id:z.string().optional().meta(_e),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(_e),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(_e),stripe_metered_price_id:z.string().optional().meta(_e),enabled:z.boolean().optional().meta(_e),allocation:qm.optional().meta(_e),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(_e),amount_cents:z.number().int().optional().meta(_e),currency:z.string().optional().meta(_e)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Xd,"x-revturbine-schema-exposure":Kf,...$f,...Ga()}),mI=Vr("EntitlementRuleAnchor");po.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var uI=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),dI=z.object({code:uI.meta(_e),message:z.string().min(1).meta(_e),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(_e)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),Gd=po.extend({warnings:z.array(dI).optional().meta(_e)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ea}),Yd=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({handle:hr.meta({..._e,readOnly:true}),rule_id:z.string().min(1).meta(_e),experiment_id:z.string().min(1).meta(_e),variant_name:z.string().min(1).max(200).meta(_e),is_control:z.boolean().default(false).meta(_e),override_fields:z.record(z.string(),z.unknown()).default({}).meta(_e)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Xd,"x-revturbine-schema-exposure":Kf,...rI,...Ga()}),pI=da(io),gI=da(po);({"/api/entitlement-anchors":{get:O({operationId:"listEntitlementAnchors",requestParams:{query:tn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:en(cI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:O({operationId:"listEntitlementRuleAnchors",requestParams:{query:tn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:en(mI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:O({operationId:"listEntitlements",requestParams:{query:tn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:en(io)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:O({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Nr(io)}}},responses:{201:{description:"Created",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:O({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:O({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:pI}}},responses:{200:{description:"Updated",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:O({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:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:O({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:tn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:en(po)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:O({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Nr(po)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Gd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:O({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:gI}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:O({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:O({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Gd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:O({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:tn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:en(Yd)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:O({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Nr(Yd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:et}=$a,{Persisted:Zl,Transient:Ql}=Hi,{Internal:li}=si,Wf=$n(pn.Playbook,{sdkInput:true}),Zf=$n(pn.Playbook,{inConfig:false,sdkInput:true}),hI=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Ql,"x-revturbine-schema-exposure":li}),ep=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Ql,"x-revturbine-schema-exposure":li}),Qf=z.object({name:Ai.meta(et),handle:hr.meta(et),plan_id:z.string().nullable().optional().meta(et),segment_id:z.string().nullable().optional().meta(et),trial_limit_type:ep.default("time").meta(et),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(et),grace_period_days:z.number().int().min(0).default(0).meta(et),usage_entitlement_handle:z.string().min(1).optional().meta(et),usage_limit_value:z.number().int().min(1).optional().meta(et),require_payment_method:z.boolean().default(false).meta(et),auto_convert:z.boolean().default(true).meta(et),convert_to_plan_id:z.string().optional().meta(et),fallback_plan_id:z.string().optional().meta(et),limit_per_customer:z.number().int().min(1).default(1).meta(et),is_active:z.boolean().default(true).meta(et),metadata:xa.meta(et)}),eo=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true})}).merge(Qf).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Zl,"x-revturbine-schema-exposure":li,...Wf,...Ha()}),fI=Vr("FreeTrialRuleAnchor"),_I=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Ql,"x-revturbine-schema-exposure":li}),Jf=z.object({name:Ai.meta(et),handle:hr.meta(et),premium_plan_id:z.string().min(1).meta(et),fallback_plan_id:z.string().min(1).meta(et),segment_id:z.string().nullable().optional().meta(et),trial_limit_type:ep.default("time").meta(et),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(et),usage_entitlement_handle:z.string().min(1).optional().meta(et),usage_limit_value:z.number().int().min(1).optional().meta(et),start_policy:_I.default("signup").meta(et),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(et),entitlements_during_trial:z.array(z.string()).default([]).meta(et),is_active:z.boolean().default(true).meta(et),metadata:xa.meta(et)}),to=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...et,readOnly:true})}).merge(Jf).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Zl,"x-revturbine-schema-exposure":li,...Wf,...Ha()}),yI=Vr("ReverseTrialRuleAnchor"),Xf=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Ql,"x-revturbine-schema-exposure":li}),e_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Ql,"x-revturbine-schema-exposure":li}),no=kn.merge(Mn).merge(Fn).extend({trial_limit_policy:Xf.default("1_per_lifetime").meta(et),eligibility_scope:e_.default("per_customer").meta(et)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Zl,"x-revturbine-schema-exposure":li,...Zf}),ro=kn.merge(Mn).merge(Fn).extend({trial_limit_policy:Xf.default("1_per_lifetime").meta(et),eligibility_scope:e_.default("per_customer").meta(et)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Zl,"x-revturbine-schema-exposure":li,...Zf}),jm=kn.merge(Mn).merge(Fn).extend({customer_id:z.string().min(1).meta(et),rule_id:z.string().min(1).meta(et),rule_type:z.enum(["free_trial","reverse_trial"]).meta(et),plan_id:z.string().min(1).meta(et),status:hI.default("active").meta(et),started_at:z.string().datetime().meta({...et,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(et),trial_limit_type:ep.default("time").meta(et),usage_entitlement_handle:z.string().min(1).optional().meta(et),usage_limit_value:z.number().int().min(1).optional().meta(et),converted_at:bm.meta(et),cancelled_at:bm.meta(et),metadata:xa.meta(et)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Zl,"x-revturbine-schema-exposure":li});({"/api/free-trial-rule-anchors":{get:O({operationId:"listFreeTrialRuleAnchors",requestParams:{query:tn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:en(fI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:O({operationId:"listFreeTrialRules",requestParams:{query:tn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:en(eo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:O({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:O({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:eo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:O({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:O({operationId:"listReverseTrialRuleAnchors",requestParams:{query:tn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:en(yI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:O({operationId:"listReverseTrialRules",requestParams:{query:tn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:en(to)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:O({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:to}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:O({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse 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:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:O({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:O({operationId:"listFreeTrialSettings",requestParams:{query:tn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:en(no)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:O({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:no}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:O({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:no.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:O({operationId:"listReverseTrialSettings",requestParams:{query:tn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:en(ro)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:O({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:O({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ro.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:O({operationId:"listTrialInstances",requestParams:{query:tn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:en(jm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:O({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:jm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:O({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:jm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:O({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:jm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Kt,Financial:Om}=$a,{Persisted:Jl,Transient:Dm}=Hi,{External:wi}=si,vI=$n(pn.Playbook,{sdkInput:true}),bI=$n(pn.Playbook,{sdkInput:false}),tp=$n(pn.Billing,{sdkInput:false}),Wi=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":wi}),Xl=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":wi}),Um=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":wi}),so=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Ai.meta(Kt),handle:hr.meta(Kt),tier_position:z.number().int().min(0).default(0).meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:Wi.default("public").meta(Kt),metadata:xa.meta(Kt)}).meta({id:"Plan","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":wi,...vI,...Ha()}),xI=Vr("PlanAnchor"),oo=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:hr.meta({...Kt,readOnly:true}),plan_id:z.string().min(1).meta(Kt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Kt),segment_id:z.string().nullable().default(null).meta(Kt),price_amount:z.number().min(0).meta(Om),pricing_model:Xl.meta(Kt),visibility:Wi.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:Um.default("static").meta(Kt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":wi,...tp,...Ga()}),SI=Vr("PlanVariationAnchor"),lo=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Ai.meta(Kt),handle:hr.meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:Wi.default("public").meta(Kt),metadata:xa.meta(Kt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":wi,...bI,...Ha()}),PI=Vr("AddOnAnchor"),co=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:hr.meta({...Kt,readOnly:true}),addon_id:z.string().min(1).meta(Kt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Kt),segment_id:z.string().nullable().default(null).meta(Kt),price_amount:z.number().min(0).meta(Om),pricing_model:Xl.meta(Kt),visibility:Wi.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:Um.default("static").meta(Kt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":wi,...tp,...Ga()}),TI=Vr("AddOnVariationAnchor"),II=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Dm,"x-revturbine-schema-exposure":wi}),mo=kn.merge(Mn).merge(Fn).extend({stripe_price_id:z.string().min(1).meta(Kt),stripe_product_id:z.string().min(1).meta(Kt),billing_period:II.meta(Kt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Om),currency:af.meta(Om),pricing_model:Xl.meta(Kt),nickname:z.string().nullable().default(null).meta(Kt),is_mock:z.boolean().default(false).meta(Kt),last_updated_from_stripe:bm.meta(Kt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":wi,...tp}),CI=da(so),EI=da(oo),RI=da(lo),kI=da(co),AI=da(mo);({"/api/plan-anchors":{get:O({operationId:"listPlanAnchors",requestParams:{query:tn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:en(xI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:O({operationId:"listPlans",requestParams:{query:tn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:en(so)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:O({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Nr(so)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:so}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:O({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:so}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:O({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:CI}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:so}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:O({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:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:O({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:O({operationId:"listPlanVariationAnchors",requestParams:{query:tn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:en(SI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:O({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:tn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:en(oo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:O({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Nr(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:O({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:O({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:EI}}},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:O({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:O({operationId:"listAddOnAnchors",requestParams:{query:tn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:en(PI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:O({operationId:"listAddOns",requestParams:{query:tn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:en(lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:O({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Nr(lo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:O({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:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:O({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:RI}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:lo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:O({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:O({operationId:"listAddOnVariationAnchors",requestParams:{query:tn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:en(TI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:O({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:tn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:en(co)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:O({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Nr(co)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:co}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:O({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:co}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:O({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:kI}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:co}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:O({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:O({operationId:"listStripePrices",requestParams:{query:tn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:en(mo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:O({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Nr(mo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:O({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:O({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:AI}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:O({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:d}=$a,{Persisted:go,Transient:at}=Hi,{Internal:ka,External:Et}=si,bt=$n(pn.Playbook,{sdkInput:true}),uo=$n(pn.Playbook,{sdkInput:false}),Yi=$n(pn.Playbook,{inConfig:false,sdkInput:false}),t_=$n(pn.Playbook,{inConfig:false,sdkInput:true}),ao=$n(pn.Playbook,{inConfig:false,sdkInput:true,source:Ca.CodeConstant}),Wd=$n(pn.Playbook,{inConfig:false,sdkInput:true,source:Ca.Runtime}),Zd=$n(pn.Playbook,{inConfig:false,sdkInput:false,source:Ca.Runtime}),wI=$n(pn.Billing,{sdkInput:false}),jI=$n(pn.Metering,{sdkInput:false}),OI=$n(pn.Branding,{inConfig:true,sdkInput:true}),qI=$n(pn.Branding,{sdkInput:false}),DI="1.0.0",Hl=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),name:Ai.meta(d),handle:hr.meta(d),description:vm.meta(d),is_default:z.boolean().default(false).meta(d),entitlement_ids:z.array(z.string()).default([]).meta(d),metadata:xa.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...Yi,...Ha()}),UI=Vr("SeatTypeAnchor"),Gl=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta(d),label:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().nullable().default(null).meta(d),example_value:z.string().nullable().default(null).meta(d),value_map:z.record(z.string(),z.string()).default({}).meta(d),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(d),metadata:xa.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...Yi,...Ha()}),MI=Vr("PersonalizationTokenAnchor"),FI=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),Qd=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({handle:hr.meta({...d,readOnly:true}),stripe_account_id:z.string().min(1).meta(d),live_mode:z.boolean().default(false).meta(d),onboarding_state:FI.default("not_started").meta({...d,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...d,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...d,readOnly:true}),details_submitted:z.boolean().default(false).meta({...d,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...d,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...d,readOnly:true}),sync_products:z.boolean().default(true).meta(d),sync_prices:z.boolean().default(true).meta(d),sync_subscriptions:z.boolean().default(true).meta(d),sync_invoices:z.boolean().default(false).meta(d),default_currency:z.string().length(3).default("USD").meta(d),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(d),last_sync_at:z.string().optional().meta({...d,readOnly:true}),metadata:xa.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...wI,...Ga()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(d),workspace_name:z.string().optional().meta(d),logo_url:z.string().optional().meta(d),support_email:z.string().optional().meta(d)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...qI});var Yl=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({handle:hr.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),meter_key:z.string().min(1).max(100).meta(d),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(d),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(d),stripe_meter_id:z.string().nullable().default(null).meta(d),is_active:z.boolean().default(true).meta(d),metadata:xa.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...jI,...Ga()}),Bf=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),Wl=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta({...d,readOnly:true}),entitlement_id:z.string().min(1).meta(d),soft_limit_percent:z.number().min(0).max(100).default(80).meta(d),hard_limit_percent:z.number().min(0).max(100).default(100).meta(d),soft_limit_action:Bf.default("warn").meta(d),hard_limit_action:Bf.default("block").meta(d),grace_period_hours:z.number().int().min(0).default(0).meta(d),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...t_,...Ga()}),LI=Vr("UsageEnforcementSettingsAnchor"),NI=z.object({kind:z.enum(["template","slot"]).meta(d),id:z.string().min(1).meta(d),label:z.string().min(1).optional().meta(d)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),VI=z.object({id:z.string().min(1).meta(d),group:z.array(NI).min(1).meta(d),cap:z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month"]).meta(d)}).meta(d)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),BI=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),n_=z.object({capRules:z.array(VI).default([]).meta(d),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(d),remindLaterMinutes:z.number().int().min(0).default(60).meta(d),testMode:BI.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":ka}),Jd=kn.merge(Mn).merge(Fn).merge(lr).merge(fr).extend({anchor_id:z.string().min(1).meta({...d,readOnly:true}),handle:hr.meta({...d,readOnly:true}),global_frequency_cap:n_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(d)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":go,"x-revturbine-schema-exposure":ka,...t_,...Ga()}),zI=Vr("PlacementSettingsAnchor"),KI=z.object({field:z.string().min(1).meta(d),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(d),value:z.string().meta(d)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),$I=z.object({name:z.string().min(1).meta(d),handle:z.string().min(1).meta(d),predicates:z.array(KI).optional().meta(d),dimension_id:z.string().optional().meta(d),experiment_id:z.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),HI=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),tier_position:z.number().int().min(0).default(0).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:Wi.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),GI=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),sort_order:z.number().int().min(0).default(0).meta(d),visibility:Wi.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...uo}),YI=z.object({handle:z.string().min(1).meta(d),plan_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:Xl.meta(d),visibility:Wi.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Um.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Yi}),WI=z.object({handle:z.string().min(1).meta(d),addon_handle:z.string().min(1).meta(d),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z.string().nullable().default(null).meta(d),price_amount:z.number().min(0).meta(d),pricing_model:Xl.meta(d),visibility:Wi.default("public").meta(d),stripe_price_id:z.string().nullable().default(null).meta(d),price_source:Um.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Yi}),ZI=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),description:z.string().nullable().default(null).meta(d),is_default:z.boolean().default(false).meta(d),entitlement_handles:z.array(z.string()).default([]).meta(d)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),QI=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().nullable().default(null).meta(d),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(d),soft_limit_action:z.string().meta(d),hard_limit_action:z.string().meta(d),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(d),notification_channels:z.array(z.string()).default([]).meta(d),is_active:z.boolean().default(true).meta(d)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),JI=z.object({handle:z.string().min(1).meta(d),global_frequency_cap:n_.nullable().default(null).meta(d),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z.boolean().default(false).meta(d),suppress_for_trial:z.boolean().default(false).meta(d),allow_stacking:z.boolean().default(false).meta(d),priority_collision_strategy:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),XI=z.object({handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:z.string().nullable().default(null).meta(d),visibility_toggle:z.boolean().default(true).meta(d),source_type:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),eC=z.object({handle:z.string().min(1).meta(d),entitlement_handle:z.string().min(1).meta(d),meter_handle:z.string().min(1).meta(d),limit:z.number().int().min(0).nullable().default(null).meta(d),reset_period:z.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),tC=z.object({unique_handle:z.string().min(1).meta(d),name:z.string().min(1).meta(d),type:ym.meta(d),unit:z.string().optional().meta(d),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),nC=z.object({id:z.string().min(1).meta(d),entitlement_id:z.string().min(1).meta(d),targets:z.array(Yf).min(1).meta(d),segment_ids:z.array(z.string()).default([]).meta(d),kind:ym.optional().meta({...d,readOnly:true}),unit:z.string().optional().meta({...d,readOnly:true}),tier_name:z.string().optional().meta({...d,readOnly:true}),tier_description:z.string().optional().meta({...d,readOnly:true}),...po.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(d),allocation:qm.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),rC=z.object({slot_id:z.string().min(1).meta(d),active:z.boolean().meta(d),triggers:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),aC=z.object({id:z.string().min(1).meta(d),label:z.string().min(1).meta(d),description:z.string().meta(d),surface_type:z.string().meta(d),placement_handle:z.string().min(1).meta(d),template:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),iC=z.object({name:z.string().min(1).meta(d),type:z.string().optional().meta(d),required:z.boolean().optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),sC=z.object({id:z.string().min(1).meta(d),surface_type:z.string().meta(d),fields:z.array(iC).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),oC=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":at,"x-revturbine-schema-exposure":Et}),lC=z.object({name:z.string().min(1).meta(d),action_type:oC.meta(d),plan_handle:z.string().optional().meta(d),promotion_id:z.string().optional().meta(d),placement_handle:z.string().optional().meta(d),url:z.string().optional().meta(d),tour_id:z.string().optional().meta(d),target_billing_period:z.enum(["monthly","annual"]).optional().meta(d),description:z.string().optional().meta(d)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),cC=z.object({id:z.string().meta(d),name:z.string().meta(d),discount:z.string().meta(d),type:z.string().meta(d),status:z.string().meta(d)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),mC=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(d),label:z.string().min(1).meta(d),description:z.string().optional().meta(d),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z.string().optional().meta(d),example_value:z.string().optional().meta(d),value_map:z.record(z.string(),z.string()).optional().meta(d),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(d)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),zf=z.object({header:z.string().optional().meta(d),body:z.string().optional().meta(d),cta_label:z.string().optional().meta(d),secondary_cta_label:z.string().optional().meta(d)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),uC=z.object({block_id:z.string().min(1).meta(d),tenant_id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),surface_template_id:z.string().optional().meta(d),default_content:zf.meta(d),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:zf})).optional().meta(d),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(d),tokens_used:z.array(z.string()).optional().meta(d),status:z.enum(["draft","active","archived"]).meta(d),created_at:z.string().datetime().meta({...d,readOnly:true}),updated_at:z.string().datetime().meta({...d,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),dC=z.object({label:z.string().meta(d),path:sf.meta(d),config:z.record(z.string(),z.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),r_=z.object({template_id:z.string().min(1).meta(d),fields:z.record(z.string(),z.string()).meta(d),ctas:z.array(dC).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),a_=z.object({plan_ids:z.array(z.string()).meta(d),billing_cadences:z.array(z.string()).optional().meta(d),segment_chips:z.array(z.string()).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),pC=z.object({count:z.number().int().min(1).meta(d),period:z.enum(["session","day","week","month","lifetime"]).meta(d)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),i_=z.object({max_per_period:pC.optional().meta(d),cooldown_days:z.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),gC=z.object({id:z.string().min(1).meta(d),target:a_.meta(d),surfaces:z.array(r_).meta(d),caps:i_.optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().optional().meta({...d,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(d),recommendation_plan_override:z.string().optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),hC=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:bs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:bs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:bs}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),fC=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),_C=z.object({id:z.string().min(1).meta(d),name:z.string().min(1).meta(d),category:fC.meta(d),trigger:hC.meta(d),payloads:z.array(gC).meta(d),order:z.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),yC=z.object({payload_id:z.string().min(1).meta(d),placement_id:z.string().min(1).meta(d),target:a_.meta(d),caps:i_.optional().meta(d),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(d),created_at:z.string().meta({...d,readOnly:true}),updated_at:z.string().datetime().optional().meta({...d,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(d),surfaces:z.array(r_).optional().meta(d),surface_slot_ids:z.array(z.string()).optional().meta(d),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(d)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),vC=z.object({kind:z.string().min(1).meta(d),schema_version:z.number().int().nonnegative().meta(d),config:z.unknown().meta(d)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),bC=kn.merge(Qf).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Yi}),xC=kn.merge(Jf).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Yi}),SC=z.object({plans:z.array(HI).meta({...d,...bt}),addons:z.array(GI).optional().meta({...d,...uo}),entitlements:z.array(tC).meta({...d,...bt}),entitlement_rules:z.array(nC).meta({...d,...bt}),segments:z.array($I).meta({...d,...bt}),content_ui_paths:z.array(lC).meta({...d,...bt}),slot_configs:z.array(rC).optional().meta({...d,...bt,...Tm({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...d,...bt,...Tm({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...d,...OI,...Tm({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(aC).optional().meta({...d,...bt}),message_blocks:z.array(uC).optional().meta({...d,...bt}),placement_payloads:z.array(yC).optional().meta({...d,...bt}),placements:z.array(_C).optional().meta({...d,...bt}),content_promotions:z.array(cC).optional().meta({...d,...bt}),personalization_tokens:z.array(mC).optional().meta({...d,...bt}),surface_templates:z.array(sC).optional().meta({...d,...bt}),free_trial_rules:z.array(bC).optional().meta({...d,...uo}),reverse_trial_rules:z.array(xC).optional().meta({...d,...uo}),plan_variations:z.array(YI).optional().meta({...d,...uo}),addon_variations:z.array(WI).optional().meta({...d,...uo}),extension_rules:z.array(vC).optional().meta({...d,...bt}),seat_types:z.array(ZI).optional().meta({...d,...bt}),enforcement_defaults:z.array(QI).optional().meta({...d,...bt}),placement_settings:z.array(JI).optional().meta({...d,...bt}),segment_dimensions:z.array(XI).optional().meta({...d,...bt}),meter_bindings:z.array(eC).optional().meta({...d,...bt}),experiments:z.array(z.unknown()).max(0).optional().meta({...d,...Yi}),signal_catalog:z.object({}).strict().optional().meta({...d,...Yi})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),PC=z.object({artifact_type:z.literal("playbook").meta({...d,...ao,readOnly:true}),format_version:z.literal(DI).meta({...d,...ao,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...d,...ao}),playbook_version_id:z.string().nullable().default(null).meta({...d,...Wd,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...d,...Zd,readOnly:true}),environment_id:z.string().min(1).optional().meta({...d,...Zd,readOnly:true}),project_id:z.string().min(1).optional().meta({...d,...Zd,readOnly:true}),exported_at:z.string().datetime().optional().meta({...d,...Wd,readOnly:true}),schema_version:z.string().min(1).optional().meta({...d,...ao,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...d,...ao,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...d,...ao,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Wd}),s_=PC.extend(SC.shape).meta({"x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});function TC(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function o_(t){if(!TC(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(o_,s_).meta({id:"Playbook","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});z.preprocess(o_,s_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});({"/api/seat-type-anchors":{get:O({operationId:"listSeatTypeAnchors",requestParams:{query:tn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:en(UI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:O({operationId:"listSeatTypes",requestParams:{query:tn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:en(Hl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:O({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nr(Hl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:O({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:O({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:O({operationId:"listPersonalizationTokenAnchors",requestParams:{query:tn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:en(MI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:O({operationId:"listPersonalizationTokens",requestParams:{query:tn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:en(Gl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:O({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nr(Gl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Gl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:O({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Gl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:O({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:O({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:da(Qd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Qd}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:O({operationId:"listMeteringConfigs",requestParams:{query:tn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:en(Yl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:O({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nr(Yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:O({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",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:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:O({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:O({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:tn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:en(LI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:O({operationId:"listUsageEnforcementSettings",requestParams:{query:tn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:en(Wl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:O({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Nr(Wl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:O({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Wl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:O({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:O({operationId:"listPlacementSettingsAnchors",requestParams:{query:tn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:en(zI)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:O({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:da(Jd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Jd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});function fo(){return typeof window>"u"||typeof document>"u"}function Br(){return !fo()}var ec=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(t){let e=this.providers.get(t.domain);if(e&&this.unregister(e.domain),this.providers.set(t.domain,t),t.subscribe){let n=t.subscribe(r=>{this.cache.set(t.domain,{value:r,resolvedAt:Date.now(),ttlMs:t.cacheTtlMs??0});});this.unsubscribers.set(t.domain,n);}}unregister(t){this.providers.delete(t),this.cache.delete(t);let e=this.unsubscribers.get(t);e&&(e(),this.unsubscribers.delete(t));}clear(){for(let t of this.unsubscribers.values())t();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let t=Array.from(this.providers.entries()),e=await Promise.all(t.map(async([i,s])=>{let o=this.cache.get(i),_=Date.now();if(o&&o.ttlMs>0&&_-o.resolvedAt<o.ttlMs)return [i,o.value];let T=await s.resolve();return this.cache.set(i,{value:T,resolvedAt:_,ttlMs:s.cacheTtlMs??0}),[i,T]})),n={},r={},a=false;for(let[i,s]of e)if(i==="traits"||i.startsWith("traits:")){let o=s;o?.traits&&(Object.assign(r,o.traits),a=true);}else n[i]=s;return a&&(n.traits={traits:r}),n}async get(t){let e=this.providers.get(t);if(!e)return;let n=this.cache.get(t),r=Date.now();if(n&&n.ttlMs>0&&r-n.resolvedAt<n.ttlMs)return n.value;let a=await e.resolve();return this.cache.set(t,{value:a,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),a}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},CC=new Set(["cta_completed"]),EC=1440*60*1e3,l_=10080*60*1e3,RC="revturbine:interaction-state",c_=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??l_,this.defaultRemindLaterMs=t.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(t){let e=this.stateKey(t.placementId,t.userId,t.treatmentId),n=Date.now(),r=t.metadata??{},i={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(i.suppressedUntil=n+300*1e3),this.state.set(e,i),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),a=this.state.get(r);return a?.suppressedUntil?a.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:a.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(t,e,n){let r=this.stateKey(t,e,n);this.state.delete(r),this.persist();}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(n,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${RC}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},kC="revturbine:presentation-caps";function ho(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function AC(t){if(!ho(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 m_=class{constructor(t){this.capsByKey=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.hydrate();}enforce(t){let e=this.extractPolicies(t);if(e.length===0)return {allowed:true};let n=this.capKey(t),r=Date.now(),a=this.capsByKey.get(n)??{seenAt:[]},i={...a,seenAt:a.seenAt.filter(_=>Number.isFinite(_)&&_>0)},s=Vl({perPayload:{policies:e,seenAt:i.seenAt,cooldownUntil:i.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,i),{allowed:false,reason:s.reason};i.seenAt.push(r);let o=e.map(_=>_.cooldownMs).filter(_=>typeof _=="number"&&Number.isFinite(_)&&_>0);return o.length>0?i.cooldownUntil=r+Math.max(...o):delete i.cooldownUntil,this.capsByKey.set(n,i),this.persist(),{allowed:true}}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let a=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],i=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:a,cooldownUntil:i});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${kC}:${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,ho(t.content)?t.content.payload:void 0,ho(t.content)?t.content.placement:void 0,ho(t.content)?t.content.surface:void 0];for(let r of n){if(!ho(r))continue;let a=ho(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=AC(a.max_per_period);s&&i.push(s);let o=Number(a.cooldown_days),_=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:i,..._!==void 0?{cooldownMs:_}:{}});}return e}},_o=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 u_(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function d_(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 np=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??EC,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??l_;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordConversion(t,e,n,r){await this.appendRecord(t,"cta_completed",e,n,r),this.retireInCache(t);}async recordSuppression(t,e,n,r,a){let i=a??this.defaultSuppressionMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async isRetired(t){return (await this.getRetiredIds()).has(t)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let t=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=t,t}isRetiredSync(t){return this.retiredCache?.has(t)??false}isSuppressedSync(t){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(t);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(t),false):false}isHiddenSync(t){return this.isRetiredSync(t)||this.isSuppressedSync(t)}async queryHistory(t){return this.store.query(this.userId,t)}async hydrate(){this.retiredCache=await this.store.getRetiredPlacementIds(this.userId),this.suppressedCache=await this.store.getSuppressedPlacements(this.userId);}async reset(){await this.store.clear(this.userId),this.retiredCache=new Set,this.suppressedCache=new Map;}setUserId(t){this.userId=t,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(t,e,n,r,a){let i={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...a?{metadata:a}:{}};await this.store.append(this.userId,i);}retireInCache(t){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(t);}suppressInCache(t,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(t,e);}},wC=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=p_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return g_(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return h_(e)}clear(t){this.records.delete(t);}},jC="revturbine:impression-history",Mm=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=p_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return g_(e)}getSuppressedPlacements(t){let e=this.load(t);return h_(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${jC}:${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 p_(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(a=>r.has(a.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(a=>r.has(a.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(a=>new Date(a.occurredAt).getTime()>=r);}return n}function g_(t){let e=new Set;for(let n of t)CC.has(n.outcome)&&e.add(n.placementId);return e}function h_(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let a=t[r];if(e.has(a.placementId))continue;let i=a.metadata?.suppressUntil;typeof i=="string"&&new Date(i).getTime()>n&&e.set(a.placementId,i);}return e}function OC(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:t.planHandle,currentPlanName:t.planName??t.planHandle,...t.paymentFailed!==void 0?{paymentFailed:t.paymentFailed}:{},...t.paymentAtRisk!==void 0?{paymentAtRisk:t.paymentAtRisk}:{}})};r.push(a);}if(e.entitlements?.length){let a=t.defaultEntitlementPolicy??"allow",i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},o={};for(let _ of e.entitlements??[]){s[_.unique_handle]={status:a==="allow"?"allowed":"denied",allowed:a==="allow",reason:`static_config_default_${a}`};let T=t.usage?.[_.unique_handle];T&&(o[_.unique_handle]={used:T.used,limit:T.limit,remaining:Math.max(0,T.limit-T.used),unit:_.unit});}return {entries:s,usage:o,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(i);}if(e.segments?.length){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(i=>i.handle),segmentSlugs:(e.segments??[]).map(i=>i.handle)})};r.push(a);}if(e.entitlement_rules?.length){let a={domain:"rules",cacheTtlMs:n,resolve:()=>{let i={},s=new Map;for(let _ of e.entitlements??[]){let T=_;typeof T.unique_handle=="string"&&typeof T.type=="string"&&s.set(T.unique_handle,T.type);}for(let _ of e.entitlement_rules??[]){let T=_.entitlement_id;i[T]||(i[T]=[]);let P=_,C=Array.isArray(P.segment_ids)?P.segment_ids.filter(E=>typeof E=="string"):typeof P.segment_id=="string"&&P.segment_id!=="all"?[P.segment_id]:[],R=Array.isArray(P.plan_ids)?P.plan_ids.filter(E=>typeof E=="string"):[],I={ruleId:_.id,entitlementId:T,planIds:(_.targets??[]).length>0?(_.targets??[]).filter(E=>E.kind==="plan").map(E=>E.id):R,segmentIds:C,kind:(()=>{let E=typeof P.type_fields=="object"&&P.type_fields!==null?P.type_fields:{};return (typeof P.kind=="string"?P.kind:void 0)??(typeof E.kind=="string"?E.kind:void 0)??s.get(T)??"feature"})(),fields:{...typeof P.type_fields=="object"&&P.type_fields!==null?P.type_fields:{},...P}};i[T].push(I);}let o={};for(let _ of e.segments??[])typeof _.dimension_id=="string"&&typeof _.handle=="string"&&(o[_.handle]=_.dimension_id);return {entitlementRules:i,segmentDimensions:o,configVersion:fm(e)}}};r.push(a);}if(e.message_blocks?.length||e.personalization_tokens?.length){let a={domain:"content",cacheTtlMs:n,resolve:()=>{let i={};for(let s of e.message_blocks??[])i[s.block_id]={blockId:s.block_id,name:s.name,defaultContent:s.default_content,segmentOverrides:s.segment_overrides?.map(o=>({segmentId:o.segment_value_id,content:o.content})),status:s.status};return {messageBlocks:i,personalization:{}}}};r.push(a);}if(e.theme&&Object.keys(e.theme).length>0){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}function qC(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let a=e.user_context,i={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:a.plan_handle??"unknown",currentPlanName:a.plan_name,billingPeriod:a.billing_period,trialActive:a.trial_active,trialLimitType:a.trial_limit_type,trialProgressPercent:a.trial_progress_percent,trialDaysRemaining:a.trial_days_remaining,trialDaysTotal:a.trial_days_total,trialState:a.trial_state,trialUsageEntitlementHandle:a.trial_usage_entitlement_handle,trialUsageConsumed:a.trial_usage_consumed,trialUsageLimit:a.trial_usage_limit})};r.push(i);}if(e.entitlements){let a=e.entitlements,i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[o,_]of Object.entries(a))s[o]=_;return {entries:s}}};r.push(i);}if(e.user_context){let a=e.user_context;if(Array.isArray(a.segment_ids)){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:a.segment_ids})};r.push(i);}}if(e.user_context){let a=e.user_context;if(a.traits&&typeof a.traits=="object"){let i={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:a.traits})};r.push(i);}}if(e.theme){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}var f_=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new _o;this.registry=new ec;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new c_({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new m_({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new np({store:t.impressionStore??new wC,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new Td({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:t.engineOptions,placements:this.registeredPlacements,placementResolver:n});}registerPlacement(t){this.registeredPlacements.set(t.id,t);}async getPlacementDecision(t){return this.engine.evaluate(t)}async getPlacementDecisions(t){return this.engine.evaluateBatch(t)}async getPlacement(t){let e=this.slotRecordForConfig(t);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(t,e){let n=await this.engine.checkEntitlement(t,e);if(n.reason==="no_entitlement_provider"){let r=await this.engine.resolveProviders();return this.deriveEntitlementFromConfig(t,e,r.plan?.currentPlanHandle??"")}return n}trackInteraction(t){this.engine.trackInteraction(t);}clearSuppression(t,e){this.interactionTracker.clearSuppression(t,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(t){let e=this.exportedConfig.segments??[];return Ll(e,t)}buildTargetingState(t,e){return wm(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return Lf({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 Xs({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return Ml({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},DC=["web-client","server"],UC=z.enum(DC),MC=["method","meta","component"],FC=z.enum(MC),LC=["ts","python","java","csharp","rust"];z.enum(LC);var NC=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(),VC=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:FC,appliesTo:z.array(UC).min(1),composes:z.string().min(1).optional(),perLanguage:NC.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"]}),BC=z.object({version:z.number().int().positive(),functions:z.array(VC).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});BC.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 zC=[{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 KC(){let t=[];for(let[e,n]of Object.entries(Kd))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function $C(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($C([...KC(),...zC]));var __="traits:server",tc=class{constructor(){k(this,"domain",__);k(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 rp={workspace_name:"Your workspace",theme:{}};function y_(t){return !!t&&Object.keys(t).length>0}var v_=false;function ap(t={}){let e=(n,r)=>({branding:{...rp,...n,theme:{...rp.theme,...n?.theme}},source:r});return y_(t.explicit)?e(t.explicit,"explicit"):y_(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!v_&&Gs()&&(v_=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 b_="[REDACTED]",HC=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,GC=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,YC=/\d(?:[ -]?\d){12,18}/g;function WC(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let a=t.charCodeAt(r)-48;if(a<0||a>9)return false;if(n){let i=a*2;i>9&&(i-=9),e+=i;}else e+=a;n=!n;}return e%10===0}function ZC(t){let e=0,n=t.replace(HC,()=>(e+=1,b_));return n=n.replace(YC,r=>{let a=r.replace(/[ -]/g,"");return a.length>=13&&a.length<=19&&WC(a)?(e+=1,b_):r}),{value:n,count:e}}function ip(t){let e=0,n=r=>{if(typeof r=="string"){let a=ZC(r);return e+=a.count,a.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let a={};for(let[i,s]of Object.entries(r))a[i]=n(s);return a}return r};return {value:n(t),redactions:e}}function QC(t){return GC.test(t.trim())}function JC(t){let e=t.trim().toLowerCase();return `eml_${t0(e).slice(0,16)}`}function sp(t){return QC(t)?{value:JC(t),redacted:true}:{value:t,redacted:false}}function x_(t){let e=sp(t.user_id??""),n=ip({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 XC=[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 e0(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t.charCodeAt(n);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6,128|r&63);else if(r>=55296&&r<=56319){let a=r,i=t.charCodeAt(n+1);n+=1,r=65536+((a&1023)<<10)+(i&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function ci(t,e){return t>>>e|t<<32-e}function t0(t){let e=e0(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let R=0;R<4;R+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,a=3144134277,i=1013904242,s=2773480762,o=1359893119,_=2600822924,T=528734635,P=1541459225,C=new Array(64);for(let R=0;R<e.length;R+=64){for(let H=0;H<16;H+=1){let Ze=R+H*4;C[H]=(e[Ze]<<24|e[Ze+1]<<16|e[Ze+2]<<8|e[Ze+3])>>>0;}for(let H=16;H<64;H+=1){let Ze=ci(C[H-15],7)^ci(C[H-15],18)^C[H-15]>>>3,Yt=ci(C[H-2],17)^ci(C[H-2],19)^C[H-2]>>>10;C[H]=C[H-16]+Ze+C[H-7]+Yt>>>0;}let I=r,E=a,j=i,ne=s,G=o,pe=_,Re=T,J=P;for(let H=0;H<64;H+=1){let Ze=ci(G,6)^ci(G,11)^ci(G,25),Yt=G&pe^~G&Re,pr=J+Ze+Yt+XC[H]+C[H]>>>0,ie=ci(I,2)^ci(I,13)^ci(I,22),Wt=I&E^I&j^E&j,ln=ie+Wt>>>0;J=Re,Re=pe,pe=G,G=ne+pr>>>0,ne=j,j=E,E=I,I=pr+ln>>>0;}r=r+I>>>0,a=a+E>>>0,i=i+j>>>0,s=s+ne>>>0,o=o+G>>>0,_=_+pe>>>0,T=T+Re>>>0,P=P+J>>>0;}return [r,a,i,s,o,_,T,P].map(R=>R.toString(16).padStart(8,"0")).join("")}var S_={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"},P_="control_plane_source";function op(t,e={}){return {eventName:t,properties:{[P_]:S_[t],...e}}}var nc=class{constructor(e){k(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 Zi(t){if(t)return t;if(Br())try{return new nc(window.localStorage)}catch{}return new _o}function lp(t){if(t)return t;if(Br())try{return new nc(window.sessionStorage)}catch{}return new _o}var n0=/^[a-z0-9._]{1,100}$/,An={Persisted:"persisted",Transient:"transient"},Pn={Internal:"internal",External:"external"},gn={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 F_="x-revturbine-schema-exposure",a0="readOnly",i0="x-revturbine-decision-only",T_={[i0]:true},ga={[F_]:Pn.External},s0={[F_]:Pn.Internal};function Ur(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[a0]===true||(e[n]=r);}return z.object(e)}function Dr(t){let e=Ur(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(n0)}):e}var {Unrestricted:_r}=gn,{Transient:$r,Persisted:o0}=An,{Internal:Ps,External:di}=Pn;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":$r,"x-revturbine-schema-exposure":di});var l0=t=>z.object({items:z.array(t).meta(_r),total:z.number().int().min(0).meta(_r),page:z.number().int().min(1).meta(_r),per_page:z.number().int().min(1).meta(_r),has_more:z.boolean().meta(_r)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di}),Ae=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":$r,"x-revturbine-schema-exposure":di}),ge=z.object({id:z.string().min(1).meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di}),$e=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":Ps});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di});var $m=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di}),L_=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di});var Ep=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di}),c0=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":di});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":Ps});var Gn=z.string().min(1).max(200),hn=z.string().min(1).max(100),Ts=z.string().max(500).optional(),Ln=z.record(z.string(),z.unknown()).default({}),mc=z.number().int().min(10).max(100).multipleOf(10),Dn=z.string().datetime().nullable().default(null),vn=z.object({environment_id:z.string().min(1).default("production").meta({..._r,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":Ps}),Tn=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":$r,"x-revturbine-schema-exposure":Ps}),m0=ge.merge(Ae).merge($e).merge(vn).extend({handle:hn.meta({..._r,readOnly:true}),active:z.boolean().default(true).meta({..._r,readOnly:true})});function mr(t){return m0.meta({id:t,"x-revturbine-schema-persistence":o0,"x-revturbine-schema-exposure":Ps})}var Rp=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":$r,"x-revturbine-schema-exposure":Ps}),u0=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":$r,"x-revturbine-schema-exposure":Ps}),N_=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":$r,"x-revturbine-schema-exposure":di}),Vt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ya={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},d0="x-revturbine-context",p0="x-revturbine-in-config",g0="x-revturbine-sdk-input",h0="x-revturbine-source",f0="x-revturbine-deprecation",_0={[Vt.Playbook]:Ya.Customer,[Vt.Branding]:Ya.Customer,[Vt.Billing]:Ya.Stripe,[Vt.Metering]:Ya.Customer,[Vt.CustomerOperations]:Ya.Runtime,[Vt.EventIngestion]:Ya.Runtime};function dn(t,e){return {[d0]:t,[p0]:e.inConfig??t===Vt.Playbook,[g0]:e.sdkInput,[h0]:e.source??_0[t]}}function cp(t){return {deprecated:true,[f0]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var V_={Named:"named",Minted:"minted"},B_="x-revturbine-schema-identity";function Mr(t="handle"){return {[B_]:{kind:V_.Named,handleField:t}}}function Oa(t="handle"){return {[B_]:{kind:V_.Minted,handleField:t}}}var se=t=>z.object({items:z.array(t)}),yt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),y=t=>t,oe=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:$t,Financial:Km}=gn,{Persisted:gc,Transient:Hm}=An,{External:Di}=Pn,y0=dn(Vt.Playbook,{sdkInput:true}),v0=dn(Vt.Playbook,{sdkInput:false}),kp=dn(Vt.Billing,{sdkInput:false}),ts=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Di}),hc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Di}),Gm=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Di}),Io=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:Gn.meta($t),handle:hn.meta($t),tier_position:z.number().int().min(0).default(0).meta($t),sort_order:z.number().int().default(0).meta($t),visibility:ts.default("public").meta($t),metadata:Ln.meta($t)}).meta({id:"Plan","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":Di,...y0,...Mr()}),b0=mr("PlanAnchor"),Co=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:hn.meta({...$t,readOnly:true}),plan_id:z.string().min(1).meta($t),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta($t),segment_id:z.string().nullable().default(null).meta($t),price_amount:z.number().min(0).meta(Km),pricing_model:hc.meta($t),visibility:ts.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:Gm.default("static").meta($t)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":Di,...kp,...Oa()}),x0=mr("PlanVariationAnchor"),Eo=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:Gn.meta($t),handle:hn.meta($t),sort_order:z.number().int().default(0).meta($t),visibility:ts.default("public").meta($t),metadata:Ln.meta($t)}).meta({id:"AddOn","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":Di,...v0,...Mr()}),S0=mr("AddOnAnchor"),Ro=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:hn.meta({...$t,readOnly:true}),addon_id:z.string().min(1).meta($t),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta($t),segment_id:z.string().nullable().default(null).meta($t),price_amount:z.number().min(0).meta(Km),pricing_model:hc.meta($t),visibility:ts.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:Gm.default("static").meta($t)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":Di,...kp,...Oa()}),P0=mr("AddOnVariationAnchor"),T0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Hm,"x-revturbine-schema-exposure":Di}),ko=ge.merge(Ae).merge($e).extend({stripe_price_id:z.string().min(1).meta($t),stripe_product_id:z.string().min(1).meta($t),billing_period:T0.meta($t),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Km),currency:c0.meta(Km),pricing_model:hc.meta($t),nickname:z.string().nullable().default(null).meta($t),is_mock:z.boolean().default(false).meta($t),last_updated_from_stripe:Dn.meta($t)}).meta({id:"StripePrice","x-revturbine-schema-persistence":gc,"x-revturbine-schema-exposure":Di,...kp});var I0=Ur(Io),C0=Ur(Co),E0=Ur(Eo),R0=Ur(Ro),k0=Ur(ko);({"/api/plan-anchors":{get:y({operationId:"listPlanAnchors",requestParams:{query:oe},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:se(b0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:y({operationId:"listPlans",requestParams:{query:oe},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:se(Io)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:y({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dr(Io)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Io}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:y({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Io}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:y({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:I0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Io}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:y({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:y({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:y({operationId:"listPlanVariationAnchors",requestParams:{query:oe},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:se(x0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:y({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:oe},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:se(Co)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:y({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dr(Co)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:y({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:y({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:C0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:y({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:y({operationId:"listAddOnAnchors",requestParams:{query:oe},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:se(S0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:y({operationId:"listAddOns",requestParams:{query:oe},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:se(Eo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:y({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dr(Eo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Eo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:y({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Eo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:y({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:E0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Eo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:y({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:y({operationId:"listAddOnVariationAnchors",requestParams:{query:oe},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:se(P0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:y({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:oe},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:se(Ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:y({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dr(Ro)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:y({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:y({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:R0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:y({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:y({operationId:"listStripePrices",requestParams:{query:oe},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:se(ko)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:y({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Dr(ko)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:y({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:y({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:k0}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:ko}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:y({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:be}=gn,{Persisted:Ap,Transient:ha}=An,{Internal:z_,External:na}=Pn,K_=dn(Vt.Playbook,{sdkInput:true}),A0=dn(Vt.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":ha,"x-revturbine-schema-exposure":na}),Ym=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),w0=z.enum(L_).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),j0=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),H_=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),uc=z.object({entitlement_id:z.string().min(1).meta(be),entitlement_handle:z.string().min(1).meta(be),status:w0.meta(be),limit:z.number().optional().meta(be),used:z.number().optional().meta(be),allocation:Ym.optional().meta(be),enforcement:H_.optional().meta(be),source:j0.optional().meta(be),plan_id:z.string().optional().meta(be),segment_id:z.string().optional().meta(be),seat_type_id:z.string().optional().meta(be),rule_id:z.string().optional().meta(be)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na,...gn.Operational});z.object({account:z.record(z.string(),uc).optional().meta(be),instance:z.record(z.string(),uc).optional().meta(be),user:z.record(z.string(),uc).optional().meta(be)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na,...gn.Operational});var O0=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),q0=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),G_=z.object({kind:q0.meta(be),id:z.string().min(1).meta(be)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),D0=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),Ao=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...be,readOnly:true}),name:Gn.meta(be),handle:hn.meta(be),customer_facing_description:z.string().max(500).optional().meta(be),type:Ep.meta(be),unit:z.string().max(100).optional().meta(be),period_scope:$_.optional().meta(be),allocation:Ym.optional().meta(be),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(be),sort_order:z.number().int().default(0).meta(be),metadata:Ln.meta(be)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Ap,"x-revturbine-schema-exposure":na,...K_,...Mr()}),U0=mr("EntitlementAnchor"),qo=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...be,readOnly:true}),handle:hn.meta({...be,readOnly:true}),entitlement_id:z.string().min(1).meta(be),targets:z.array(G_).min(1).meta(be),segment_ids:z.array(z.string()).default([]).meta(be),visibility:O0.default("public").meta(be),period_scope:$_.optional().meta(be),instance:z.string().max(100).optional().meta(be),reset_period:D0.optional().meta(be),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(be),enforcement:H_.optional().meta(be),warning_threshold_percent:mc.optional().meta(be),overage_price_ref:z.string().optional().meta(be),grace_period_hours:z.number().int().min(0).optional().meta(be),tier_value:z.string().optional().meta(be),rate_value:z.number().optional().meta(be),initial_grant:z.number().optional().meta(be),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(be),rollover_enabled:z.boolean().optional().meta(be),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(be),seat_type_id:z.string().optional().meta(be),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(be),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(be),stripe_metered_price_id:z.string().optional().meta(be),enabled:z.boolean().optional().meta(be),allocation:Ym.optional().meta(be),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(be),amount_cents:z.number().int().optional().meta(be),currency:z.string().optional().meta(be)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Ap,"x-revturbine-schema-exposure":z_,...K_,...Oa()}),M0=mr("EntitlementRuleAnchor");qo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var F0=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),L0=z.object({code:F0.meta(be),message:z.string().min(1).meta(be),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(be)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na}),mp=qo.extend({warnings:z.array(L0).optional().meta(be)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":na});var up=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({handle:hn.meta({...be,readOnly:true}),rule_id:z.string().min(1).meta(be),experiment_id:z.string().min(1).meta(be),variant_name:z.string().min(1).max(200).meta(be),is_control:z.boolean().default(false).meta(be),override_fields:z.record(z.string(),z.unknown()).default({}).meta(be)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Ap,"x-revturbine-schema-exposure":z_,...A0,...Oa()}),N0=Ur(Ao),V0=Ur(qo);({"/api/entitlement-anchors":{get:y({operationId:"listEntitlementAnchors",requestParams:{query:oe},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:se(U0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:y({operationId:"listEntitlementRuleAnchors",requestParams:{query:oe},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:se(M0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:y({operationId:"listEntitlements",requestParams:{query:oe},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:se(Ao)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:y({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Dr(Ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:y({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:y({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:N0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:y({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:y({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:oe},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:se(qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:y({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Dr(qo)}}},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:y({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:V0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:y({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:mp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:y({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:oe},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:se(up)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:y({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Dr(up)}}},responses:{201:{description:"Created",content:{"application/json":{schema:up}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Fe}=gn,{Persisted:Wm,Transient:ns}=An,{External:qa}=Pn,Y_=dn(Vt.Playbook,{sdkInput:true});dn(Vt.Playbook,{inConfig:false,sdkInput:false});var B0=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),z0=dn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ya.Runtime}),K0=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var W_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa}),Z_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa}),$0=z.object({count:z.number().int().positive().meta(Fe),period:Z_.meta(Fe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa});z.object({surface_type:z.string().min(1).meta(Fe),rules:z.array($0).meta(Fe),cooldown_ms:z.number().int().nonnegative().optional().meta(Fe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Wm,"x-revturbine-schema-exposure":qa,...gn.Operational,...B0});var H0=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":ns,"x-revturbine-schema-exposure":qa}),jo=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Fe,readOnly:true}),name:Gn.meta(Fe),handle:hn.meta(Fe),description:Ts.meta(Fe),category:W_.meta(Fe),drag_order_in_category:z.number().int().default(0).meta(Fe),surface_slot_id:z.string().optional().meta(Fe),entitlement_id:z.string().optional().meta(Fe),tier_threshold:z.string().optional().meta(Fe),threshold_percent:mc.optional().meta(Fe),trial_type:z.enum(["free","reverse"]).optional().meta(Fe),trigger_type:z.string().optional().meta(Fe),trial_progress_percent:z.number().min(0).max(100).optional().meta(Fe),days_before_end:z.number().int().min(0).optional().meta(Fe),qualifier:K0.optional().meta(Fe),activation_window_start:z.string().datetime().optional().meta(Fe),activation_window_end:z.string().datetime().optional().meta(Fe),metadata:Ln.meta(Fe)}).meta({id:"Placement","x-revturbine-schema-persistence":Wm,"x-revturbine-schema-exposure":qa,...Y_,...Mr()}),G0=mr("PlacementAnchor"),Y0=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa}),W0=z.object({code:Y0.meta(Fe),message:z.string().min(1).meta(Fe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Fe)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa}),I_=jo.extend({warnings:z.array(W0).optional().meta(Fe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa});var Z0=z.object({label:z.string().min(1).max(200).meta(Fe),cta_path_type:H0.meta(Fe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Fe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ns,"x-revturbine-schema-exposure":qa}),lc=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Fe,readOnly:true}),handle:hn.meta({...Fe,readOnly:true}),placement_id:z.string().min(1).meta(Fe),drag_order:z.number().int().default(0).meta(Fe),target_plan_ids:z.array(z.string()).default([]).meta(Fe),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Fe),target_segments:z.array(z.string()).default([]).meta(Fe),surface_slot_ids:z.array(z.string()).default([]).meta(Fe),surface_template_id:z.string().min(1).meta(Fe),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Fe),cta_list:z.array(Z0).default([]).meta(Fe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Fe),max_period_unit:Z_.default("session").meta(Fe),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Fe),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Fe),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Fe),recommendation_plan_override:z.string().optional().meta(Fe)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Wm,"x-revturbine-schema-exposure":qa,...Y_,...Oa()}),Q0=mr("PlacementPayloadAnchor"),J0=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Fe),surface_type:$m.meta(Fe),surface_template_ids:z.array(z.string()).default([]).meta(Fe),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Fe),first_seen:z.string().datetime().meta({...Fe,readOnly:true}),last_seen:z.string().datetime().meta({...Fe,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Fe),placement_count:z.number().int().min(0).default(0).meta({...Fe,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Wm,"x-revturbine-schema-exposure":qa,...z0,...Mr("surface_slot_handle")}),X0=Ur(jo),eE=Ur(lc);({"/api/placement-anchors":{get:y({operationId:"listPlacementAnchors",requestParams:{query:oe},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:se(G0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:y({operationId:"listPlacements",requestParams:{query:oe},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:se(jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:y({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Dr(jo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:I_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:y({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:y({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:X0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:I_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:y({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:y({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:y({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:W_,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:y({operationId:"listPlacementPayloadAnchors",requestParams:{query:oe},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:se(Q0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:y({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:oe},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:se(lc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:y({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Dr(lc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:lc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:y({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:eE}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:y({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:y({operationId:"listSurfaceSlots",requestParams:{query:oe},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:se(J0)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:qr,Pii:Do}=gn,{Persisted:wp,Transient:jp}=An,{Internal:Mo}=Pn,tE=dn(Vt.CustomerOperations,{sdkInput:false}),nE=z.object({external_id:z.string().min(1).meta(Do),traits:z.record(z.string(),z.unknown()).default({}).meta(Do),plan_id:z.string().optional().meta(qr)}).meta({id:"Identity","x-revturbine-schema-persistence":wp,"x-revturbine-schema-exposure":Mo}),Q_=z.enum(["payment_failed","payment_method_missing"]),C_=ge.merge(Ae).merge($e).extend({external_id:z.string().min(1).meta(Do),identity:nE.meta(Do),stripe_customer_id:z.string().optional().meta(qr),current_plan_id:z.string().optional().meta(qr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(qr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(qr),billing_health_issues:z.array(Q_).default([]).meta(qr),metadata:Ln.meta(qr)}).meta({id:"Customer","x-revturbine-schema-persistence":wp,"x-revturbine-schema-exposure":Mo}),rE=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":jp,"x-revturbine-schema-exposure":Mo}),aE=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":jp,"x-revturbine-schema-exposure":Mo}),iE=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":jp,"x-revturbine-schema-exposure":Mo}),Qi=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({handle:hn.meta({...qr,readOnly:true}),customer_id:z.string().min(1).meta(Do),customer_id_list:z.array(z.string()).optional().meta(Do),override_type:aE.meta(qr),target_id:z.string().min(1).meta(qr),value:z.record(z.string(),z.unknown()).default({}).meta(qr),duration_type:rE.default("permanent").meta(qr),duration_value:z.string().optional().meta(qr),expiry_date:Dn.meta(qr),status:iE.default("active").meta(qr),reason:z.string().max(500).optional().meta(qr),created_by:z.string().optional().meta(qr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":wp,"x-revturbine-schema-exposure":Mo,...tE,...Oa()});({"/api/customers":{get:y({operationId:"listCustomers",requestParams:{query:oe},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:se(C_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:y({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:C_}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:y({operationId:"listCustomerOverrides",requestParams:{query:oe},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:se(Qi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:y({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:y({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Qi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:y({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:y({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:y({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:we,Pii:cc,Financial:dp}=gn,{Persisted:J_,Transient:pi}=An,{External:Fo,Internal:fc}=Pn,Op=z.object({in_trial:z.boolean().meta(we),trial_type:z.string().optional().meta(we),plan_handle:z.string().optional().meta(we),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(we),trial_limit_type:z.enum(["time","usage"]).optional().meta(we),progress_percent:z.number().min(0).max(100).optional().meta(we),day_number:z.number().int().min(0).optional().meta(we),days_remaining:z.number().int().min(0).optional().meta(we),usage_entitlement_handle:z.string().optional().meta(we),usage_consumed:z.number().int().min(0).optional().meta(we),usage_remaining:z.number().int().min(0).optional().meta(we),usage_limit:z.number().int().min(0).optional().meta(we)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fo}),X_=z.object({entitlement_handle:z.string().min(1).meta(we),unit:z.string().min(1).meta(we),amount:z.number().min(0).meta(we),limit:z.number().min(0).optional().meta(we),reset_date:z.string().optional().meta(we)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fo});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fo});var ey=z.object({handle:z.string().min(1).meta(we),name:z.string().min(1).meta(we),price:z.string().optional().meta(we),billing_period:z.enum(["monthly","annual","none"]).optional().meta(we)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":Fo}),sE=z.object({product_instance_id:z.string().min(1).meta(we),user_id:z.string().min(1).meta(cc),plan:ey.optional().meta(we),usage:z.record(z.string(),X_).default({}).meta(we),trial:Op.optional().meta(we),entitlements:z.record(z.string(),z.union([z.boolean(),uc])).default({}).meta(we)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":J_,"x-revturbine-schema-exposure":Fo}),yo=ge.merge($e).merge(Ae).extend({user_id:z.string().min(1).meta(cc),account_id:z.string().min(1).nullable().optional().meta(cc),email:z.string().email().nullable().optional().meta(cc),email_type:z.string().optional().meta(we),plan_handle:z.string().min(1).optional().meta(we),plan:ey.optional().meta(we),usage:z.record(z.string(),X_).default({}).meta(we),trial:Op.optional().meta(we),payment_failed:z.boolean().optional().meta(we),payment_at_risk:z.boolean().optional().meta(we),tiers:z.record(z.string(),z.string()).optional().meta(we),entitlements:z.record(z.string(),z.union([z.boolean(),uc])).default({}).meta(we),instances:z.array(sE).optional().meta(we),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(cc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...we,"x-revturbine-schema-persistence":pi}),derived_config_version:z.string().nullable().optional().meta(we),context_hash:z.string().nullable().optional().meta(we),derived_computed_at:Dn.meta(we),activity_score:z.number().int().min(0).nullable().optional().meta(we),activity_score_computed_at:z.string().datetime().nullable().optional().meta(we),experiments:z.record(z.string(),z.string()).optional().meta(we)}).meta({id:"UserContext","x-revturbine-schema-persistence":J_,"x-revturbine-schema-exposure":Fo}),oE=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...we,...ga}),days_remaining:z.number().int().min(0).optional().meta({...we,...ga}),ends_at:z.string().optional().meta({...we,...ga})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":fc}),lE=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...we,...ga}),failed_payment_reason:z.string().optional().meta({...dp,...T_}),issues:z.array(Q_).optional().meta({...dp,...T_}),provider_subscription_id:z.string().optional().meta({...dp,...s0})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":fc}),cE=z.object({can_upgrade:z.boolean().optional().meta({...we,...ga}),can_manage_billing:z.boolean().optional().meta({...we,...ga})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":fc}),mE=z.object({handle:z.string().min(1).optional().meta({...we,...ga}),name:z.string().min(1).optional().meta({...we,...ga})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":fc});z.object({subject:z.string().min(1).meta({...we,...ga}),context_version:z.string().optional().meta({...we,...ga}),trial:oE.optional().meta({...we,...ga}),billing:lE.optional().meta({...we,...ga}),plan:mE.optional().meta({...we,...ga}),capabilities:cE.optional().meta({...we,...ga})}).meta({id:"ClientContext","x-revturbine-schema-persistence":pi,"x-revturbine-schema-exposure":fc});({"/api/user-contexts":{get:y({operationId:"listUserContexts",requestParams:{query:oe},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:se(yo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:y({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:y({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:yo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:y({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:Xn}=gn,{Persisted:qp,Transient:ty}=An,{Internal:_c}=Pn,uE=dn(Vt.Playbook,{sdkInput:true}),ny=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),dE=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":_c}),pE=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":_c}),pp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:Gn.meta(Xn),handle:hn.optional().meta(Xn),category:dE.default("custom").meta(Xn),visibility_toggle:z.boolean().default(true).meta(Xn),source_type:pE.default("system").meta(Xn),estimated_size:z.number().int().min(0).optional().meta(Xn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":qp,"x-revturbine-schema-exposure":_c,...ny,...Mr()}),gE=mr("SegmentDimensionAnchor"),gp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),dimension_id:z.string().min(1).meta(Xn),name:Gn.meta(Xn),handle:hn.meta(Xn),description:Ts.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":qp,"x-revturbine-schema-exposure":_c,...ny,...Mr()}),hE=mr("SegmentValueAnchor");ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Xn,readOnly:true}),name:Gn.meta(Xn),handle:hn.meta(Xn),description:Ts.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:Ln.meta(Xn)}).meta({id:"Segment","x-revturbine-schema-persistence":qp,"x-revturbine-schema-exposure":_c,...uE,...Mr()});({"/api/segment-dimension-anchors":{get:y({operationId:"listSegmentDimensionAnchors",requestParams:{query:oe},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:se(gE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:y({operationId:"listSegmentValueAnchors",requestParams:{query:oe},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:se(hE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:y({operationId:"listSegmentDimensions",requestParams:{query:oe},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:se(pp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:y({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:pp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:y({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:y({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:y({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:oe},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:se(gp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:y({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:gp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:y({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:gp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:y({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:gt}=gn,{Persisted:Lo,Transient:ry}=An,{External:rs}=Pn,Dp=dn(Vt.Playbook,{sdkInput:true}),fE=dn(Vt.Playbook,{inConfig:false,sdkInput:false}),_E=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),yE=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ya.CodeConstant});ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true}),handle:hn.meta({...gt,readOnly:true}),name:Gn.meta(gt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(gt),subject:z.string().max(500).optional().meta(gt),body:z.string().meta(gt),template_variables:z.array(z.string()).default([]).meta(gt),metadata:Ln.meta(gt)}).meta({id:"Message","x-revturbine-schema-persistence":Lo,"x-revturbine-schema-exposure":rs,...fE,...Oa()});var hp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true}),name:Gn.meta(gt),handle:hn.meta(gt),action_type:N_.meta(gt),target_url:z.string().optional().meta(gt),target_plan_id:z.string().optional().meta(gt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(gt),metadata:Ln.meta(gt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Lo,"x-revturbine-schema-exposure":rs,...Dp,...Mr()}),vE=mr("CtaPathAnchor"),bE=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":Lo,"x-revturbine-schema-exposure":rs,...yE}),xE=z.object({name:z.string().min(1),field_type:bE,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":Lo,"x-revturbine-schema-exposure":rs,..._E}),fp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true}),name:Gn.meta(gt),handle:hn.meta(gt),surface_type:u0.meta(gt),field_definitions:z.array(xE).default([]).meta(gt),description:Ts.meta(gt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Lo,"x-revturbine-schema-exposure":rs,...Dp,...Mr()}),SE=mr("SurfaceTemplateAnchor"),_p=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...gt,readOnly:true}),name:Gn.meta(gt),handle:hn.meta(gt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(gt),variation_dimension_id:z.string().optional().meta(gt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(gt),notes:z.string().max(1e3).optional().meta(gt),used_in_count:z.number().int().min(0).default(0).meta({...gt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Lo,"x-revturbine-schema-exposure":rs,...Dp,...Mr()}),PE=mr("MessageBlockRecordAnchor"),TE=z.object({segment_id:z.string().min(1).meta(gt),message_block_id:z.string().min(1).meta(gt),ui_path_id:z.string().optional().meta(gt),promotion_id:z.string().optional().meta(gt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":rs});z.object({payload_id:z.string().min(1).meta(gt),tenant_id:z.string().min(1).meta(gt),name:Gn.meta(gt),surface_template_id:z.string().min(1).meta(gt),default_message_block_id:z.string().min(1).meta(gt),segment_content_map:z.array(TE).optional().meta(gt),ui_path_id:z.string().optional().meta(gt),promotion_id:z.string().optional().meta(gt),status:z.enum(["draft","active","inactive"]).meta(gt),created_at:z.string().datetime().optional().meta({...gt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...gt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ry,"x-revturbine-schema-exposure":rs});({"/api/surface-template-anchors":{get:y({operationId:"listSurfaceTemplateAnchors",requestParams:{query:oe},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:se(SE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:y({operationId:"listSurfaceTemplates",requestParams:{query:oe},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:se(fp)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:y({operationId:"listMessageBlockRecordAnchors",requestParams:{query:oe},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:se(PE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:y({operationId:"listMessageBlocks",requestParams:{query:oe},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:se(_p)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:y({operationId:"listCtaPathAnchors",requestParams:{query:oe},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:se(vE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:y({operationId:"listCtaPaths",requestParams:{query:oe},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:se(hp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Oo,Pii:IE}=gn,{Persisted:ay}=An,{Internal:CE,External:EE}=Pn,RE=dn(Vt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Oo,readOnly:true}),name:z.string().min(1).max(120).meta(Oo),mode:z.enum(["light","dark","system"]).default("system").meta(Oo),tokens:z.record(z.string(),z.string()).default({}).meta(Oo)}).meta({id:"Theme","x-revturbine-schema-persistence":ay,"x-revturbine-schema-exposure":EE,...RE});var E_=ge.merge(Ae).extend({user_id:z.string().min(1).meta(IE),scope:z.string().min(1).meta(Oo),preferences:z.record(z.string(),z.unknown()).default({}).meta(Oo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":ay,"x-revturbine-schema-exposure":CE});({"/api/ui-preferences":{get:y({operationId:"listUiPreferences",requestParams:{query:oe},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:se(E_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:y({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Ur(E_))}}},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:St,Financial:mi}=gn,{Persisted:iy,Transient:yc}=An,{External:vc,Internal:sy}=Pn,kE=z.object({month:z.string().meta(St),cohort_size:z.number().int().min(0).meta(St),retained:z.number().int().min(0).meta(St),retention_rate:z.number().min(0).max(1).meta(St),revenue_cents:z.number().int().min(0).meta(mi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":yc,"x-revturbine-schema-exposure":vc}),AE=z.object({step:z.string().meta(St),label:z.string().meta(St),count:z.number().int().min(0).meta(St),conversion_rate:z.number().min(0).max(1).meta(St),drop_off_rate:z.number().min(0).max(1).meta(St)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":yc,"x-revturbine-schema-exposure":vc}),wE=z.object({placement_id:z.string().meta(St),placement_name:z.string().meta(St),impressions:z.number().int().min(0).meta(St),clicks:z.number().int().min(0).meta(St),conversions:z.number().int().min(0).meta(St),ctr:z.number().min(0).meta(St),conversion_rate:z.number().min(0).meta(St),revenue_cents:z.number().int().min(0).meta(mi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":yc,"x-revturbine-schema-exposure":vc}),jE=z.object({date:z.string().meta(St),mrr_cents:z.number().int().min(0).meta(mi),arr_cents:z.number().int().min(0).meta(mi),new_mrr_cents:z.number().int().min(0).meta(mi),churned_mrr_cents:z.number().int().min(0).meta(mi),expansion_mrr_cents:z.number().int().min(0).meta(mi),net_new_mrr_cents:z.number().int().meta(mi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":yc,"x-revturbine-schema-exposure":vc}),OE=z.object({metric_key:z.string().min(1).meta(St),label:z.string().meta(St),current_value:z.number().meta(mi),previous_value:z.number().nullable().default(null).meta(mi),change_percent:z.number().nullable().default(null).meta(St),period:z.string().meta(St),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(St)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":yc,"x-revturbine-schema-exposure":vc}),R_=ge.merge(Ae).merge($e).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(St),severity:Rp.meta(St),resource_type:z.string().min(1).meta(St),resource_id:z.string().min(1).meta(St),summary:z.string().max(1e3).meta(St),expected_value:z.unknown().optional().meta(St),actual_value:z.unknown().optional().meta(St),affected_customer_count:z.number().int().min(0).default(0).meta(St),is_resolved:z.boolean().default(false).meta(St),resolved_at:Dn.meta(St),metadata:Ln.meta(St)}).meta({id:"DriftReport","x-revturbine-schema-persistence":iy,"x-revturbine-schema-exposure":sy}),k_=ge.merge(Ae).merge($e).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(St),severity:Rp.meta(St),title:z.string().min(1).max(300).meta(St),description:z.string().max(2e3).meta(St),resource_type:z.string().optional().meta(St),resource_id:z.string().optional().meta(St),is_acknowledged:z.boolean().default(false).meta(St),acknowledged_at:Dn.meta(St),acknowledged_by:z.string().nullable().default(null).meta(St),metadata:Ln.meta(St)}).meta({id:"Alert","x-revturbine-schema-persistence":iy,"x-revturbine-schema-exposure":sy});({"/api/analytics/kpis":{get:y({operationId:"listKpiAggregates",requestParams:{query:oe},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:se(OE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:y({operationId:"listPlacementPerformance",requestParams:{query:oe},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:se(wE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:y({operationId:"listRevenueMetrics",requestParams:{query:oe},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:se(jE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:y({operationId:"listCohortMetrics",requestParams:{query:oe},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:se(kE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:y({operationId:"listFunnelSteps",requestParams:{query:oe},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:se(AE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:y({operationId:"listDriftReports",requestParams:{query:oe},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:se(R_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:y({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:R_}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:y({operationId:"listAlerts",requestParams:{query:oe},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:se(k_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:y({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:k_}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:v}=gn,{Transient:qE}=An,{Internal:DE}=Pn,He=t=>({id:t,"x-revturbine-schema-persistence":qE,"x-revturbine-schema-exposure":DE}),UE=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,oy=/^[a-z][a-z0-9_-]{0,99}$/,Qt=z.string().regex(UE).max(120),Sa=z.string().regex(oy),A_=Qt.meta(He("AnalyticsSemanticId")),bc=z.enum(["account","user","billing_unit","organization"]).meta(He("AnalyticsAnalyticalUnit")),Zm=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(He("AnalyticsQueryFamily")),Qm=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(He("AnalyticsSourceScope")),ly=z.enum(["as_of_event","current"]).meta(He("AnalyticsHistoricalMode")),ME=z.enum(["hour","day","week","month","quarter"]).meta(He("AnalyticsTimeGrain")),Up=z.enum(["none","previous_period","previous_year"]).meta(He("AnalyticsCompareMode")),Jm=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(He("AnalyticsFilterOperator")),Mp=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(He("AnalyticsFilterControl")),FE=z.enum(["low","medium","high"]).meta(He("AnalyticsCardinalityClass")),Fp=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(He("AnalyticsFieldType")),LE=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(He("AnalyticsDimensionType")),cy=z.enum(["filter","group","split","sort"]).meta(He("AnalyticsDimensionCapability")),NE=z.enum(["private","team","tenant"]).meta(He("AnalyticsViewVisibility")),w_=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(He("AnalyticsCustomizationCapability")),VE=z.enum(["unrestricted","pii","financial","operational"]).meta(He("AnalyticsClassification")),Pa=z.strictObject({value:z.string().min(1).max(300).meta(v),key:z.string().max(120).optional().meta(v)}).meta(He("LocalizedText")),Cp=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),Xm=z.union([Cp,z.array(Cp).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(v),compare:Up.optional().meta(v)}),z.strictObject({min:z.number().optional().meta(v),max:z.number().optional().meta(v)})]).meta(He("AnalyticsFilterValue")),Lp=z.strictObject({dimension:Qt.meta(v),operator:Jm.meta(v),value:Xm.optional().meta(v)}).meta(He("AnalyticsSemanticFilter")),dc=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(v),decimals:z.number().int().min(0).max(6).optional().meta(v),compact:z.boolean().optional().meta(v)}).meta(He("AnalyticsFormatSpec")),BE=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(v),value_labels:z.boolean().optional().meta(v),reference_lines:z.array(z.strictObject({value:z.number().meta(v),label:Pa.optional().meta(v)})).max(5).optional().meta(v),x_axis_format:dc.optional().meta(v),y_axis_format:dc.optional().meta(v),empty_state:z.enum(["blank","message"]).optional().meta(v)}).meta(He("AnalyticsSafeChartOptions")),eu=z.object({deprecated:z.boolean().meta(v),replaced_by:Qt.optional().meta(v)}).meta(He("AnalyticsCatalogDeprecation")),zE=eu,KE=z.object({id:Qt.meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),type:LE.meta(v),operators:z.array(Jm).min(1).meta(v),control:Mp.meta(v),capabilities:z.array(cy).min(1).meta(v),cardinality:FE.meta(v),classification:VE.default("unrestricted").meta(v),historical_mode:ly.optional().meta(v),allowed_concepts:z.array(Qt).optional().meta(v),exclude_from_segment_picker:z.boolean().default(false).meta(v),deprecation:eu.optional().meta(v)}).meta(He("AnalyticsCatalogDimension")),$E=z.object({id:Qt.meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),value_type:Fp.meta(v),format:dc.optional().meta(v),source_scope:Qm.optional().meta(v),deprecation:eu.optional().meta(v)}).meta(He("AnalyticsCatalogMetric")),HE=z.object({id:Qt.meta(v),version:z.number().int().min(1).meta(v),label:z.string().min(1).max(120).meta(v),description:z.string().max(500).optional().meta(v),when_to_use:z.string().max(500).optional().meta(v),do_not_use_for:z.string().max(500).optional().meta(v),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(v),analytical_units:z.array(bc).min(1).meta(v),primary_time_dimension:Qt.meta(v),historical_mode:ly.meta(v),dimensions:z.array(Qt).min(1).meta(v),metrics:z.array(Qt).min(1).meta(v),query_families:z.array(Zm).min(1).meta(v),source_scope:Qm.meta(v),coverage_metric:Qt.optional().meta(v),deprecation:eu.optional().meta(v)}).meta(He("AnalyticsCatalogConcept")),my=z.strictObject({field:Qt.meta(v),direction:z.enum(["asc","desc"]).meta(v)}),uy=z.strictObject({dimension:Qt.meta(v),grain:ME.meta(v)}),GE=z.strictObject({concept:Qt.meta(v),family:Zm.meta(v),metrics:z.array(Qt).min(1).max(10).meta(v),group_by:z.array(Qt).max(3).optional().meta(v),time:uy.optional().meta(v),filters_from:z.array(Sa).max(20).optional().meta(v),fixed_filters:z.array(Lp).max(20).optional().meta(v),compare:Up.optional().meta(v),order_by:z.array(my).max(3).optional().meta(v),limit:z.number().int().min(1).max(1e3).optional().meta(v)}).meta(He("AnalyticsViewQuery")),YE=z.strictObject({type:z.literal("metric").meta(v),value:Qt.meta(v),comparison:Qt.optional().meta(v),format:dc.optional().meta(v)}).meta(He("AnalyticsRenderMetric")),WE=z.strictObject({type:z.literal("cartesian").meta(v),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(v),encoding:z.strictObject({x:Qt.meta(v),y:z.union([Qt,z.array(Qt).min(1).max(5)]).meta(v),color:Qt.optional().meta(v),facet:Qt.optional().meta(v)}).meta(v),options:BE.optional().meta(v)}).meta(He("AnalyticsRenderCartesian")),ZE=z.strictObject({type:z.literal("funnel").meta(v),stages:z.array(Qt).min(2).max(10).meta(v),split_by:Qt.optional().meta(v)}).meta(He("AnalyticsRenderFunnel")),QE=z.strictObject({type:z.literal("table").meta(v),columns:z.array(Qt).min(1).max(20).meta(v)}).meta(He("AnalyticsRenderTable")),JE=z.strictObject({type:z.literal("timeline").meta(v),timestamp:Qt.meta(v),event_type:Qt.meta(v)}).meta(He("AnalyticsRenderTimeline")),XE=z.strictObject({type:z.literal("recommendations").meta(v),presentation:z.enum(["list","ranked_cards"]).meta(v)}).meta(He("AnalyticsRenderRecommendations")),dy=z.discriminatedUnion("type",[YE,WE,ZE,QE,JE,XE]).meta(He("AnalyticsRenderSpec")),eR=z.strictObject({id:Sa.meta(v),dimension:Qt.meta(v),control:Mp.meta(v),label:Pa.optional().meta(v),operators:z.array(Jm).min(1).meta(v),default_value:Xm.optional().meta(v),required:z.boolean().default(false).meta(v),pinned:z.boolean().default(false).meta(v),applies_to:z.union([z.literal("all"),z.array(Sa).min(1).max(24)]).default("all").meta(v)}).meta(He("AnalyticsViewFilter")),py=z.strictObject({type:z.literal("grid").meta(v),columns:z.number().int().min(1).max(24).default(12).meta(v),items:z.array(z.strictObject({block_id:Sa.meta(v),x:z.number().int().min(0).meta(v),y:z.number().int().min(0).meta(v),w:z.number().int().min(1).max(24).meta(v),h:z.number().int().min(1).max(24).meta(v)})).max(24).meta(v)}).meta(He("AnalyticsViewLayout")),tR=z.strictObject({id:Sa.meta(v),title:Pa.optional().meta(v),description:Pa.optional().meta(v),query:GE.meta(v),render:dy.meta(v)}).meta(He("AnalyticsViewBlock")),nR=z.strictObject({id:Sa.meta(v),label:Pa.meta(v),target:Qt.meta(v),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(v)}).meta(He("AnalyticsViewHandoff")),rR=z.strictObject({allow:z.array(w_).default([]).meta(v),deny:z.array(w_).default([]).meta(v)}).meta(He("AnalyticsCustomizationPolicy"));var gy=z.string().regex(/^\d+\.\d+$/),aR=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(v),schema_version:gy.meta(v),id:Sa.meta(v),revision:z.number().int().min(1).meta(v),title:Pa.meta(v),description:Pa.optional().meta(v),analytical_unit:bc.meta(v),base_template:z.strictObject({id:Sa.meta(v),version:z.number().int().min(1).meta(v)}).optional().meta(v),catalog_version:z.string().min(1).max(64).meta(v),filters:z.array(eR).max(20).meta(v),layout:py.meta(v),blocks:z.array(tR).min(1).max(24).meta(v),handoffs:z.array(nR).max(10).optional().meta(v),customization_policy:rR.meta(v)}).meta(He("AnalyticsView")),iR=z.strictObject({id:Sa.optional().meta(v),dimension:Qt.meta(v),control:Mp.optional().meta(v),label:Pa.optional().meta(v),operators:z.array(Jm).min(1).optional().meta(v),default_value:Xm.optional().meta(v),required:z.boolean().optional().meta(v),pinned:z.boolean().optional().meta(v),applies_to:z.union([z.literal("all"),z.array(Sa).min(1).max(24)]).optional().meta(v)}).meta(He("AnalyticsViewFilterDraft")),sR=z.strictObject({id:Sa.optional().meta(v),title:Pa.optional().meta(v),concept:Qt.meta(v),family:Zm.meta(v),metrics:z.array(Qt).min(1).max(10).meta(v),group_by:z.array(Qt).max(3).optional().meta(v),time:uy.optional().meta(v),filters_from:z.array(Sa).max(20).optional().meta(v),fixed_filters:z.array(Lp).max(20).optional().meta(v),compare:Up.optional().meta(v),order_by:z.array(my).max(3).optional().meta(v),limit:z.number().int().min(1).max(1e3).optional().meta(v),render:z.union([z.literal("auto"),dy]).optional().meta(v)}).meta(He("AnalyticsViewBlockDraft")),oR=z.strictObject({id:Sa.optional().meta(v),label:Pa.optional().meta(v),target:Qt.meta(v),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(v)}).meta(He("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(v),schema_version:gy.meta(v),title:Pa.meta(v),analytical_unit:bc.optional().meta(v),filters:z.union([z.literal("recommended"),z.array(iR).max(20)]).optional().meta(v),layout:z.union([z.literal("auto"),py]).optional().meta(v),blocks:z.array(sR).min(1).max(24).meta(v),handoffs:z.union([z.literal("recommended"),z.array(oR).max(10)]).optional().meta(v),visibility:NE.optional().meta(v)}).meta(He("AnalyticsViewDraft"));var Np=z.string().regex(/^(\/[^/]*)*$/).max(300),lR=z.strictObject({op:z.enum(["add","replace","remove"]).meta(v),path:Np.meta(v),value:z.unknown().optional().meta(v)}).meta(He("AnalyticsSuggestedPatchOp")),hy=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),message:z.string().min(1).max(500).meta(v)}).meta(He("AnalyticsWarning")),cR=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),path:Np.meta(v),message:z.string().min(1).max(500).meta(v),actual:z.unknown().optional().meta(v),allowed:z.array(Cp).max(50).optional().meta(v),suggested_patch:z.array(lR).max(10).optional().meta(v)}).meta(He("AnalyticsValidationIssue"));z.object({path:Np.meta(v),rule:z.string().min(1).max(120).meta(v),value:z.unknown().optional().meta(v)}).meta(He("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(v),errors:z.array(cR).default([]).meta(v),warnings:z.array(hy).default([]).meta(v),catalog_version:z.string().min(1).max(64).meta(v)}).meta(He("AnalyticsValidationResult"));var mR=z.object({id:Qt.meta(v),type:Fp.meta(v),nullable:z.boolean().meta(v)}).meta(He("AnalyticsResultField")),uR=z.object({numerator:z.number().int().min(0).meta(v),denominator:z.number().int().min(0).meta(v),rate:z.number().min(0).max(1).meta(v)}).meta(He("AnalyticsCoverage")),dR=z.object({query_hash:z.string().min(1).max(128).meta(v),concept:Qt.meta(v),analytical_unit:bc.meta(v),source_scope:Qm.meta(v),coverage:uR.optional().meta(v),as_of:z.string().datetime().meta(v),freshness_seconds:z.number().int().min(0).meta(v),applied_filters:z.array(Lp).default([]).meta(v),next_cursor:z.string().max(500).optional().meta(v),warnings:z.array(hy).default([]).meta(v)}).meta(He("AnalyticsResultMeta")),pR=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(v),fields:z.array(mR).meta(v),meta:dR.meta(v)}).meta(He("AnalyticsResult")),{Unrestricted:Hn}=gn,{Transient:gR}=An,{Internal:hR}=Pn,xc=t=>({id:t,"x-revturbine-schema-persistence":gR,"x-revturbine-schema-exposure":hR}),fR=z.enum(["fixture","generated"]).meta(xc("AnalyticsCatalogSource"));z.object({catalog_version:z.string().min(1).max(64).meta(Hn),source:fR.meta(Hn),generated_at:z.string().datetime().optional().meta(Hn),concepts:z.array(HE).min(1).meta(Hn),dimensions:z.array(KE).min(1).meta(Hn),metrics:z.array($E).min(1).meta(Hn)}).meta(xc("AnalyticsCatalog"));var yR=z.enum(["concept","dimension","metric","query_family"]).meta(xc("AnalyticsAgentCatalogEntryKind")),vR=z.object({id:A_.meta(Hn),kind:yR.meta(Hn),label:z.string().min(1).max(120).meta(Hn),description:z.string().min(1).max(500).meta(Hn),when_to_use:z.string().max(500).optional().meta(Hn),do_not_use_for:z.string().max(500).optional().meta(Hn),value_type:Fp.optional().meta(Hn),format:dc.optional().meta(Hn),capabilities:z.array(cy).optional().meta(Hn),compatible_concepts:z.array(A_).optional().meta(Hn),compatible_families:z.array(Zm).optional().meta(Hn),analytical_units:z.array(bc).optional().meta(Hn),source_scope:Qm.optional().meta(Hn),example:z.string().max(2e3).optional().meta(Hn),deprecation:zE.optional().meta(Hn)}).meta(xc("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Hn),query:z.string().min(1).max(200).meta(Hn),entries:z.array(vR).max(50).meta(Hn)}).meta(xc("AnalyticsCatalogSearchResult"));var {Unrestricted:cr}=gn,{Transient:xR}=An,{Internal:SR}=Pn,No=t=>({id:t,"x-revturbine-schema-persistence":xR,"x-revturbine-schema-exposure":SR}),Ss=z.string().regex(oy),PR=z.strictObject({filter_id:Ss.meta(cr),value:Xm.nullable().meta(cr)}).meta(No("AnalyticsFilterState"));z.strictObject({view_id:Ss.meta(cr),revision:z.number().int().min(1).optional().meta(cr),block_ids:z.array(Ss).min(1).max(24).optional().meta(cr),filter_state:z.array(PR).max(20).optional().meta(cr)}).meta(No("AnalyticsQueryRequest"));var IR=z.object({block_id:Ss.meta(cr),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(cr),message:z.string().min(1).max(500).meta(cr)}).meta(No("AnalyticsBlockError")),CR=z.object({block_id:Ss.meta(cr),result:pR.meta(cr)}).meta(No("AnalyticsBlockResult"));z.object({view_id:Ss.meta(cr),revision:z.number().int().min(1).meta(cr),catalog_version:z.string().min(1).max(64).meta(cr),results:z.array(CR).meta(cr),errors:z.array(IR).default([]).meta(cr)}).meta(No("AnalyticsQueryResponse"));var RR=z.object({id:Ss.meta(cr),version:z.number().int().min(1).meta(cr),title:Pa.meta(cr),description:Pa.optional().meta(cr),block_count:z.number().int().min(1).meta(cr)}).meta(No("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:y({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:se(RR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:y({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:aR}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:ui}=gn,{Transient:Sc}=An,{External:Pc}=Pn,fy=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":Pc}),AR=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":Pc}),wR=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(ui),surface:fy.meta(ui),purpose:z.string().min(1).max(300).meta(ui),stability:AR.meta(ui)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":Pc}),jR=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(ui),surface:fy.meta(ui),purpose:z.string().min(1).max(300).meta(ui)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":Pc});z.object({version:z.number().int().min(1).meta(ui),events:z.array(wR).min(1).meta(ui),prefix_families:z.array(jR).meta(ui)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":Pc});var _y=["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"],Vp=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],OR=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],qR=["area_viewed","feature_gated"],j_={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function Fm(t,e){return t.map(n=>({name:n,surface:e,purpose:j_[n].purpose,stability:j_[n].stability}))}var yy=["impression"],Bp=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],vy={events:[...Fm(_y,"control_plane"),...Fm(qR,"control_plane"),...Fm(Vp,"sdk_client"),...Fm(OR,"sdk_client")]};vy.events.map(t=>t.name);vy.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:D,Pii:Uo}=gn,{Persisted:by,Transient:Nn}=An,{Internal:as,External:Tr}=Pn,xy=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr}),DR=ge.extend({event_type:z.string().min(1).meta(D),source:xy.default("sdk").meta(D),tenant_id:z.string().min(1).optional().meta(D),user_id:z.string().min(1).optional().meta(Uo),session_id:z.string().min(1).optional().meta(Uo),occurred_at:z.string().datetime().meta(D),request_id:z.string().min(1).meta(D),attributes:z.record(z.string(),z.unknown()).default({}).meta(D),payload:z.record(z.string(),z.unknown()).default({}).meta(D)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as}),UR=DR.extend({ingested_at:z.string().datetime().meta(D)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":by,"x-revturbine-schema-exposure":as});z.array(z.object({id:z.string().min(1).optional().meta(D),event_type:z.string().min(1).meta(D),occurred_at:z.string().datetime().optional().meta(D),tenant_id:z.string().min(1).optional().meta(D),user_id:z.string().min(1).optional().meta(Uo),session_id:z.string().min(1).optional().meta(Uo),attributes:z.record(z.string(),z.unknown()).optional().meta(D),payload:z.record(z.string(),z.unknown()).optional().meta(D),message:z.string().optional().meta(D),level:z.string().optional().meta(D),path:z.string().optional().meta(D)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as});var MR=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({user_id:z.string().min(1).meta(Uo),placement_id:z.string().min(1).meta(D),treatment_id:z.string().min(1).optional().meta(D),surface_slot_id:z.string().min(1).optional().meta(D),surface_template_id:z.string().min(1).optional().meta(D),payload_id:z.string().min(1).optional().meta(D),interaction_type:MR.meta(D),interaction_at:z.string().datetime().optional().meta(D),message_block_handle:z.string().min(1).optional().meta(D),message_block_id:z.string().min(1).optional().meta(D),experiment_id:z.string().min(1).optional().meta(D),variant_key:z.string().min(1).optional().meta(D),test:z.boolean().optional().meta(D),metadata:z.record(z.string(),z.unknown()).optional().meta(D)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({days_remaining:z.number().int().min(0).optional().meta(D)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({entitlement_handle:z.string().optional().meta(D),current_usage:z.number().min(0).optional().meta(D),usage_limit:z.number().min(0).optional().meta(D),usage_percent:z.number().min(0).max(100).optional().meta(D),threshold:z.number().min(0).optional().meta(D),balance:z.number().min(0).optional().meta(D),allocation:z.number().min(0).optional().meta(D),seats_used:z.number().int().min(0).optional().meta(D),seats_allowed:z.number().int().min(0).optional().meta(D)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({feature:z.string().min(1).meta(D)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({retry_count:z.number().int().min(0).optional().meta(D),renewal_date:z.string().optional().meta(D)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({event_type:z.string().min(1).meta(D),payload:z.record(z.string(),z.unknown()).default({}).meta(D)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});var LR=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr}),NR=z.enum(_y).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({event_type:NR.meta(D),source:LR.meta(D),payload:z.record(z.string(),z.unknown()).default({}).meta(D)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({q:z.string().optional().meta(D),source:xy.optional().meta(D),event_type:z.string().optional().meta(D),from:z.string().datetime().optional().meta(D),to:z.string().datetime().optional().meta(D),page:z.coerce.number().int().min(1).default(1).meta(D),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(D)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as});var VR=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as}),BR=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as}),yp=ge.merge(Ae).merge($e).extend({event_id:z.string().min(1).meta(D),event_type:z.string().min(1).meta(D),source:VR.meta(D),payload:z.record(z.string(),z.unknown()).default({}).meta(D),status:BR.default("processed").meta(D),processed_at:z.string().datetime().optional().meta(D),error_message:z.string().optional().meta(D)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":by,"x-revturbine-schema-exposure":as});z.object({accepted:z.number().int().min(0).meta(D)}).meta({id:"null","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":as});var zR=500,KR=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr}),$R=z.object({environment_id:z.string().min(1).meta(D),user_id:z.string().min(1).meta(Uo),account_id:z.string().min(1).meta(D),event_name:z.string().min(1).max(120).meta(D),event_ts:z.string().datetime().meta(D),properties:z.string().optional().meta(D),surface_slot_id:z.string().nullable().optional().meta(D),placement_id:z.string().nullable().optional().meta(D),payload_id:z.string().nullable().optional().meta(D),request_id:z.string().optional().meta(D),experiment_id:z.string().nullable().optional().meta(D),variant_key:z.string().nullable().optional().meta(D),tenant_id:z.string().optional().meta(D),event_id:z.string().nullable().optional().meta(D),origin:KR.nullable().optional().meta(D),playbook_version:z.string().nullable().optional().meta(D),decision_id:z.string().nullable().optional().meta(D),test:z.boolean().optional().meta(D)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({events:z.array($R).min(1).max(zR).meta(D)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});var GR=10,YR=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr}),WR=z.object({plans:z.number().int().min(0).meta(D),entitlements:z.number().int().min(0).meta(D),entitlement_rules:z.number().int().min(0).meta(D),segments:z.number().int().min(0).meta(D),placements:z.number().int().min(0).meta(D),placement_payloads:z.number().int().min(0).meta(D),content_ui_paths:z.number().int().min(0).meta(D),surface_templates:z.number().int().min(0).meta(D)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr}),ZR=z.object({event_type:YR.meta(D),occurred_at:z.string().datetime().meta(D),request_id:z.string().min(1).optional().meta(D),config_hash_id:z.string().min(1).max(64).optional().meta(D),sdk_version:z.string().min(1).max(64).optional().meta(D),runtime_mode:z.string().min(1).max(64).optional().meta(D),schema_version:z.string().min(1).max(64).optional().meta(D),bundle_version:z.string().min(1).max(64).optional().meta(D),config_shape:WR.optional().meta(D),message:z.string().max(500).optional().meta(D),reason:z.string().min(1).max(64).optional().meta(D),placement_handle:z.string().min(1).max(64).optional().meta(D),slot_handle:z.string().min(1).max(64).optional().meta(D),surface:z.string().min(1).max(64).optional().meta(D),plan_handle:z.string().min(1).max(64).optional().meta(D),entitlement_handle:z.string().min(1).max(64).optional().meta(D)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});z.object({events:z.array(ZR).min(1).max(GR).meta(D)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Nn,"x-revturbine-schema-exposure":Tr});({"/api/events/search":{get:y({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:l0(UR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:y({operationId:"listWebhookEvents",requestParams:{query:oe},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:se(yp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:tt}=gn,{Persisted:Tc,Transient:Ic}=An,{Internal:gi}=Pn,Sy=dn(Vt.Playbook,{sdkInput:true}),Py=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),JR=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":gi}),zp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":gi}),Ty=z.object({name:Gn.meta(tt),handle:hn.meta(tt),plan_id:z.string().nullable().optional().meta(tt),segment_id:z.string().nullable().optional().meta(tt),trial_limit_type:zp.default("time").meta(tt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(tt),grace_period_days:z.number().int().min(0).default(0).meta(tt),usage_entitlement_handle:z.string().min(1).optional().meta(tt),usage_limit_value:z.number().int().min(1).optional().meta(tt),require_payment_method:z.boolean().default(false).meta(tt),auto_convert:z.boolean().default(true).meta(tt),convert_to_plan_id:z.string().optional().meta(tt),fallback_plan_id:z.string().optional().meta(tt),limit_per_customer:z.number().int().min(1).default(1).meta(tt),is_active:z.boolean().default(true).meta(tt),metadata:Ln.meta(tt)}),vo=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...tt,readOnly:true})}).merge(Ty).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":gi,...Sy,...Mr()}),XR=mr("FreeTrialRuleAnchor"),ek=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":gi}),Iy=z.object({name:Gn.meta(tt),handle:hn.meta(tt),premium_plan_id:z.string().min(1).meta(tt),fallback_plan_id:z.string().min(1).meta(tt),segment_id:z.string().nullable().optional().meta(tt),trial_limit_type:zp.default("time").meta(tt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(tt),usage_entitlement_handle:z.string().min(1).optional().meta(tt),usage_limit_value:z.number().int().min(1).optional().meta(tt),start_policy:ek.default("signup").meta(tt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(tt),entitlements_during_trial:z.array(z.string()).default([]).meta(tt),is_active:z.boolean().default(true).meta(tt),metadata:Ln.meta(tt)}),bo=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...tt,readOnly:true})}).merge(Iy).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":gi,...Sy,...Mr()}),tk=mr("ReverseTrialRuleAnchor"),Cy=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":gi}),Ey=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":gi}),xo=ge.merge(Ae).merge($e).extend({trial_limit_policy:Cy.default("1_per_lifetime").meta(tt),eligibility_scope:Ey.default("per_customer").meta(tt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":gi,...Py}),So=ge.merge(Ae).merge($e).extend({trial_limit_policy:Cy.default("1_per_lifetime").meta(tt),eligibility_scope:Ey.default("per_customer").meta(tt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":gi,...Py}),Lm=ge.merge(Ae).merge($e).extend({customer_id:z.string().min(1).meta(tt),rule_id:z.string().min(1).meta(tt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(tt),plan_id:z.string().min(1).meta(tt),status:JR.default("active").meta(tt),started_at:z.string().datetime().meta({...tt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(tt),trial_limit_type:zp.default("time").meta(tt),usage_entitlement_handle:z.string().min(1).optional().meta(tt),usage_limit_value:z.number().int().min(1).optional().meta(tt),converted_at:Dn.meta(tt),cancelled_at:Dn.meta(tt),metadata:Ln.meta(tt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Tc,"x-revturbine-schema-exposure":gi});({"/api/free-trial-rule-anchors":{get:y({operationId:"listFreeTrialRuleAnchors",requestParams:{query:oe},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:se(XR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:y({operationId:"listFreeTrialRules",requestParams:{query:oe},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:se(vo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:y({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:vo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:vo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:y({operationId:"listReverseTrialRuleAnchors",requestParams:{query:oe},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:se(tk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:y({operationId:"listReverseTrialRules",requestParams:{query:oe},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:se(bo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:y({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:bo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:y({operationId:"listFreeTrialSettings",requestParams:{query:oe},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:se(xo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:y({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:y({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:xo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:y({operationId:"listReverseTrialSettings",requestParams:{query:oe},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:se(So)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:y({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:y({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:So.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:y({operationId:"listTrialInstances",requestParams:{query:oe},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:se(Lm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:y({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:y({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:y({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:In}=gn,{Persisted:Kp,Transient:Ry}=An,{Internal:Cc}=Pn,ky=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),nk=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Ry,"x-revturbine-schema-exposure":Cc}),rk=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Ry,"x-revturbine-schema-exposure":Cc}),ak=z.object({variant_id:z.string().min(1),name:Gn,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":Kp,"x-revturbine-schema-exposure":Cc,...ky}),ji=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...In,readOnly:true}),name:Gn.meta(In),handle:hn.meta(In),description:z.string().max(1e3).optional().meta(In),experiment_type:rk.meta(In),status:nk.default("draft").meta(In),target_resource_id:z.string().optional().meta(In),target_segment_ids:z.array(z.string()).default([]).meta(In),variants:z.array(ak).min(2).meta(In),primary_metric:z.string().min(1).meta(In),metric_threshold:z.number().default(.05).meta(In),secondary_metrics:z.array(z.string()).default([]).meta(In),traffic_allocation:z.number().min(0).max(1).default(1).meta(In),started_at:Dn.meta(In),ended_at:Dn.meta(In),confidence_threshold:z.number().min(0).max(1).default(.95).meta(In),winning_variant_id:z.string().nullable().default(null).meta(In),metadata:Ln.meta(In)}).meta({id:"Experiment","x-revturbine-schema-persistence":Kp,"x-revturbine-schema-exposure":Cc,...ky,...Mr()}),ik=mr("ExperimentAnchor"),sk=Rp,O_=ge.merge(Ae).merge($e).extend({experiment_id:z.string().optional().meta(In),resource_type:z.string().min(1).meta(In),resource_id:z.string().min(1).meta(In),severity:sk.default("info").meta(In),title:z.string().min(1).max(300).meta(In),description:z.string().max(2e3).meta(In),suggested_action:z.string().max(1e3).optional().meta(In),estimated_impact:z.number().optional().meta(In),is_dismissed:z.boolean().default(false).meta(In),metadata:Ln.meta(In)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Kp,"x-revturbine-schema-exposure":Cc});({"/api/experiment-anchors":{get:y({operationId:"listExperimentAnchors",requestParams:{query:oe},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:se(ik)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:y({operationId:"listExperiments",requestParams:{query:oe},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:se(ji)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:y({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:y({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:ji.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:y({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:y({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:y({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:y({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:y({operationId:"listOptimizationSuggestions",requestParams:{query:oe},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:se(O_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:y({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:O_}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Er,Financial:q_}=gn,{Persisted:ok,Transient:Ay}=An,{Internal:$p}=Pn,lk=dn(Vt.Playbook,{sdkInput:true}),ck=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":$p}),mk=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":$p}),Ji=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...Er,readOnly:true}),name:Gn.meta(Er),handle:hn.meta(Er),description:z.string().max(1e3).optional().meta(Er),rt_status:ck.default("draft").meta(Er),discount_type:mk.meta(Er),discount_value:z.number().min(0).meta(q_),currency:z.string().length(3).default("USD").meta(q_),applicable_plan_ids:z.array(z.string()).default([]).meta(Er),applicable_addon_ids:z.array(z.string()).default([]).meta(Er),target_segment_ids:z.array(z.string()).default([]).meta(Er),max_redemptions:z.number().int().min(0).nullable().default(null).meta(Er),current_redemptions:z.number().int().min(0).default(0).meta({...Er,readOnly:true}),coupon_code:z.string().max(100).optional().meta(Er),starts_at:Dn.meta(Er),ends_at:Dn.meta(Er),stripe_coupon_id:z.string().nullable().default(null).meta(Er),stripe_promotion_code_id:z.string().nullable().default(null).meta(Er),auto_sync_stripe:z.boolean().default(false).meta(Er),metadata:Ln.meta(Er)}).meta({id:"Promotion","x-revturbine-schema-persistence":ok,"x-revturbine-schema-exposure":$p,...lk,...Mr()}),uk=mr("PromotionAnchor");({"/api/promotion-anchors":{get:y({operationId:"listPromotionAnchors",requestParams:{query:oe},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:se(uk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:y({operationId:"listPromotions",requestParams:{query:oe},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:se(Ji)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:y({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:y({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Ji.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:y({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:y({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:y({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ji}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:qn,Pii:Hp}=gn,{Persisted:Gp}=An,{Internal:Yp}=Pn,dk=ge.merge(Ae).merge($e).extend({customer_id:z.string().min(1).meta(Hp),placement_id:z.string().min(1).meta(qn),payload_id:z.string().nullable().default(null).meta(qn),variant_id:z.string().nullable().default(null).meta(qn),surface_type:z.string().meta(qn),presented_at:z.string().datetime().meta({...qn,readOnly:true}),dismissed_at:Dn.meta(qn),cta_clicked_at:Dn.meta(qn),cta_action_type:z.string().nullable().default(null).meta(qn),converted:z.boolean().default(false).meta(qn),session_id:z.string().optional().meta(qn),metadata:Ln.meta(qn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":Gp,"x-revturbine-schema-exposure":Yp}),pk=ge.merge(Ae).merge($e).extend({customer_id:z.string().min(1).meta(Hp),placement_id:z.string().min(1).meta(qn),decision:z.enum(["show","suppress","defer"]).meta(qn),reason:z.string().max(500).meta(qn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(qn),experiment_id:z.string().nullable().default(null).meta(qn),variant_id:z.string().nullable().default(null).meta(qn),latency_ms:z.number().min(0).optional().meta(qn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":Gp,"x-revturbine-schema-exposure":Yp}),gk=ge.merge(Ae).merge($e).extend({customer_id:z.string().min(1).meta(Hp),entitlement_handle:z.string().min(1).meta(qn),entitlement_type:z.string().meta(qn),result:z.enum(["granted","denied","limited","metered"]).meta(qn),current_usage:z.number().nullable().default(null).meta(qn),limit:z.number().nullable().default(null).meta(qn),source:z.enum(["plan","addon","override","trial"]).meta(qn),source_id:z.string().min(1).meta(qn),latency_ms:z.number().min(0).optional().meta(qn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":Gp,"x-revturbine-schema-exposure":Yp});({"/api/presentation-records":{get:y({operationId:"listPresentationRecords",requestParams:{query:oe},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:se(dk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:y({operationId:"listDecisionLogs",requestParams:{query:oe},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:se(pk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:y({operationId:"listEntitlementEvalLogs",requestParams:{query:oe},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:se(gk)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:p}=gn,{Persisted:Vo,Transient:it}=An,{Internal:Da,External:kt}=Pn,xt=dn(Vt.Playbook,{sdkInput:true}),wo=dn(Vt.Playbook,{sdkInput:false}),es=dn(Vt.Playbook,{inConfig:false,sdkInput:false}),wy=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),Po=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ya.CodeConstant}),bp=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ya.Runtime}),xp=dn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ya.Runtime}),hk=dn(Vt.Billing,{sdkInput:false}),fk=dn(Vt.Metering,{sdkInput:false}),_k=dn(Vt.Branding,{inConfig:true,sdkInput:true}),yk=dn(Vt.Branding,{sdkInput:false}),vk="1.0.0",rc=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Gn.meta(p),handle:hn.meta(p),description:Ts.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:Ln.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...es,...Mr()}),bk=mr("SeatTypeAnchor"),ac=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:hn.meta(p),label:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().nullable().default(null).meta(p),example_value:z.string().nullable().default(null).meta(p),value_map:z.record(z.string(),z.string()).default({}).meta(p),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(p),metadata:Ln.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...es,...Mr()}),xk=mr("PersonalizationTokenAnchor"),Sk=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),Sp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({handle:hn.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:Sk.default("not_started").meta({...p,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...p,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...p,readOnly:true}),details_submitted:z.boolean().default(false).meta({...p,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...p,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...p,readOnly:true}),sync_products:z.boolean().default(true).meta(p),sync_prices:z.boolean().default(true).meta(p),sync_subscriptions:z.boolean().default(true).meta(p),sync_invoices:z.boolean().default(false).meta(p),default_currency:z.string().length(3).default("USD").meta(p),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(p),last_sync_at:z.string().optional().meta({...p,readOnly:true}),metadata:Ln.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...hk,...Oa()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(p),workspace_name:z.string().optional().meta(p),logo_url:z.string().optional().meta(p),support_email:z.string().optional().meta(p)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...yk});var ic=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({handle:hn.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),meter_key:z.string().min(1).max(100).meta(p),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(p),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(p),stripe_meter_id:z.string().nullable().default(null).meta(p),is_active:z.boolean().default(true).meta(p),metadata:Ln.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...fk,...Oa()}),D_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),sc=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:hn.meta({...p,readOnly:true}),entitlement_id:z.string().min(1).meta(p),soft_limit_percent:z.number().min(0).max(100).default(80).meta(p),hard_limit_percent:z.number().min(0).max(100).default(100).meta(p),soft_limit_action:D_.default("warn").meta(p),hard_limit_action:D_.default("block").meta(p),grace_period_hours:z.number().int().min(0).default(0).meta(p),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...wy,...Oa()}),Pk=mr("UsageEnforcementSettingsAnchor"),Tk=z.object({kind:z.enum(["template","slot"]).meta(p),id:z.string().min(1).meta(p),label:z.string().min(1).optional().meta(p)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),Ik=z.object({id:z.string().min(1).meta(p),group:z.array(Tk).min(1).meta(p),cap:z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month"]).meta(p)}).meta(p)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),Ck=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),jy=z.object({capRules:z.array(Ik).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:Ck.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":Da}),Pp=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:hn.meta({...p,readOnly:true}),global_frequency_cap:jy.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(p)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Vo,"x-revturbine-schema-exposure":Da,...wy,...Oa()}),Ek=mr("PlacementSettingsAnchor"),Rk=z.object({field:z.string().min(1).meta(p),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(p),value:z.string().meta(p)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),kk=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(Rk).optional().meta(p),dimension_id:z.string().optional().meta(p),experiment_id:z.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Ak=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),tier_position:z.number().int().min(0).default(0).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:ts.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),wk=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),sort_order:z.number().int().min(0).default(0).meta(p),visibility:ts.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...wo}),jk=z.object({handle:z.string().min(1).meta(p),plan_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:hc.meta(p),visibility:ts.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:Gm.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...es}),Ok=z.object({handle:z.string().min(1).meta(p),addon_handle:z.string().min(1).meta(p),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z.string().nullable().default(null).meta(p),price_amount:z.number().min(0).meta(p),pricing_model:hc.meta(p),visibility:ts.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:Gm.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...es}),qk=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),description:z.string().nullable().default(null).meta(p),is_default:z.boolean().default(false).meta(p),entitlement_handles:z.array(z.string()).default([]).meta(p)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Dk=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().nullable().default(null).meta(p),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(p),soft_limit_action:z.string().meta(p),hard_limit_action:z.string().meta(p),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(p),notification_channels:z.array(z.string()).default([]).meta(p),is_active:z.boolean().default(true).meta(p)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Uk=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:jy.nullable().default(null).meta(p),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z.boolean().default(false).meta(p),suppress_for_trial:z.boolean().default(false).meta(p),allow_stacking:z.boolean().default(false).meta(p),priority_collision_strategy:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Mk=z.object({handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:z.string().nullable().default(null).meta(p),visibility_toggle:z.boolean().default(true).meta(p),source_type:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Fk=z.object({handle:z.string().min(1).meta(p),entitlement_handle:z.string().min(1).meta(p),meter_handle:z.string().min(1).meta(p),limit:z.number().int().min(0).nullable().default(null).meta(p),reset_period:z.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Lk=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:Ep.meta(p),unit:z.string().optional().meta(p),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Nk=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(G_).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:Ep.optional().meta({...p,readOnly:true}),unit:z.string().optional().meta({...p,readOnly:true}),tier_name:z.string().optional().meta({...p,readOnly:true}),tier_description:z.string().optional().meta({...p,readOnly:true}),...qo.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(p),allocation:Ym.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Vk=z.object({slot_id:z.string().min(1).meta(p),active:z.boolean().meta(p),triggers:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Bk=z.object({id:z.string().min(1).meta(p),label:z.string().min(1).meta(p),description:z.string().meta(p),surface_type:z.string().meta(p),placement_handle:z.string().min(1).meta(p),template:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),zk=z.object({name:z.string().min(1).meta(p),type:z.string().optional().meta(p),required:z.boolean().optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Kk=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(zk).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),$k=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":it,"x-revturbine-schema-exposure":kt}),Hk=z.object({name:z.string().min(1).meta(p),action_type:$k.meta(p),plan_handle:z.string().optional().meta(p),promotion_id:z.string().optional().meta(p),placement_handle:z.string().optional().meta(p),url:z.string().optional().meta(p),tour_id:z.string().optional().meta(p),target_billing_period:z.enum(["monthly","annual"]).optional().meta(p),description:z.string().optional().meta(p)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Gk=z.object({id:z.string().meta(p),name:z.string().meta(p),discount:z.string().meta(p),type:z.string().meta(p),status:z.string().meta(p)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Yk=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(p),label:z.string().min(1).meta(p),description:z.string().optional().meta(p),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z.string().optional().meta(p),example_value:z.string().optional().meta(p),value_map:z.record(z.string(),z.string()).optional().meta(p),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(p)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),U_=z.object({header:z.string().optional().meta(p),body:z.string().optional().meta(p),cta_label:z.string().optional().meta(p),secondary_cta_label:z.string().optional().meta(p)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Wk=z.object({block_id:z.string().min(1).meta(p),tenant_id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),surface_template_id:z.string().optional().meta(p),default_content:U_.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:U_})).optional().meta(p),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(p),tokens_used:z.array(z.string()).optional().meta(p),status:z.enum(["draft","active","archived"]).meta(p),created_at:z.string().datetime().meta({...p,readOnly:true}),updated_at:z.string().datetime().meta({...p,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Zk=z.object({label:z.string().meta(p),path:N_.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Oy=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(Zk).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),qy=z.object({plan_ids:z.array(z.string()).meta(p),billing_cadences:z.array(z.string()).optional().meta(p),segment_chips:z.array(z.string()).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Qk=z.object({count:z.number().int().min(1).meta(p),period:z.enum(["session","day","week","month","lifetime"]).meta(p)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Dy=z.object({max_per_period:Qk.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Jk=z.object({id:z.string().min(1).meta(p),target:qy.meta(p),surfaces:z.array(Oy).meta(p),caps:Dy.optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().optional().meta({...p,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(p),recommendation_plan_override:z.string().optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Xk=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:mc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:mc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:mc}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),eA=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),tA=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:eA.meta(p),trigger:Xk.meta(p),payloads:z.array(Jk).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),nA=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:qy.meta(p),caps:Dy.optional().meta(p),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(p),created_at:z.string().meta({...p,readOnly:true}),updated_at:z.string().datetime().optional().meta({...p,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(p),surfaces:z.array(Oy).optional().meta(p),surface_slot_ids:z.array(z.string()).optional().meta(p),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(p)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),rA=z.object({kind:z.string().min(1).meta(p),schema_version:z.number().int().nonnegative().meta(p),config:z.unknown().meta(p)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),aA=ge.merge(Ty).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...es}),iA=ge.merge(Iy).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...es}),sA=z.object({plans:z.array(Ak).meta({...p,...xt}),addons:z.array(wk).optional().meta({...p,...wo}),entitlements:z.array(Lk).meta({...p,...xt}),entitlement_rules:z.array(Nk).meta({...p,...xt}),segments:z.array(kk).meta({...p,...xt}),content_ui_paths:z.array(Hk).meta({...p,...xt}),slot_configs:z.array(Vk).optional().meta({...p,...xt,...cp({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...p,...xt,...cp({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...p,..._k,...cp({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(Bk).optional().meta({...p,...xt}),message_blocks:z.array(Wk).optional().meta({...p,...xt}),placement_payloads:z.array(nA).optional().meta({...p,...xt}),placements:z.array(tA).optional().meta({...p,...xt}),content_promotions:z.array(Gk).optional().meta({...p,...xt}),personalization_tokens:z.array(Yk).optional().meta({...p,...xt}),surface_templates:z.array(Kk).optional().meta({...p,...xt}),free_trial_rules:z.array(aA).optional().meta({...p,...wo}),reverse_trial_rules:z.array(iA).optional().meta({...p,...wo}),plan_variations:z.array(jk).optional().meta({...p,...wo}),addon_variations:z.array(Ok).optional().meta({...p,...wo}),extension_rules:z.array(rA).optional().meta({...p,...xt}),seat_types:z.array(qk).optional().meta({...p,...xt}),enforcement_defaults:z.array(Dk).optional().meta({...p,...xt}),placement_settings:z.array(Uk).optional().meta({...p,...xt}),segment_dimensions:z.array(Mk).optional().meta({...p,...xt}),meter_bindings:z.array(Fk).optional().meta({...p,...xt}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...es}),signal_catalog:z.object({}).strict().optional().meta({...p,...es})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),oA=z.object({artifact_type:z.literal("playbook").meta({...p,...Po,readOnly:true}),format_version:z.literal(vk).meta({...p,...Po,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...Po}),playbook_version_id:z.string().nullable().default(null).meta({...p,...bp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...xp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...xp,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...xp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...bp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...Po,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...Po,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...Po,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...bp}),Uy=oA.extend(sA.shape).meta({"x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});function lA(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function My(t){if(!lA(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(My,Uy).meta({id:"Playbook","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});z.preprocess(My,Uy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});({"/api/seat-type-anchors":{get:y({operationId:"listSeatTypeAnchors",requestParams:{query:oe},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:se(bk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:y({operationId:"listSeatTypes",requestParams:{query:oe},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:se(rc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:y({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Dr(rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:y({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:rc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:y({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:y({operationId:"listPersonalizationTokenAnchors",requestParams:{query:oe},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:se(xk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:y({operationId:"listPersonalizationTokens",requestParams:{query:oe},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:se(ac)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:y({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Dr(ac)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ac}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:y({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ac.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ac}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:y({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:y({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Sp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Sp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:y({operationId:"listMeteringConfigs",requestParams:{query:oe},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:se(ic)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:y({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Dr(ic)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:y({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ic.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:y({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:y({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:oe},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:se(Pk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:y({operationId:"listUsageEnforcementSettings",requestParams:{query:oe},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:se(sc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:y({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Dr(sc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:y({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:sc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:sc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:y({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:y({operationId:"listPlacementSettingsAnchors",requestParams:{query:oe},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:se(Ek)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:y({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Pp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Pp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Oi}=gn,{Persisted:Fy}=An,{Internal:Ly}=Pn,cA=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Fy,"x-revturbine-schema-exposure":Ly}),M_=ge.merge(Ae).merge($e).extend({action:cA.meta(Oi),resource_type:z.string().min(1).max(100).meta(Oi),resource_id:z.string().min(1).meta(Oi),resource_name:z.string().max(200).optional().meta(Oi),actor_id:z.string().min(1).meta(Oi),actor_email:z.string().email().optional().meta(Oi),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Oi),summary:z.string().max(1e3).optional().meta(Oi),metadata:Ln.meta(Oi)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Fy,"x-revturbine-schema-exposure":Ly});({"/api/changelog":{get:y({operationId:"listChangeLogEntries",requestParams:{query:oe},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:se(M_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:y({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:M_}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Nm}=gn,{Persisted:mA,Transient:uA}=An,{Internal:Ny}=Pn,dA=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":uA,"x-revturbine-schema-exposure":Ny}),Xi=ge.merge(Ae).extend({name:Gn.meta(Nm),handle:hn.meta(Nm),status:dA.default("active").meta(Nm),metadata:Ln.meta(Nm)}).meta({id:"Tenant","x-revturbine-schema-persistence":mA,"x-revturbine-schema-exposure":Ny});({"/api/tenants":{get:y({operationId:"listTenants",requestParams:{query:oe},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:se(Xi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:y({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:y({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Xi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:y({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:y({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Xi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Aa}=gn,{Persisted:pA,Transient:Vy}=An,{Internal:Wp}=Pn,gA=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Vy,"x-revturbine-schema-exposure":Wp}),To=ge.merge(Ae).merge($e).extend({name:Gn.meta(Aa),handle:hn.meta(Aa),description:Ts.meta(Aa),is_production:z.boolean().default(false).meta({...Aa,readOnly:true}),status:gA.default("active").meta(Aa),cloned_from_environment_id:z.string().nullable().default(null).meta({...Aa,readOnly:true}),cloned_at:Dn.meta({...Aa,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Aa,readOnly:true}),requires_approval:z.boolean().default(false).meta(Aa),auto_deploy_on_approval:z.boolean().default(false).meta(Aa),created_by:z.string().optional().meta(Aa),metadata:Ln.meta(Aa)}).meta({id:"Environment","x-revturbine-schema-persistence":pA,"x-revturbine-schema-exposure":Wp}),hA=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":Vy,"x-revturbine-schema-exposure":Wp});({"/api/environments":{get:y({operationId:"listEnvironments",requestParams:{query:oe},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:se(To)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:y({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:To}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:y({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:y({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:To.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:y({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:To}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:y({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:hA}}},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:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ke,Pii:pc}=gn,{Transient:hi,Persisted:fA}=An,{External:Wa}=Pn,_A=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa});z.object({superseded_output_id:z.string().min(1).meta(Ke),superseded_by:z.string().min(1).meta(Ke),reason:_A.meta(Ke)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":fA,"x-revturbine-schema-exposure":Wa,...gn.Operational});var yA=z.enum(L_).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa}),By=z.object({output_id:z.string().meta(Ke),category:z.string().meta(Ke),surface:z.object({template:z.string().optional().meta(Ke),type:$m.meta(Ke),slot_id:z.string().optional().meta(Ke)}).meta(Ke),content:z.record(z.string(),z.unknown()).meta(Ke),promotion:z.record(z.string(),z.unknown()).optional().meta(Ke),cta_path:z.record(z.string(),z.unknown()).optional().meta(Ke),ui_path:z.record(z.string(),z.unknown()).optional().meta(Ke),rule_id:z.string().meta(Ke),decision_id:z.string().meta(Ke),config_version:z.string().meta(Ke),present_upsell:z.boolean().meta(Ke),experiment_id:z.string().optional().meta(Ke),variant_key:z.string().optional().meta(Ke),experiment_version_id:z.string().optional().meta(Ke)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa}),vA=z.object({status:yA.meta(Ke),allowed:z.boolean().meta(Ke),reason:z.string().optional().meta(Ke),current_tier:z.string().optional().meta(Ke),limit:z.number().optional().meta(Ke),used:z.number().optional().meta(Ke),remaining:z.number().optional().meta(Ke),placement:By.optional().meta(Ke)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa});z.object({id:z.string().meta(Ke),name:z.string().optional().meta(Ke),discount:z.string().optional().meta(Ke),type:z.string().optional().meta(Ke),status:z.string().optional().meta(Ke)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa});var bA=z.object({id:z.string().meta(pc),anonymous_id:z.string().optional().meta(Ke),traits:z.record(z.string(),z.unknown()).optional().meta(pc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa}),xA=z.object({slot_id:z.string().optional().meta(Ke),entitlement_handle:z.string().optional().meta(Ke),plan_handle:z.string().optional().meta(Ke),placement_handle:z.string().optional().meta(Ke),visible:z.boolean().meta(Ke),output:By.optional().meta(Ke),reason_codes:z.array(z.string()).optional().meta(Ke)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa}),SA=vA,PA=Op.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa}),TA=z.object({segments:z.array(z.string()).optional().meta(Ke),traits:z.record(z.string(),z.unknown()).optional().meta(pc),usage_balances:z.record(z.string(),z.number()).optional().meta(Ke)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa});z.object({version:z.literal("1.0.0").meta(Ke),request_id:z.string().meta(Ke),tenant_id:z.string().meta(Ke),evaluated_at:z.string().datetime().meta(Ke),ttl_seconds:z.number().int().min(0).max(86400).meta(Ke),user:bA.meta(pc),decisions:z.array(xA).meta(Ke),entitlements:z.record(z.string(),SA).optional().meta(Ke),theme:z.record(z.string(),z.unknown()).optional().meta(Ke),trial_status:PA.optional().meta(Ke),user_context:TA.optional().meta(pc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":hi,"x-revturbine-schema-exposure":Wa});var {Unrestricted:Zt}=gn,{Persisted:IA,Transient:tu}=An,{Internal:Ec}=Pn,CA=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ec}),oc=ge.merge(Ae).merge($e).extend({environment_id:z.string().min(1).meta(Zt),name:Gn.meta(Zt),description:z.string().max(2e3).optional().meta(Zt),status:CA.default("draft").meta(Zt),labels:z.array(z.string()).default([]).meta(Zt),created_by:z.string().min(1).meta(Zt),submitted_by:z.string().nullable().default(null).meta({...Zt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Zt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Zt,readOnly:true}),submitted_at:Dn.meta({...Zt,readOnly:true}),reviewed_at:Dn.meta({...Zt,readOnly:true}),deployed_at:Dn.meta({...Zt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Zt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Zt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Zt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Zt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Zt),review_notes:z.string().max(2e3).optional().meta(Zt),rejection_reason:z.string().max(2e3).optional().meta(Zt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Zt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Zt,readOnly:true}),metadata:Ln.meta(Zt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":IA,"x-revturbine-schema-exposure":Ec}),zy=z.object({handle:z.string().meta(Zt),resource_type:z.string().meta(Zt),resource_name:z.string().optional().meta(Zt),action:z.enum(["create","update","delete"]).meta(Zt),has_conflict:z.boolean().meta(Zt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ec}),EA=z.object({playbook_version_id:z.string().meta(Zt),entries:z.array(zy).meta(Zt),total_entries:z.number().int().min(0).meta(Zt),total_conflicts:z.number().int().min(0).meta(Zt),deployable:z.boolean().meta(Zt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ec}),RA=z.object({playbook_version_id:z.string().meta(Zt),deployed_count:z.number().int().min(0).meta(Zt),superseded_count:z.number().int().min(0).meta(Zt),skipped_conflicts:z.number().int().min(0).meta(Zt),deployed_at:z.string().datetime().meta(Zt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ec});({"/api/playbook-versions/{playbookVersionId}/submit":{post:y({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:oc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:y({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:oc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:y({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:oc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:y({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:RA}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:y({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:oc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:y({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:EA}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:y({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:oe},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:se(zy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:y({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:oc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:y({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Rt,Pii:kA}=gn,{Persisted:Za}=An,{Internal:Qa}=Pn,AA=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),Vm=ge.merge(Ae).merge($e).extend({name:Gn.meta(Rt),key_hash:z.string().min(1).meta({...kA,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Rt,readOnly:true}),key_last4:z.string().length(4).meta({...Rt,readOnly:true}),status:AA.default("active").meta(Rt),last_used_at:Dn.meta({...Rt,readOnly:true}),expires_at:Dn.meta(Rt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),wA=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),xs=ge.merge(Ae).merge($e).extend({key:z.string().min(1).max(100).meta(Rt),value_type:wA.default("boolean").meta(Rt),value:z.string().max(4e3).default("false").meta(Rt),description:Ts.meta(Rt),enabled:z.boolean().default(true).meta(Rt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),Tp=ge.merge(Ae).merge($e).extend({workspace_name:z.string().min(1).max(200).meta(Rt),support_email:z.string().email().nullable().default(null).meta(Rt),timezone:z.string().max(50).default("UTC").meta(Rt),default_currency:z.string().length(3).default("USD").meta(Rt),logo_url:z.string().url().nullable().default(null).meta(Rt),activity_window_days:z.number().int().min(1).default(30).meta(Rt),activity_high_min:z.number().int().min(1).default(10).meta(Rt),activity_medium_min:z.number().int().min(1).default(3).meta(Rt),activity_low_min:z.number().int().min(1).default(1).meta(Rt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),Ip=ge.merge(Ae).merge($e).extend({server_url:z.string().url().max(500).meta(Rt),api_token_hint:z.string().max(50).nullable().default(null).meta(Rt),allow_write_actions:z.boolean().default(false).meta(Rt),enabled_tools:z.array(z.string().max(100)).default([]).meta(Rt),enabled:z.boolean().default(false).meta(Rt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),Bm=ge.merge(Ae).merge($e).extend({step_key:z.string().min(1).max(100).meta(Rt),label:z.string().min(1).max(200).meta(Rt),done:z.boolean().default(false).meta(Rt),completed_at:Dn.meta({...Rt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),jA=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),OA=ge.merge($e).extend({environment_id:z.string().min(1).default("production").meta(Rt),actor_type:jA.meta(Rt),actor_id:z.string().nullable().default(null).meta(Rt),action:z.string().min(1).max(120).meta(Rt),object_type:z.string().max(120).nullable().default(null).meta(Rt),object_id:z.string().max(200).nullable().default(null).meta(Rt),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Rt),occurred_at:z.string().datetime().meta({...Rt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),qA=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa}),zm=ge.merge(Ae).merge($e).merge(vn).merge(Tn).extend({handle:hn.meta({...Rt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Rt),identifier_type:qA.default("user_id").meta(Rt),note:z.string().max(500).nullable().default(null).meta(Rt),added_by:z.string().meta(Rt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Za,"x-revturbine-schema-exposure":Qa,...Oa()});({"/api/settings/api-keys":{get:y({operationId:"listApiKeys",requestParams:{query:oe},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:se(Vm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:y({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Dr(Vm)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Vm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:y({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:Vm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:y({operationId:"listFeatureFlags",requestParams:{query:oe},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:se(xs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:y({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Dr(xs)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:y({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:y({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(xs).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:y({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:y({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Tp).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Tp}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:y({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Ip).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Ip}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:y({operationId:"listOnboardingSteps",requestParams:{query:oe},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:se(Bm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:y({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:Bm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:y({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ur(Bm).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Bm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:y({operationId:"listAuditEvents",requestParams:{query:oe},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:se(OA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:y({operationId:"listPlacementTestUsers",requestParams:{query:oe},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:se(zm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:y({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Dr(zm)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:zm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:y({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:zm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:ue,Pii:Kr}=gn,{Persisted:ra,Transient:Zp}=An,{Internal:Rr}=Pn,DA=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.merge(Ae).extend({name:Gn.meta(ue),email:z.string().email().meta(Kr),email_verified:z.boolean().default(false).meta(ue),image:z.string().url().nullable().default(null).meta(Kr),role:DA.default("user").meta(ue),banned:z.boolean().default(false).meta({...ue,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ue,readOnly:true}),ban_expires:Dn.meta({...ue,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ue,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.merge(Ae).extend({expires_at:z.string().datetime().meta(ue),token:z.string().min(1).meta({...Kr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Kr),user_agent:z.string().nullable().default(null).meta(Kr),user_id:z.string().min(1).meta({...ue,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ue),impersonated_by:z.string().nullable().default(null).meta({...ue,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.merge(Ae).extend({account_id:z.string().min(1).meta(ue),provider_id:z.string().min(1).meta(ue),user_id:z.string().min(1).meta({...ue,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Kr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Kr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Kr,readOnly:true}),access_token_expires_at:Dn.meta({...ue,readOnly:true}),refresh_token_expires_at:Dn.meta({...ue,readOnly:true}),scope:z.string().nullable().default(null).meta(ue),password:z.string().nullable().default(null).meta({...Kr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.merge(Ae).extend({identifier:z.string().min(1).meta(Kr),value:z.string().min(1).meta({...Kr,readOnly:true}),expires_at:z.string().datetime().meta(ue)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({secret:z.string().min(1).meta({...Kr,readOnly:true}),backup_codes:z.string().min(1).meta({...Kr,readOnly:true}),user_id:z.string().min(1).meta({...ue,readOnly:true}),verified:z.boolean().default(false).meta({...ue,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({name:Gn.meta(ue),slug:z.string().min(1).max(100).nullable().default(null).meta(ue),logo:z.string().url().nullable().default(null).meta(ue),created_at:z.string().datetime().meta({...ue,readOnly:true}),metadata:z.string().nullable().default(null).meta(ue)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});var Ky=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});var $y=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":Rr}),Hy=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":Rr});z.object({resource:$y,action:Hy}).meta({id:"Permission","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":Rr});var UA=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],MA=["plans","entitlements","placements","targeting","content","experiments"],FA=["plans","entitlements","placements","targeting","content","experiments"],LA=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],NA=["read","create","update","delete","publish","approve","invite","manage_roles"];function nu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var VA=nu(UA,["read"]),BA=[...VA,...nu(MA,["create","update"])];[...BA,...nu(FA,["publish","approve","delete"])];nu(LA,NA);var zA=$y.options.flatMap(t=>Hy.options.map(e=>`${t}:${e}`));z.enum(zA).meta({id:"McpTokenScope","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({organization_id:z.string().min(1).meta({...ue,readOnly:true}),user_id:z.string().min(1).meta({...ue,readOnly:true}),role:Ky.default("viewer").meta(ue),created_at:z.string().datetime().meta({...ue,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});var KA=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({organization_id:z.string().min(1).meta({...ue,readOnly:true}),email:z.string().email().meta(Kr),role:Ky.nullable().default(null).meta(ue),status:KA.default("pending").meta(ue),expires_at:z.string().datetime().meta(ue),created_at:z.string().datetime().meta({...ue,readOnly:true}),inviter_id:z.string().min(1).meta({...ue,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({name:z.string().max(200).nullable().default(null).meta(ue),public_key:z.string().min(1).meta({...Kr,readOnly:true}),user_id:z.string().min(1).meta({...ue,readOnly:true}),credential_id:z.string().min(1).meta({...ue,readOnly:true}),counter:z.number().int().default(0).meta({...ue,readOnly:true}),device_type:z.string().min(1).meta(ue),backed_up:z.boolean().default(false).meta(ue),transports:z.string().nullable().default(null).meta(ue),created_at:z.string().datetime().meta({...ue,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ue)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.merge(Ae).extend({config_id:z.string().min(1).meta(ue),name:z.string().max(200).nullable().default(null).meta(ue),start:z.string().nullable().default(null).meta(ue),reference_id:z.string().min(1).meta(ue),prefix:z.string().nullable().default(null).meta(ue),key:z.string().min(1).meta({...Kr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ue),refill_amount:z.number().int().nullable().default(null).meta(ue),last_refill_at:Dn.meta({...ue,readOnly:true}),enabled:z.boolean().default(true).meta(ue),rate_limit_enabled:z.boolean().default(false).meta(ue),rate_limit_time_window:z.number().int().nullable().default(null).meta(ue),rate_limit_max:z.number().int().nullable().default(null).meta(ue),request_count:z.number().int().default(0).meta({...ue,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ue,readOnly:true}),last_request:Dn.meta({...ue,readOnly:true}),expires_at:Dn.meta(ue),permissions:z.string().nullable().default(null).meta(ue),metadata:z.string().nullable().default(null).meta(ue)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});ge.extend({issuer:z.string().min(1).meta(ue),oidc_config:z.string().nullable().default(null).meta(ue),saml_config:z.string().nullable().default(null).meta(ue),user_id:z.string().min(1).meta({...ue,readOnly:true}),provider_id:z.string().min(1).meta(ue),organization_id:z.string().nullable().default(null).meta(ue),domain:z.string().min(1).meta(ue)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":ra,"x-revturbine-schema-exposure":Rr});var Gy="0.5.0";var ru=/^[a-z0-9._]{1,100}$/;var Le={Persisted:"persisted",Transient:"transient"},je={Internal:"internal",External:"external"},ke={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 Yy="x-revturbine-schema-exposure",GA="readOnly",YA="x-revturbine-decision-only",au={[YA]:true},Hr={[Yy]:je.External},Qp={[Yy]:je.Internal};function Yn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[GA]===true||(e[n]=r);}return z.object(e)}function tr(t){let e=Yn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(ru)}):e}var {Unrestricted:yr}=ke,{Transient:Gr,Persisted:WA}=Le,{Internal:Is,External:fi}=je;z.object({page:z.coerce.number().int().min(1).default(1).meta(yr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(yr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi});var Jp=t=>z.object({items:z.array(t).meta(yr),total:z.number().int().min(0).meta(yr),page:z.number().int().min(1).meta(yr),per_page:z.number().int().min(1).meta(yr),has_more:z.boolean().meta(yr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi}),ee=z.object({created_at:z.string().datetime().meta({...yr,readOnly:true}),updated_at:z.string().datetime().meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi}),$=z.object({id:z.string().min(1).meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi}),le=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi});var Rc=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi}),kc=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi});var Bo=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi}),Xp=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is});var Bt=z.string().min(1).max(200),ht=z.string().min(1).max(100),fa=z.string().max(500).optional(),At=z.record(z.string(),z.unknown()).default({}),is=z.number().int().min(10).max(100).multipleOf(10),zt=z.string().datetime().nullable().default(null),wt=z.object({environment_id:z.string().min(1).default("production").meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is}),Ut=z.object({playbook_version_id:z.string().nullable().default(null).meta(yr),is_current:z.boolean().default(true).meta({...yr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...yr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...yr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...yr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is}),ew=$.merge(ee).merge(le).merge(wt).extend({handle:ht.meta({...yr,readOnly:true}),active:z.boolean().default(true).meta({...yr,readOnly:true})});function fn(t){return ew.meta({id:t,"x-revturbine-schema-persistence":WA,"x-revturbine-schema-exposure":Is})}var zo=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is}),eg=z.enum(["button","plans_page_ctas","plans_page_full","inline_gate_message","tooltip","in_page_card","usage_counter","credit_counter","trial_counter","banner","modal_optional","modal_blocking","toast","email","sms","push","cli","agent_connector","custom_in_app"]).meta({id:"StudioSurfaceType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":Is}),Ko=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaActionType","x-revturbine-schema-persistence":Gr,"x-revturbine-schema-exposure":fi});var We={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},aa={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},tw="x-revturbine-context",nw="x-revturbine-in-config",rw="x-revturbine-sdk-input",aw="x-revturbine-source",iw="x-revturbine-deprecation",sw={[We.Playbook]:aa.Customer,[We.Branding]:aa.Customer,[We.Billing]:aa.Stripe,[We.Metering]:aa.Customer,[We.CustomerOperations]:aa.Runtime,[We.EventIngestion]:aa.Runtime};function vt(t,e){return {[tw]:t,[nw]:e.inConfig??t===We.Playbook,[rw]:e.sdkInput,[aw]:e.source??sw[t]}}function Ac(t){return {deprecated:true,[iw]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var tg={Named:"named",Minted:"minted"},Wy="x-revturbine-schema-identity";function wn(t="handle"){return {[Wy]:{kind:tg.Named,handleField:t}}}function vr(t="handle"){return {[Wy]:{kind:tg.Minted,handleField:t}}}var V=t=>z.object({items:z.array(t)}),Oe=z.object({error:z.string(),code:z.string(),request_id:z.string()}),f=t=>t,K=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:Ht,Financial:iu}=ke,{Persisted:wc,Transient:su}=Le,{External:Ui}=je,ow=vt(We.Playbook,{sdkInput:true}),lw=vt(We.Playbook,{sdkInput:false}),ng=vt(We.Billing,{sdkInput:false}),_i=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":su,"x-revturbine-schema-exposure":Ui}),ws=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":su,"x-revturbine-schema-exposure":Ui}),$o=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":su,"x-revturbine-schema-exposure":Ui}),Cs=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ht,readOnly:true}),name:Bt.meta(Ht),handle:ht.meta(Ht),tier_position:z.number().int().min(0).default(0).meta(Ht),sort_order:z.number().int().default(0).meta(Ht),visibility:_i.default("public").meta(Ht),metadata:At.meta(Ht)}).meta({id:"Plan","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ui,...ow,...wn()}),cw=fn("PlanAnchor"),Es=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ht,readOnly:true}),handle:ht.meta({...Ht,readOnly:true}),plan_id:z.string().min(1).meta(Ht),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Ht),segment_id:z.string().nullable().default(null).meta(Ht),price_amount:z.number().min(0).meta(iu),pricing_model:ws.meta(Ht),visibility:_i.default("public").meta(Ht),stripe_price_id:z.string().optional().meta(Ht),price_source:$o.default("static").meta(Ht)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ui,...ng,...vr()}),mw=fn("PlanVariationAnchor"),Rs=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ht,readOnly:true}),name:Bt.meta(Ht),handle:ht.meta(Ht),sort_order:z.number().int().default(0).meta(Ht),visibility:_i.default("public").meta(Ht),metadata:At.meta(Ht)}).meta({id:"AddOn","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ui,...lw,...wn()}),uw=fn("AddOnAnchor"),ks=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ht,readOnly:true}),handle:ht.meta({...Ht,readOnly:true}),addon_id:z.string().min(1).meta(Ht),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Ht),segment_id:z.string().nullable().default(null).meta(Ht),price_amount:z.number().min(0).meta(iu),pricing_model:ws.meta(Ht),visibility:_i.default("public").meta(Ht),stripe_price_id:z.string().optional().meta(Ht),price_source:$o.default("static").meta(Ht)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ui,...ng,...vr()}),dw=fn("AddOnVariationAnchor"),Zy=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":su,"x-revturbine-schema-exposure":Ui}),As=$.merge(ee).merge(le).extend({stripe_price_id:z.string().min(1).meta(Ht),stripe_product_id:z.string().min(1).meta(Ht),billing_period:Zy.meta(Ht),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(iu),currency:Xp.meta(iu),pricing_model:ws.meta(Ht),nickname:z.string().nullable().default(null).meta(Ht),is_mock:z.boolean().default(false).meta(Ht),last_updated_from_stripe:zt.meta(Ht)}).meta({id:"StripePrice","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":Ui,...ng});var pw=Yn(Cs),gw=Yn(Es),hw=Yn(Rs),fw=Yn(ks),_w=Yn(As);({"/api/plan-anchors":{get:f({operationId:"listPlanAnchors",requestParams:{query:K},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:V(cw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:f({operationId:"listPlans",requestParams:{query:K},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:V(Cs)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:f({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(Cs)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Cs}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:f({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Cs}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:f({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:pw}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Cs}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:f({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:f({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:f({operationId:"listPlanVariationAnchors",requestParams:{query:K},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:V(mw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:f({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:K},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:V(Es)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:f({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(Es)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:f({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:f({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:gw}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:f({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:f({operationId:"listAddOnAnchors",requestParams:{query:K},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:V(uw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:f({operationId:"listAddOns",requestParams:{query:K},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:V(Rs)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:f({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(Rs)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Rs}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:f({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Rs}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:f({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:hw}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Rs}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:f({operationId:"listAddOnVariationAnchors",requestParams:{query:K},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:V(dw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:f({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:K},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:V(ks)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:f({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(ks)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:f({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:f({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:fw}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:f({operationId:"listStripePrices",requestParams:{query:K},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:V(As)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:f({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:tr(As)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:f({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:f({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:_w}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:f({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:Pe}=ke,{Persisted:ag,Transient:_a}=Le,{Internal:Qy,External:ia}=je,Jy=vt(We.Playbook,{sdkInput:true}),vw=vt(We.Playbook,{inConfig:false,sdkInput:false}),ig=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),Ho=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),Xy=z.enum(kc).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),ev=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),sg=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),Os=z.object({entitlement_id:z.string().min(1).meta(Pe),entitlement_handle:z.string().min(1).meta(Pe),status:Xy.meta(Pe),limit:z.number().optional().meta(Pe),used:z.number().optional().meta(Pe),allocation:Ho.optional().meta(Pe),enforcement:sg.optional().meta(Pe),source:ev.optional().meta(Pe),plan_id:z.string().optional().meta(Pe),segment_id:z.string().optional().meta(Pe),seat_type_id:z.string().optional().meta(Pe),rule_id:z.string().optional().meta(Pe)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia,...ke.Operational});z.object({account:z.record(z.string(),Os).optional().meta(Pe),instance:z.record(z.string(),Os).optional().meta(Pe),user:z.record(z.string(),Os).optional().meta(Pe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia,...ke.Operational});var tv=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),nv=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),lu=z.object({kind:nv.meta(Pe),id:z.string().min(1).meta(Pe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),rv=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),js=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Pe,readOnly:true}),name:Bt.meta(Pe),handle:ht.meta(Pe),customer_facing_description:z.string().max(500).optional().meta(Pe),type:Bo.meta(Pe),unit:z.string().max(100).optional().meta(Pe),period_scope:ig.optional().meta(Pe),allocation:Ho.optional().meta(Pe),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Pe),sort_order:z.number().int().default(0).meta(Pe),metadata:At.meta(Pe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":ia,...Jy,...wn()}),xw=fn("EntitlementAnchor"),ss=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Pe,readOnly:true}),handle:ht.meta({...Pe,readOnly:true}),entitlement_id:z.string().min(1).meta(Pe),targets:z.array(lu).min(1).meta(Pe),segment_ids:z.array(z.string()).default([]).meta(Pe),visibility:tv.default("public").meta(Pe),period_scope:ig.optional().meta(Pe),instance:z.string().max(100).optional().meta(Pe),reset_period:rv.optional().meta(Pe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Pe),enforcement:sg.optional().meta(Pe),warning_threshold_percent:is.optional().meta(Pe),overage_price_ref:z.string().optional().meta(Pe),grace_period_hours:z.number().int().min(0).optional().meta(Pe),tier_value:z.string().optional().meta(Pe),rate_value:z.number().optional().meta(Pe),initial_grant:z.number().optional().meta(Pe),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Pe),rollover_enabled:z.boolean().optional().meta(Pe),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Pe),seat_type_id:z.string().optional().meta(Pe),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Pe),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Pe),stripe_metered_price_id:z.string().optional().meta(Pe),enabled:z.boolean().optional().meta(Pe),allocation:Ho.optional().meta(Pe),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Pe),amount_cents:z.number().int().optional().meta(Pe),currency:z.string().optional().meta(Pe)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":Qy,...Jy,...vr()}),Sw=fn("EntitlementRuleAnchor");ss.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var Tw=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),Iw=z.object({code:Tw.meta(Pe),message:z.string().min(1).meta(Pe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Pe)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia}),rg=ss.extend({warnings:z.array(Iw).optional().meta(Pe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":_a,"x-revturbine-schema-exposure":ia});var ou=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({handle:ht.meta({...Pe,readOnly:true}),rule_id:z.string().min(1).meta(Pe),experiment_id:z.string().min(1).meta(Pe),variant_name:z.string().min(1).max(200).meta(Pe),is_control:z.boolean().default(false).meta(Pe),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Pe)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":ag,"x-revturbine-schema-exposure":Qy,...vw,...vr()}),Cw=Yn(js),Ew=Yn(ss);({"/api/entitlement-anchors":{get:f({operationId:"listEntitlementAnchors",requestParams:{query:K},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:V(xw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:f({operationId:"listEntitlementRuleAnchors",requestParams:{query:K},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:V(Sw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:f({operationId:"listEntitlements",requestParams:{query:K},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:V(js)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:f({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(js)}}},responses:{201:{description:"Created",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:f({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:f({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:f({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:K},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:V(ss)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:f({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(ss)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:f({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ew}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:f({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:rg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:f({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:K},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:V(ou)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:f({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:tr(ou)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Ne}=ke,{Persisted:cu,Transient:os}=Le,{External:Ma}=je,iv=vt(We.Playbook,{sdkInput:true});vt(We.Playbook,{inConfig:false,sdkInput:false});var kw=vt(We.Playbook,{inConfig:false,sdkInput:true}),Aw=vt(We.Playbook,{inConfig:false,sdkInput:false,source:aa.Runtime}),ww=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var og=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma}),lg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma}),sv=z.object({count:z.number().int().positive().meta(Ne),period:lg.meta(Ne)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma});z.object({surface_type:z.string().min(1).meta(Ne),rules:z.array(sv).meta(Ne),cooldown_ms:z.number().int().nonnegative().optional().meta(Ne)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ma,...ke.Operational,...kw});var ov=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma}),qs=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),name:Bt.meta(Ne),handle:ht.meta(Ne),description:fa.meta(Ne),category:og.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:is.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:ww.optional().meta(Ne),activation_window_start:z.string().datetime().optional().meta(Ne),activation_window_end:z.string().datetime().optional().meta(Ne),metadata:At.meta(Ne)}).meta({id:"Placement","x-revturbine-schema-persistence":cu,"x-revturbine-schema-exposure":Ma,...iv,...wn()}),Ow=fn("PlacementAnchor"),lv=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma}),cv=z.object({code:lv.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":os,"x-revturbine-schema-exposure":Ma}),av=qs.extend({warnings:z.array(cv).optional().meta(Ne)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma});var mv=z.object({label:z.string().min(1).max(200).meta(Ne),cta_path_type:ov.meta(Ne),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ne)}).meta({id:"CtaObject","x-revturbine-schema-persistence":os,"x-revturbine-schema-exposure":Ma}),Go=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...Ne,readOnly:true}),handle:ht.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(mv).default([]).meta(Ne),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ne),max_period_unit:lg.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":cu,"x-revturbine-schema-exposure":Ma,...iv,...vr()}),qw=fn("PlacementPayloadAnchor"),uv=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ne),surface_type:Rc.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":cu,"x-revturbine-schema-exposure":Ma,...Aw,...wn("surface_slot_handle")}),Dw=Yn(qs),Uw=Yn(Go);({"/api/placement-anchors":{get:f({operationId:"listPlacementAnchors",requestParams:{query:K},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:V(Ow)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:f({operationId:"listPlacements",requestParams:{query:K},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:V(qs)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:f({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:tr(qs)}}},responses:{201:{description:"Created",content:{"application/json":{schema:av}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:f({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:f({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Dw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:av}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:f({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:f({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:qs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:f({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:og,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:f({operationId:"listPlacementPayloadAnchors",requestParams:{query:K},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:V(qw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:f({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:K},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:V(Go)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:f({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:tr(Go)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:f({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Uw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:f({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:f({operationId:"listSurfaceSlots",requestParams:{query:K},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:V(uv)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Fr,Pii:Yo}=ke,{Persisted:mg,Transient:ug}=Le,{Internal:Wo}=je,Fw=vt(We.CustomerOperations,{sdkInput:false}),dv=z.object({external_id:z.string().min(1).meta(Yo),traits:z.record(z.string(),z.unknown()).default({}).meta(Yo),plan_id:z.string().optional().meta(Fr)}).meta({id:"Identity","x-revturbine-schema-persistence":mg,"x-revturbine-schema-exposure":Wo}),mu=z.enum(["payment_failed","payment_method_missing"]),cg=$.merge(ee).merge(le).extend({external_id:z.string().min(1).meta(Yo),identity:dv.meta(Yo),stripe_customer_id:z.string().optional().meta(Fr),current_plan_id:z.string().optional().meta(Fr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Fr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Fr),billing_health_issues:z.array(mu).default([]).meta(Fr),metadata:At.meta(Fr)}).meta({id:"Customer","x-revturbine-schema-persistence":mg,"x-revturbine-schema-exposure":Wo}),pv=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":ug,"x-revturbine-schema-exposure":Wo}),gv=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":ug,"x-revturbine-schema-exposure":Wo}),hv=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":ug,"x-revturbine-schema-exposure":Wo}),Mi=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({handle:ht.meta({...Fr,readOnly:true}),customer_id:z.string().min(1).meta(Yo),customer_id_list:z.array(z.string()).optional().meta(Yo),override_type:gv.meta(Fr),target_id:z.string().min(1).meta(Fr),value:z.record(z.string(),z.unknown()).default({}).meta(Fr),duration_type:pv.default("permanent").meta(Fr),duration_value:z.string().optional().meta(Fr),expiry_date:zt.meta(Fr),status:hv.default("active").meta(Fr),reason:z.string().max(500).optional().meta(Fr),created_by:z.string().optional().meta(Fr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":mg,"x-revturbine-schema-exposure":Wo,...Fw,...vr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:K},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:V(cg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:f({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:cg}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:f({operationId:"listCustomerOverrides",requestParams:{query:K},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:V(Mi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:f({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:f({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Mi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:f({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:f({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:f({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:qe,Pii:jc,Financial:dg}=ke,{Persisted:fv,Transient:yi}=Le,{External:Zo,Internal:Oc}=je,qc=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":yi,"x-revturbine-schema-exposure":Zo}),pg=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":yi,"x-revturbine-schema-exposure":Zo});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Zo});var gg=z.object({handle: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":yi,"x-revturbine-schema-exposure":Zo}),_v=z.object({product_instance_id:z.string().min(1).meta(qe),user_id:z.string().min(1).meta(jc),plan:gg.optional().meta(qe),usage:z.record(z.string(),pg).default({}).meta(qe),trial:qc.optional().meta(qe),entitlements:z.record(z.string(),z.union([z.boolean(),Os])).default({}).meta(qe)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":fv,"x-revturbine-schema-exposure":Zo}),Ds=$.merge(le).merge(ee).extend({user_id:z.string().min(1).meta(jc),account_id:z.string().min(1).nullable().optional().meta(jc),email:z.string().email().nullable().optional().meta(jc),email_type:z.string().optional().meta(qe),plan_handle:z.string().min(1).optional().meta(qe),plan:gg.optional().meta(qe),usage:z.record(z.string(),pg).default({}).meta(qe),trial:qc.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(),Os])).default({}).meta(qe),instances:z.array(_v).optional().meta(qe),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(jc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...qe,"x-revturbine-schema-persistence":yi}),derived_config_version:z.string().nullable().optional().meta(qe),context_hash:z.string().nullable().optional().meta(qe),derived_computed_at:zt.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":fv,"x-revturbine-schema-exposure":Zo}),Vw=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...qe,...Hr}),days_remaining:z.number().int().min(0).optional().meta({...qe,...Hr}),ends_at:z.string().optional().meta({...qe,...Hr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Oc}),Bw=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...qe,...Hr}),failed_payment_reason:z.string().optional().meta({...dg,...au}),issues:z.array(mu).optional().meta({...dg,...au}),provider_subscription_id:z.string().optional().meta({...dg,...Qp})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Oc}),zw=z.object({can_upgrade:z.boolean().optional().meta({...qe,...Hr}),can_manage_billing:z.boolean().optional().meta({...qe,...Hr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Oc}),Kw=z.object({handle:z.string().min(1).optional().meta({...qe,...Hr}),name:z.string().min(1).optional().meta({...qe,...Hr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Oc});z.object({subject:z.string().min(1).meta({...qe,...Hr}),context_version:z.string().optional().meta({...qe,...Hr}),trial:Vw.optional().meta({...qe,...Hr}),billing:Bw.optional().meta({...qe,...Hr}),plan:Kw.optional().meta({...qe,...Hr}),capabilities:zw.optional().meta({...qe,...Hr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":yi,"x-revturbine-schema-exposure":Oc});({"/api/user-contexts":{get:f({operationId:"listUserContexts",requestParams:{query:K},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:V(Ds)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:f({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:f({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Ds.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ds}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:f({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:nr}=ke,{Persisted:hg,Transient:yv}=Le,{Internal:Dc}=je,Gw=vt(We.Playbook,{sdkInput:true}),vv=vt(We.Playbook,{inConfig:false,sdkInput:true}),bv=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":Dc}),xv=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":Dc}),uu=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),name:Bt.meta(nr),handle:ht.optional().meta(nr),category:bv.default("custom").meta(nr),visibility_toggle:z.boolean().default(true).meta(nr),source_type:xv.default("system").meta(nr),estimated_size:z.number().int().min(0).optional().meta(nr)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":Dc,...vv,...wn()}),Yw=fn("SegmentDimensionAnchor"),du=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),dimension_id:z.string().min(1).meta(nr),name:Bt.meta(nr),handle:ht.meta(nr),description:fa.meta(nr),definition_rule:z.record(z.string(),z.unknown()).optional().meta(nr),used_in_count:z.number().int().min(0).default(0).meta({...nr,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":Dc,...vv,...wn()}),Ww=fn("SegmentValueAnchor");$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...nr,readOnly:true}),name:Bt.meta(nr),handle:ht.meta(nr),description:fa.meta(nr),rules:z.record(z.string(),z.unknown()).default({}).meta(nr),experiment_id:z.string().min(1).optional().meta(nr),is_active:z.boolean().default(true).meta(nr),estimated_size:z.number().int().min(0).nullable().default(null).meta(nr),metadata:At.meta(nr)}).meta({id:"Segment","x-revturbine-schema-persistence":hg,"x-revturbine-schema-exposure":Dc,...Gw,...wn()});({"/api/segment-dimension-anchors":{get:f({operationId:"listSegmentDimensionAnchors",requestParams:{query:K},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:V(Yw)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:f({operationId:"listSegmentValueAnchors",requestParams:{query:K},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:V(Ww)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:f({operationId:"listSegmentDimensions",requestParams:{query:K},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:V(uu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:f({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:uu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:f({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:f({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:f({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:K},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:V(du)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:f({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:du}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:f({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:du}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:f({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:ft}=ke,{Persisted:Qo,Transient:Sv}=Le,{External:ls}=je,fg=vt(We.Playbook,{sdkInput:true}),Jw=vt(We.Playbook,{inConfig:false,sdkInput:false}),Xw=vt(We.Playbook,{inConfig:false,sdkInput:true}),ej=vt(We.Playbook,{inConfig:false,sdkInput:true,source:aa.CodeConstant});$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true}),handle:ht.meta({...ft,readOnly:true}),name:Bt.meta(ft),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(ft),subject:z.string().max(500).optional().meta(ft),body:z.string().meta(ft),template_variables:z.array(z.string()).default([]).meta(ft),metadata:At.meta(ft)}).meta({id:"Message","x-revturbine-schema-persistence":Qo,"x-revturbine-schema-exposure":ls,...Jw,...vr()});var pu=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),action_type:Ko.meta(ft),target_url:z.string().optional().meta(ft),target_plan_id:z.string().optional().meta(ft),config_fields:z.record(z.string(),z.unknown()).default({}).meta(ft),metadata:At.meta(ft)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Qo,"x-revturbine-schema-exposure":ls,...fg,...wn()}),nj=fn("CtaPathAnchor"),Pv=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":Qo,"x-revturbine-schema-exposure":ls,...ej}),Tv=z.object({name:z.string().min(1),field_type:Pv,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":Qo,"x-revturbine-schema-exposure":ls,...Xw}),gu=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),surface_type:eg.meta(ft),field_definitions:z.array(Tv).default([]).meta(ft),description:fa.meta(ft)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Qo,"x-revturbine-schema-exposure":ls,...fg,...wn()}),rj=fn("SurfaceTemplateAnchor"),hu=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),content_fields:z.record(z.string(),z.unknown()).default({}).meta(ft),variation_dimension_id:z.string().optional().meta(ft),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(ft),notes:z.string().max(1e3).optional().meta(ft),used_in_count:z.number().int().min(0).default(0).meta({...ft,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Qo,"x-revturbine-schema-exposure":ls,...fg,...wn()}),aj=fn("MessageBlockRecordAnchor"),Iv=z.object({segment_id:z.string().min(1).meta(ft),message_block_id:z.string().min(1).meta(ft),ui_path_id:z.string().optional().meta(ft),promotion_id:z.string().optional().meta(ft)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Sv,"x-revturbine-schema-exposure":ls});z.object({payload_id:z.string().min(1).meta(ft),tenant_id:z.string().min(1).meta(ft),name:Bt.meta(ft),surface_template_id:z.string().min(1).meta(ft),default_message_block_id:z.string().min(1).meta(ft),segment_content_map:z.array(Iv).optional().meta(ft),ui_path_id:z.string().optional().meta(ft),promotion_id:z.string().optional().meta(ft),status:z.enum(["draft","active","inactive"]).meta(ft),created_at:z.string().datetime().optional().meta({...ft,readOnly:true}),updated_at:z.string().datetime().optional().meta({...ft,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Sv,"x-revturbine-schema-exposure":ls});({"/api/surface-template-anchors":{get:f({operationId:"listSurfaceTemplateAnchors",requestParams:{query:K},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:V(rj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:f({operationId:"listSurfaceTemplates",requestParams:{query:K},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:V(gu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:f({operationId:"listMessageBlockRecordAnchors",requestParams:{query:K},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:V(aj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:f({operationId:"listMessageBlocks",requestParams:{query:K},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:V(hu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:f({operationId:"listCtaPathAnchors",requestParams:{query:K},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:V(nj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:f({operationId:"listCtaPaths",requestParams:{query:K},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:V(pu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Jo,Pii:oj}=ke,{Persisted:Cv}=Le,{Internal:lj,External:cj}=je,mj=vt(We.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Jo,readOnly:true}),name:z.string().min(1).max(120).meta(Jo),mode:z.enum(["light","dark","system"]).default("system").meta(Jo),tokens:z.record(z.string(),z.string()).default({}).meta(Jo)}).meta({id:"Theme","x-revturbine-schema-persistence":Cv,"x-revturbine-schema-exposure":cj,...mj});var _g=$.merge(ee).extend({user_id:z.string().min(1).meta(oj),scope:z.string().min(1).meta(Jo),preferences:z.record(z.string(),z.unknown()).default({}).meta(Jo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Cv,"x-revturbine-schema-exposure":lj});({"/api/ui-preferences":{get:f({operationId:"listUiPreferences",requestParams:{query:K},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:V(_g)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:f({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Yn(_g))}}},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:Pt,Financial:vi}=ke,{Persisted:Ev,Transient:Uc}=Le,{External:Mc,Internal:Rv}=je,kv=z.object({month:z.string().meta(Pt),cohort_size:z.number().int().min(0).meta(Pt),retained:z.number().int().min(0).meta(Pt),retention_rate:z.number().min(0).max(1).meta(Pt),revenue_cents:z.number().int().min(0).meta(vi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),Av=z.object({step:z.string().meta(Pt),label:z.string().meta(Pt),count:z.number().int().min(0).meta(Pt),conversion_rate:z.number().min(0).max(1).meta(Pt),drop_off_rate:z.number().min(0).max(1).meta(Pt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),wv=z.object({placement_id:z.string().meta(Pt),placement_name:z.string().meta(Pt),impressions:z.number().int().min(0).meta(Pt),clicks:z.number().int().min(0).meta(Pt),conversions:z.number().int().min(0).meta(Pt),ctr:z.number().min(0).meta(Pt),conversion_rate:z.number().min(0).meta(Pt),revenue_cents:z.number().int().min(0).meta(vi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),jv=z.object({date:z.string().meta(Pt),mrr_cents:z.number().int().min(0).meta(vi),arr_cents:z.number().int().min(0).meta(vi),new_mrr_cents:z.number().int().min(0).meta(vi),churned_mrr_cents:z.number().int().min(0).meta(vi),expansion_mrr_cents:z.number().int().min(0).meta(vi),net_new_mrr_cents:z.number().int().meta(vi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),Ov=z.object({metric_key:z.string().min(1).meta(Pt),label:z.string().meta(Pt),current_value:z.number().meta(vi),previous_value:z.number().nullable().default(null).meta(vi),change_percent:z.number().nullable().default(null).meta(Pt),period:z.string().meta(Pt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Pt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),yg=$.merge(ee).merge(le).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Pt),severity:zo.meta(Pt),resource_type:z.string().min(1).meta(Pt),resource_id:z.string().min(1).meta(Pt),summary:z.string().max(1e3).meta(Pt),expected_value:z.unknown().optional().meta(Pt),actual_value:z.unknown().optional().meta(Pt),affected_customer_count:z.number().int().min(0).default(0).meta(Pt),is_resolved:z.boolean().default(false).meta(Pt),resolved_at:zt.meta(Pt),metadata:At.meta(Pt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Ev,"x-revturbine-schema-exposure":Rv}),vg=$.merge(ee).merge(le).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Pt),severity:zo.meta(Pt),title:z.string().min(1).max(300).meta(Pt),description:z.string().max(2e3).meta(Pt),resource_type:z.string().optional().meta(Pt),resource_id:z.string().optional().meta(Pt),is_acknowledged:z.boolean().default(false).meta(Pt),acknowledged_at:zt.meta(Pt),acknowledged_by:z.string().nullable().default(null).meta(Pt),metadata:At.meta(Pt)}).meta({id:"Alert","x-revturbine-schema-persistence":Ev,"x-revturbine-schema-exposure":Rv});({"/api/analytics/kpis":{get:f({operationId:"listKpiAggregates",requestParams:{query:K},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:V(Ov)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:f({operationId:"listPlacementPerformance",requestParams:{query:K},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:V(wv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:f({operationId:"listRevenueMetrics",requestParams:{query:K},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:V(jv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:f({operationId:"listCohortMetrics",requestParams:{query:K},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:V(kv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:f({operationId:"listFunnelSteps",requestParams:{query:K},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:V(Av)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:f({operationId:"listDriftReports",requestParams:{query:K},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:V(yg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:f({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:yg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:f({operationId:"listAlerts",requestParams:{query:K},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:V(vg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:f({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:vg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:b}=ke,{Transient:gj}=Le,{Internal:hj}=je,Ge=t=>({id:t,"x-revturbine-schema-persistence":gj,"x-revturbine-schema-exposure":hj}),qv=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,fu=/^[a-z][a-z0-9_-]{0,99}$/,Jt=z.string().regex(qv).max(120),Ta=z.string().regex(fu),_u=Jt.meta(Ge("AnalyticsSemanticId")),Ms=z.enum(["account","user","billing_unit","organization"]).meta(Ge("AnalyticsAnalyticalUnit")),Xo=z.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(Ge("AnalyticsQueryFamily")),el=z.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(Ge("AnalyticsSourceScope")),Sg=z.enum(["as_of_event","current"]).meta(Ge("AnalyticsHistoricalMode")),Dv=z.enum(["hour","day","week","month","quarter"]).meta(Ge("AnalyticsTimeGrain")),yu=z.enum(["none","previous_period","previous_year"]).meta(Ge("AnalyticsCompareMode")),Fc=z.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(Ge("AnalyticsFilterOperator")),vu=z.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(Ge("AnalyticsFilterControl")),Uv=z.enum(["low","medium","high"]).meta(Ge("AnalyticsCardinalityClass")),Lc=z.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(Ge("AnalyticsFieldType")),Mv=z.enum(["string","number","boolean","date","datetime","id","enum"]).meta(Ge("AnalyticsDimensionType")),bu=z.enum(["filter","group","split","sort"]).meta(Ge("AnalyticsDimensionCapability")),Fv=z.enum(["private","team","tenant"]).meta(Ge("AnalyticsViewVisibility")),bg=z.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(Ge("AnalyticsCustomizationCapability")),Lv=z.enum(["unrestricted","pii","financial","operational"]).meta(Ge("AnalyticsClassification")),oa=z.strictObject({value:z.string().min(1).max(300).meta(b),key:z.string().max(120).optional().meta(b)}).meta(Ge("LocalizedText")),xg=z.union([z.string().max(200),z.number(),z.boolean(),z.null()]),tl=z.union([xg,z.array(xg).max(100),z.strictObject({preset:z.string().regex(/^[a-z0-9_]{1,20}$/).meta(b),compare:yu.optional().meta(b)}),z.strictObject({min:z.number().optional().meta(b),max:z.number().optional().meta(b)})]).meta(Ge("AnalyticsFilterValue")),xu=z.strictObject({dimension:Jt.meta(b),operator:Fc.meta(b),value:tl.optional().meta(b)}).meta(Ge("AnalyticsSemanticFilter")),Us=z.strictObject({type:z.enum(["number","currency","percent","duration"]).meta(b),decimals:z.number().int().min(0).max(6).optional().meta(b),compact:z.boolean().optional().meta(b)}).meta(Ge("AnalyticsFormatSpec")),Nv=z.strictObject({legend:z.enum(["none","top","right","bottom","left"]).optional().meta(b),value_labels:z.boolean().optional().meta(b),reference_lines:z.array(z.strictObject({value:z.number().meta(b),label:oa.optional().meta(b)})).max(5).optional().meta(b),x_axis_format:Us.optional().meta(b),y_axis_format:Us.optional().meta(b),empty_state:z.enum(["blank","message"]).optional().meta(b)}).meta(Ge("AnalyticsSafeChartOptions")),Su=z.object({deprecated:z.boolean().meta(b),replaced_by:Jt.optional().meta(b)}).meta(Ge("AnalyticsCatalogDeprecation")),Pg=Su,Tg=z.object({id:Jt.meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),type:Mv.meta(b),operators:z.array(Fc).min(1).meta(b),control:vu.meta(b),capabilities:z.array(bu).min(1).meta(b),cardinality:Uv.meta(b),classification:Lv.default("unrestricted").meta(b),historical_mode:Sg.optional().meta(b),allowed_concepts:z.array(Jt).optional().meta(b),exclude_from_segment_picker:z.boolean().default(false).meta(b),deprecation:Su.optional().meta(b)}).meta(Ge("AnalyticsCatalogDimension")),Ig=z.object({id:Jt.meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),value_type:Lc.meta(b),format:Us.optional().meta(b),source_scope:el.optional().meta(b),deprecation:Su.optional().meta(b)}).meta(Ge("AnalyticsCatalogMetric")),Cg=z.object({id:Jt.meta(b),version:z.number().int().min(1).meta(b),label:z.string().min(1).max(120).meta(b),description:z.string().max(500).optional().meta(b),when_to_use:z.string().max(500).optional().meta(b),do_not_use_for:z.string().max(500).optional().meta(b),grain:z.array(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(b),analytical_units:z.array(Ms).min(1).meta(b),primary_time_dimension:Jt.meta(b),historical_mode:Sg.meta(b),dimensions:z.array(Jt).min(1).meta(b),metrics:z.array(Jt).min(1).meta(b),query_families:z.array(Xo).min(1).meta(b),source_scope:el.meta(b),coverage_metric:Jt.optional().meta(b),deprecation:Su.optional().meta(b)}).meta(Ge("AnalyticsCatalogConcept")),Vv=z.strictObject({field:Jt.meta(b),direction:z.enum(["asc","desc"]).meta(b)}),Bv=z.strictObject({dimension:Jt.meta(b),grain:Dv.meta(b)}),zv=z.strictObject({concept:Jt.meta(b),family:Xo.meta(b),metrics:z.array(Jt).min(1).max(10).meta(b),group_by:z.array(Jt).max(3).optional().meta(b),time:Bv.optional().meta(b),filters_from:z.array(Ta).max(20).optional().meta(b),fixed_filters:z.array(xu).max(20).optional().meta(b),compare:yu.optional().meta(b),order_by:z.array(Vv).max(3).optional().meta(b),limit:z.number().int().min(1).max(1e3).optional().meta(b)}).meta(Ge("AnalyticsViewQuery")),Kv=z.strictObject({type:z.literal("metric").meta(b),value:Jt.meta(b),comparison:Jt.optional().meta(b),format:Us.optional().meta(b)}).meta(Ge("AnalyticsRenderMetric")),$v=z.strictObject({type:z.literal("cartesian").meta(b),mark:z.enum(["line","area","bar","stacked_bar","scatter"]).meta(b),encoding:z.strictObject({x:Jt.meta(b),y:z.union([Jt,z.array(Jt).min(1).max(5)]).meta(b),color:Jt.optional().meta(b),facet:Jt.optional().meta(b)}).meta(b),options:Nv.optional().meta(b)}).meta(Ge("AnalyticsRenderCartesian")),Hv=z.strictObject({type:z.literal("funnel").meta(b),stages:z.array(Jt).min(2).max(10).meta(b),split_by:Jt.optional().meta(b)}).meta(Ge("AnalyticsRenderFunnel")),Gv=z.strictObject({type:z.literal("table").meta(b),columns:z.array(Jt).min(1).max(20).meta(b)}).meta(Ge("AnalyticsRenderTable")),Yv=z.strictObject({type:z.literal("timeline").meta(b),timestamp:Jt.meta(b),event_type:Jt.meta(b)}).meta(Ge("AnalyticsRenderTimeline")),Wv=z.strictObject({type:z.literal("recommendations").meta(b),presentation:z.enum(["list","ranked_cards"]).meta(b)}).meta(Ge("AnalyticsRenderRecommendations")),Eg=z.discriminatedUnion("type",[Kv,$v,Hv,Gv,Yv,Wv]).meta(Ge("AnalyticsRenderSpec")),Zv=z.strictObject({id:Ta.meta(b),dimension:Jt.meta(b),control:vu.meta(b),label:oa.optional().meta(b),operators:z.array(Fc).min(1).meta(b),default_value:tl.optional().meta(b),required:z.boolean().default(false).meta(b),pinned:z.boolean().default(false).meta(b),applies_to:z.union([z.literal("all"),z.array(Ta).min(1).max(24)]).default("all").meta(b)}).meta(Ge("AnalyticsViewFilter")),Rg=z.strictObject({type:z.literal("grid").meta(b),columns:z.number().int().min(1).max(24).default(12).meta(b),items:z.array(z.strictObject({block_id:Ta.meta(b),x:z.number().int().min(0).meta(b),y:z.number().int().min(0).meta(b),w:z.number().int().min(1).max(24).meta(b),h:z.number().int().min(1).max(24).meta(b)})).max(24).meta(b)}).meta(Ge("AnalyticsViewLayout")),Qv=z.strictObject({id:Ta.meta(b),title:oa.optional().meta(b),description:oa.optional().meta(b),query:zv.meta(b),render:Eg.meta(b)}).meta(Ge("AnalyticsViewBlock")),Jv=z.strictObject({id:Ta.meta(b),label:oa.meta(b),target:Jt.meta(b),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).default({}).meta(b)}).meta(Ge("AnalyticsViewHandoff")),Xv=z.strictObject({allow:z.array(bg).default([]).meta(b),deny:z.array(bg).default([]).meta(b)}).meta(Ge("AnalyticsCustomizationPolicy"));var eb=z.string().regex(/^\d+\.\d+$/),Pu=z.strictObject({kind:z.literal("revturbine.analytics-view").meta(b),schema_version:eb.meta(b),id:Ta.meta(b),revision:z.number().int().min(1).meta(b),title:oa.meta(b),description:oa.optional().meta(b),analytical_unit:Ms.meta(b),base_template:z.strictObject({id:Ta.meta(b),version:z.number().int().min(1).meta(b)}).optional().meta(b),catalog_version:z.string().min(1).max(64).meta(b),filters:z.array(Zv).max(20).meta(b),layout:Rg.meta(b),blocks:z.array(Qv).min(1).max(24).meta(b),handoffs:z.array(Jv).max(10).optional().meta(b),customization_policy:Xv.meta(b)}).meta(Ge("AnalyticsView")),tb=z.strictObject({id:Ta.optional().meta(b),dimension:Jt.meta(b),control:vu.optional().meta(b),label:oa.optional().meta(b),operators:z.array(Fc).min(1).optional().meta(b),default_value:tl.optional().meta(b),required:z.boolean().optional().meta(b),pinned:z.boolean().optional().meta(b),applies_to:z.union([z.literal("all"),z.array(Ta).min(1).max(24)]).optional().meta(b)}).meta(Ge("AnalyticsViewFilterDraft")),nb=z.strictObject({id:Ta.optional().meta(b),title:oa.optional().meta(b),concept:Jt.meta(b),family:Xo.meta(b),metrics:z.array(Jt).min(1).max(10).meta(b),group_by:z.array(Jt).max(3).optional().meta(b),time:Bv.optional().meta(b),filters_from:z.array(Ta).max(20).optional().meta(b),fixed_filters:z.array(xu).max(20).optional().meta(b),compare:yu.optional().meta(b),order_by:z.array(Vv).max(3).optional().meta(b),limit:z.number().int().min(1).max(1e3).optional().meta(b),render:z.union([z.literal("auto"),Eg]).optional().meta(b)}).meta(Ge("AnalyticsViewBlockDraft")),rb=z.strictObject({id:Ta.optional().meta(b),label:oa.optional().meta(b),target:Jt.meta(b),bindings:z.record(z.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z.string().min(1).max(200)).optional().meta(b)}).meta(Ge("AnalyticsViewHandoffDraft"));z.strictObject({kind:z.literal("revturbine.analytics-view-draft").meta(b),schema_version:eb.meta(b),title:oa.meta(b),analytical_unit:Ms.optional().meta(b),filters:z.union([z.literal("recommended"),z.array(tb).max(20)]).optional().meta(b),layout:z.union([z.literal("auto"),Rg]).optional().meta(b),blocks:z.array(nb).min(1).max(24).meta(b),handoffs:z.union([z.literal("recommended"),z.array(rb).max(10)]).optional().meta(b),visibility:Fv.optional().meta(b)}).meta(Ge("AnalyticsViewDraft"));var kg=z.string().regex(/^(\/[^/]*)*$/).max(300),ab=z.strictObject({op:z.enum(["add","replace","remove"]).meta(b),path:kg.meta(b),value:z.unknown().optional().meta(b)}).meta(Ge("AnalyticsSuggestedPatchOp")),Ag=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),message:z.string().min(1).max(500).meta(b)}).meta(Ge("AnalyticsWarning")),ib=z.object({code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),path:kg.meta(b),message:z.string().min(1).max(500).meta(b),actual:z.unknown().optional().meta(b),allowed:z.array(xg).max(50).optional().meta(b),suggested_patch:z.array(ab).max(10).optional().meta(b)}).meta(Ge("AnalyticsValidationIssue"));z.object({path:kg.meta(b),rule:z.string().min(1).max(120).meta(b),value:z.unknown().optional().meta(b)}).meta(Ge("AnalyticsCompileResolution"));z.object({valid:z.boolean().meta(b),errors:z.array(ib).default([]).meta(b),warnings:z.array(Ag).default([]).meta(b),catalog_version:z.string().min(1).max(64).meta(b)}).meta(Ge("AnalyticsValidationResult"));var sb=z.object({id:Jt.meta(b),type:Lc.meta(b),nullable:z.boolean().meta(b)}).meta(Ge("AnalyticsResultField")),ob=z.object({numerator:z.number().int().min(0).meta(b),denominator:z.number().int().min(0).meta(b),rate:z.number().min(0).max(1).meta(b)}).meta(Ge("AnalyticsCoverage")),lb=z.object({query_hash:z.string().min(1).max(128).meta(b),concept:Jt.meta(b),analytical_unit:Ms.meta(b),source_scope:el.meta(b),coverage:ob.optional().meta(b),as_of:z.string().datetime().meta(b),freshness_seconds:z.number().int().min(0).meta(b),applied_filters:z.array(xu).default([]).meta(b),next_cursor:z.string().max(500).optional().meta(b),warnings:z.array(Ag).default([]).meta(b)}).meta(Ge("AnalyticsResultMeta")),wg=z.object({data:z.array(z.record(z.string(),z.unknown())).meta(b),fields:z.array(sb).meta(b),meta:lb.meta(b)}).meta(Ge("AnalyticsResult"));var {Unrestricted:Wn}=ke,{Transient:vj}=Le,{Internal:bj}=je,Nc=t=>({id:t,"x-revturbine-schema-persistence":vj,"x-revturbine-schema-exposure":bj}),cb=z.enum(["fixture","generated"]).meta(Nc("AnalyticsCatalogSource"));z.object({catalog_version:z.string().min(1).max(64).meta(Wn),source:cb.meta(Wn),generated_at:z.string().datetime().optional().meta(Wn),concepts:z.array(Cg).min(1).meta(Wn),dimensions:z.array(Tg).min(1).meta(Wn),metrics:z.array(Ig).min(1).meta(Wn)}).meta(Nc("AnalyticsCatalog"));var mb=z.enum(["concept","dimension","metric","query_family"]).meta(Nc("AnalyticsAgentCatalogEntryKind")),ub=z.object({id:_u.meta(Wn),kind:mb.meta(Wn),label:z.string().min(1).max(120).meta(Wn),description:z.string().min(1).max(500).meta(Wn),when_to_use:z.string().max(500).optional().meta(Wn),do_not_use_for:z.string().max(500).optional().meta(Wn),value_type:Lc.optional().meta(Wn),format:Us.optional().meta(Wn),capabilities:z.array(bu).optional().meta(Wn),compatible_concepts:z.array(_u).optional().meta(Wn),compatible_families:z.array(Xo).optional().meta(Wn),analytical_units:z.array(Ms).optional().meta(Wn),source_scope:el.optional().meta(Wn),example:z.string().max(2e3).optional().meta(Wn),deprecation:Pg.optional().meta(Wn)}).meta(Nc("AnalyticsAgentCatalogEntry"));z.object({catalog_version:z.string().min(1).max(64).meta(Wn),query:z.string().min(1).max(200).meta(Wn),entries:z.array(ub).max(50).meta(Wn)}).meta(Nc("AnalyticsCatalogSearchResult"));var {Unrestricted:ur}=ke,{Transient:Ij}=Le,{Internal:Cj}=je,nl=t=>({id:t,"x-revturbine-schema-persistence":Ij,"x-revturbine-schema-exposure":Cj}),Fs=z.string().regex(fu),pb=z.strictObject({filter_id:Fs.meta(ur),value:tl.nullable().meta(ur)}).meta(nl("AnalyticsFilterState"));z.strictObject({view_id:Fs.meta(ur),revision:z.number().int().min(1).optional().meta(ur),block_ids:z.array(Fs).min(1).max(24).optional().meta(ur),filter_state:z.array(pb).max(20).optional().meta(ur)}).meta(nl("AnalyticsQueryRequest"));var hb=z.object({block_id:Fs.meta(ur),code:z.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(ur),message:z.string().min(1).max(500).meta(ur)}).meta(nl("AnalyticsBlockError")),fb=z.object({block_id:Fs.meta(ur),result:wg.meta(ur)}).meta(nl("AnalyticsBlockResult"));z.object({view_id:Fs.meta(ur),revision:z.number().int().min(1).meta(ur),catalog_version:z.string().min(1).max(64).meta(ur),results:z.array(fb).meta(ur),errors:z.array(hb).default([]).meta(ur)}).meta(nl("AnalyticsQueryResponse"));var yb=z.object({id:Fs.meta(ur),version:z.number().int().min(1).meta(ur),title:oa.meta(ur),description:oa.optional().meta(ur),block_count:z.number().int().min(1).meta(ur)}).meta(nl("AnalyticsTemplateSummary"));z.object({q:z.string().min(1).max(200),limit:z.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:f({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:V(yb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:f({operationId:"getAnalyticsView",requestParams:{path:z.object({viewId:z.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:bi}=ke,{Transient:Vc}=Le,{External:Bc}=je,Og=z.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Bc}),bb=z.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Bc}),xb=z.object({name:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(bi),surface:Og.meta(bi),purpose:z.string().min(1).max(300).meta(bi),stability:bb.meta(bi)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Bc}),Sb=z.object({prefix:z.string().regex(/^[a-z][a-z0-9_]*_$/).meta(bi),surface:Og.meta(bi),purpose:z.string().min(1).max(300).meta(bi)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Bc});z.object({version:z.number().int().min(1).meta(bi),events:z.array(xb).min(1).meta(bi),prefix_families:z.array(Sb).meta(bi)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":Vc,"x-revturbine-schema-exposure":Bc});var Cu=["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"],Pb=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],Tb=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],Ib=["area_viewed","feature_gated"],vb={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function Iu(t,e){return t.map(n=>({name:n,surface:e,purpose:vb[n].purpose,stability:vb[n].stability}))}var qg={events:[...Iu(Cu,"control_plane"),...Iu(Ib,"control_plane"),...Iu(Pb,"sdk_client"),...Iu(Tb,"sdk_client")]};qg.events.map(t=>t.name);qg.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:U,Pii:rl}=ke,{Persisted:Eb,Transient:Vn}=Le,{Internal:cs,External:Ir}=je,Ug=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),Rb=$.extend({event_type:z.string().min(1).meta(U),source:Ug.default("sdk").meta(U),tenant_id:z.string().min(1).optional().meta(U),user_id:z.string().min(1).optional().meta(rl),session_id:z.string().min(1).optional().meta(rl),occurred_at:z.string().datetime().meta(U),request_id:z.string().min(1).meta(U),attributes:z.record(z.string(),z.unknown()).default({}).meta(U),payload:z.record(z.string(),z.unknown()).default({}).meta(U)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs}),kb=Rb.extend({ingested_at:z.string().datetime().meta(U)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":Eb,"x-revturbine-schema-exposure":cs});z.array(z.object({id:z.string().min(1).optional().meta(U),event_type:z.string().min(1).meta(U),occurred_at:z.string().datetime().optional().meta(U),tenant_id:z.string().min(1).optional().meta(U),user_id:z.string().min(1).optional().meta(rl),session_id:z.string().min(1).optional().meta(rl),attributes:z.record(z.string(),z.unknown()).optional().meta(U),payload:z.record(z.string(),z.unknown()).optional().meta(U),message:z.string().optional().meta(U),level:z.string().optional().meta(U),path:z.string().optional().meta(U)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs});var Ab=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({user_id:z.string().min(1).meta(rl),placement_id:z.string().min(1).meta(U),treatment_id:z.string().min(1).optional().meta(U),surface_slot_id:z.string().min(1).optional().meta(U),surface_template_id:z.string().min(1).optional().meta(U),payload_id:z.string().min(1).optional().meta(U),interaction_type:Ab.meta(U),interaction_at:z.string().datetime().optional().meta(U),message_block_handle:z.string().min(1).optional().meta(U),message_block_id:z.string().min(1).optional().meta(U),experiment_id:z.string().min(1).optional().meta(U),variant_key:z.string().min(1).optional().meta(U),test:z.boolean().optional().meta(U),metadata:z.record(z.string(),z.unknown()).optional().meta(U)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({days_remaining:z.number().int().min(0).optional().meta(U)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({entitlement_handle:z.string().optional().meta(U),current_usage:z.number().min(0).optional().meta(U),usage_limit:z.number().min(0).optional().meta(U),usage_percent:z.number().min(0).max(100).optional().meta(U),threshold:z.number().min(0).optional().meta(U),balance:z.number().min(0).optional().meta(U),allocation:z.number().min(0).optional().meta(U),seats_used:z.number().int().min(0).optional().meta(U),seats_allowed:z.number().int().min(0).optional().meta(U)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({feature:z.string().min(1).meta(U)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({retry_count:z.number().int().min(0).optional().meta(U),renewal_date:z.string().optional().meta(U)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({event_type:z.string().min(1).meta(U),payload:z.record(z.string(),z.unknown()).default({}).meta(U)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});var jb=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),Ob=z.enum(Cu).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({event_type:Ob.meta(U),source:jb.meta(U),payload:z.record(z.string(),z.unknown()).default({}).meta(U)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({q:z.string().optional().meta(U),source:Ug.optional().meta(U),event_type:z.string().optional().meta(U),from:z.string().datetime().optional().meta(U),to:z.string().datetime().optional().meta(U),page:z.coerce.number().int().min(1).default(1).meta(U),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(U)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs});var qb=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs}),Db=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs}),Eu=$.merge(ee).merge(le).extend({event_id:z.string().min(1).meta(U),event_type:z.string().min(1).meta(U),source:qb.meta(U),payload:z.record(z.string(),z.unknown()).default({}).meta(U),status:Db.default("processed").meta(U),processed_at:z.string().datetime().optional().meta(U),error_message:z.string().optional().meta(U)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":Eb,"x-revturbine-schema-exposure":cs});z.object({accepted:z.number().int().min(0).meta(U)}).meta({id:"null","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":cs});var Vj=500,Bj=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),Ub=z.object({environment_id:z.string().min(1).meta(U),user_id:z.string().min(1).meta(rl),account_id:z.string().min(1).meta(U),event_name:z.string().min(1).max(120).meta(U),event_ts:z.string().datetime().meta(U),properties:z.string().optional().meta(U),surface_slot_id:z.string().nullable().optional().meta(U),placement_id:z.string().nullable().optional().meta(U),payload_id:z.string().nullable().optional().meta(U),request_id:z.string().optional().meta(U),experiment_id:z.string().nullable().optional().meta(U),variant_key:z.string().nullable().optional().meta(U),tenant_id:z.string().optional().meta(U),event_id:z.string().nullable().optional().meta(U),origin:Bj.nullable().optional().meta(U),playbook_version:z.string().nullable().optional().meta(U),decision_id:z.string().nullable().optional().meta(U),test:z.boolean().optional().meta(U)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({events:z.array(Ub).min(1).max(Vj).meta(U)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});var zj=10,Fb=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),Lb=z.object({plans:z.number().int().min(0).meta(U),entitlements:z.number().int().min(0).meta(U),entitlement_rules:z.number().int().min(0).meta(U),segments:z.number().int().min(0).meta(U),placements:z.number().int().min(0).meta(U),placement_payloads:z.number().int().min(0).meta(U),content_ui_paths:z.number().int().min(0).meta(U),surface_templates:z.number().int().min(0).meta(U)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir}),Nb=z.object({event_type:Fb.meta(U),occurred_at:z.string().datetime().meta(U),request_id:z.string().min(1).optional().meta(U),config_hash_id:z.string().min(1).max(64).optional().meta(U),sdk_version:z.string().min(1).max(64).optional().meta(U),runtime_mode:z.string().min(1).max(64).optional().meta(U),schema_version:z.string().min(1).max(64).optional().meta(U),bundle_version:z.string().min(1).max(64).optional().meta(U),config_shape:Lb.optional().meta(U),message:z.string().max(500).optional().meta(U),reason:z.string().min(1).max(64).optional().meta(U),placement_handle:z.string().min(1).max(64).optional().meta(U),slot_handle:z.string().min(1).max(64).optional().meta(U),surface:z.string().min(1).max(64).optional().meta(U),plan_handle:z.string().min(1).max(64).optional().meta(U),entitlement_handle:z.string().min(1).max(64).optional().meta(U)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});z.object({events:z.array(Nb).min(1).max(zj).meta(U)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Ir});({"/api/events/search":{get:f({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Jp(kb)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:f({operationId:"listWebhookEvents",requestParams:{query:K},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:V(Eu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:nt}=ke,{Persisted:Kc,Transient:$c}=Le,{Internal:xi}=je,Bb=vt(We.Playbook,{sdkInput:true}),zb=vt(We.Playbook,{inConfig:false,sdkInput:true}),Kb=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":xi}),Mg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":xi}),Fg=z.object({name:Bt.meta(nt),handle:ht.meta(nt),plan_id:z.string().nullable().optional().meta(nt),segment_id:z.string().nullable().optional().meta(nt),trial_limit_type:Mg.default("time").meta(nt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(nt),grace_period_days:z.number().int().min(0).default(0).meta(nt),usage_entitlement_handle:z.string().min(1).optional().meta(nt),usage_limit_value:z.number().int().min(1).optional().meta(nt),require_payment_method:z.boolean().default(false).meta(nt),auto_convert:z.boolean().default(true).meta(nt),convert_to_plan_id:z.string().optional().meta(nt),fallback_plan_id:z.string().optional().meta(nt),limit_per_customer:z.number().int().min(1).default(1).meta(nt),is_active:z.boolean().default(true).meta(nt),metadata:At.meta(nt)}),Ls=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...nt,readOnly:true})}).merge(Fg).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":xi,...Bb,...wn()}),$j=fn("FreeTrialRuleAnchor"),$b=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":xi}),Lg=z.object({name:Bt.meta(nt),handle:ht.meta(nt),premium_plan_id:z.string().min(1).meta(nt),fallback_plan_id:z.string().min(1).meta(nt),segment_id:z.string().nullable().optional().meta(nt),trial_limit_type:Mg.default("time").meta(nt),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(nt),usage_entitlement_handle:z.string().min(1).optional().meta(nt),usage_limit_value:z.number().int().min(1).optional().meta(nt),start_policy:$b.default("signup").meta(nt),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(nt),entitlements_during_trial:z.array(z.string()).default([]).meta(nt),is_active:z.boolean().default(true).meta(nt),metadata:At.meta(nt)}),Ns=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...nt,readOnly:true})}).merge(Lg).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":xi,...Bb,...wn()}),Hj=fn("ReverseTrialRuleAnchor"),Ng=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":xi}),Vg=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":$c,"x-revturbine-schema-exposure":xi}),Vs=$.merge(ee).merge(le).extend({trial_limit_policy:Ng.default("1_per_lifetime").meta(nt),eligibility_scope:Vg.default("per_customer").meta(nt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":xi,...zb}),Bs=$.merge(ee).merge(le).extend({trial_limit_policy:Ng.default("1_per_lifetime").meta(nt),eligibility_scope:Vg.default("per_customer").meta(nt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":xi,...zb}),zc=$.merge(ee).merge(le).extend({customer_id:z.string().min(1).meta(nt),rule_id:z.string().min(1).meta(nt),rule_type:z.enum(["free_trial","reverse_trial"]).meta(nt),plan_id:z.string().min(1).meta(nt),status:Kb.default("active").meta(nt),started_at:z.string().datetime().meta({...nt,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(nt),trial_limit_type:Mg.default("time").meta(nt),usage_entitlement_handle:z.string().min(1).optional().meta(nt),usage_limit_value:z.number().int().min(1).optional().meta(nt),converted_at:zt.meta(nt),cancelled_at:zt.meta(nt),metadata:At.meta(nt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":xi});({"/api/free-trial-rule-anchors":{get:f({operationId:"listFreeTrialRuleAnchors",requestParams:{query:K},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:V($j)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:f({operationId:"listFreeTrialRules",requestParams:{query:K},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:V(Ls)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:f({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ls.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:f({operationId:"listReverseTrialRuleAnchors",requestParams:{query:K},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:V(Hj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:f({operationId:"listReverseTrialRules",requestParams:{query:K},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:V(Ns)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:f({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ns.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:f({operationId:"listFreeTrialSettings",requestParams:{query:K},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:V(Vs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:f({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:f({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Vs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:f({operationId:"listReverseTrialSettings",requestParams:{query:K},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:V(Bs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:f({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:f({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Bs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:f({operationId:"listTrialInstances",requestParams:{query:K},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:V(zc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:f({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:zc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:f({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:zc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:f({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:zc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:En}=ke,{Persisted:zg,Transient:Hb}=Le,{Internal:Hc}=je,Gb=vt(We.Playbook,{inConfig:false,sdkInput:true}),Yb=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Hb,"x-revturbine-schema-exposure":Hc}),Wb=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Hb,"x-revturbine-schema-exposure":Hc}),Zb=z.object({variant_id:z.string().min(1),name:Bt,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":zg,"x-revturbine-schema-exposure":Hc,...Gb}),Si=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...En,readOnly:true}),name:Bt.meta(En),handle:ht.meta(En),description:z.string().max(1e3).optional().meta(En),experiment_type:Wb.meta(En),status:Yb.default("draft").meta(En),target_resource_id:z.string().optional().meta(En),target_segment_ids:z.array(z.string()).default([]).meta(En),variants:z.array(Zb).min(2).meta(En),primary_metric:z.string().min(1).meta(En),metric_threshold:z.number().default(.05).meta(En),secondary_metrics:z.array(z.string()).default([]).meta(En),traffic_allocation:z.number().min(0).max(1).default(1).meta(En),started_at:zt.meta(En),ended_at:zt.meta(En),confidence_threshold:z.number().min(0).max(1).default(.95).meta(En),winning_variant_id:z.string().nullable().default(null).meta(En),metadata:At.meta(En)}).meta({id:"Experiment","x-revturbine-schema-persistence":zg,"x-revturbine-schema-exposure":Hc,...Gb,...wn()}),Yj=fn("ExperimentAnchor"),Qb=zo,Bg=$.merge(ee).merge(le).extend({experiment_id:z.string().optional().meta(En),resource_type:z.string().min(1).meta(En),resource_id:z.string().min(1).meta(En),severity:Qb.default("info").meta(En),title:z.string().min(1).max(300).meta(En),description:z.string().max(2e3).meta(En),suggested_action:z.string().max(1e3).optional().meta(En),estimated_impact:z.number().optional().meta(En),is_dismissed:z.boolean().default(false).meta(En),metadata:At.meta(En)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":zg,"x-revturbine-schema-exposure":Hc});({"/api/experiment-anchors":{get:f({operationId:"listExperimentAnchors",requestParams:{query:K},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:V(Yj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:f({operationId:"listExperiments",requestParams:{query:K},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:V(Si)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:f({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Si}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:f({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Si.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Si}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:f({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:f({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Si}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:f({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Si}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:f({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Si}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:f({operationId:"listOptimizationSuggestions",requestParams:{query:K},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:V(Bg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:f({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Bg}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:kr,Financial:Jb}=ke,{Persisted:Zj,Transient:Xb}=Le,{Internal:Kg}=je,Qj=vt(We.Playbook,{sdkInput:true}),ex=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Xb,"x-revturbine-schema-exposure":Kg}),tx=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Xb,"x-revturbine-schema-exposure":Kg}),Fi=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...kr,readOnly:true}),name:Bt.meta(kr),handle:ht.meta(kr),description:z.string().max(1e3).optional().meta(kr),rt_status:ex.default("draft").meta(kr),discount_type:tx.meta(kr),discount_value:z.number().min(0).meta(Jb),currency:z.string().length(3).default("USD").meta(Jb),applicable_plan_ids:z.array(z.string()).default([]).meta(kr),applicable_addon_ids:z.array(z.string()).default([]).meta(kr),target_segment_ids:z.array(z.string()).default([]).meta(kr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(kr),current_redemptions:z.number().int().min(0).default(0).meta({...kr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(kr),starts_at:zt.meta(kr),ends_at:zt.meta(kr),stripe_coupon_id:z.string().nullable().default(null).meta(kr),stripe_promotion_code_id:z.string().nullable().default(null).meta(kr),auto_sync_stripe:z.boolean().default(false).meta(kr),metadata:At.meta(kr)}).meta({id:"Promotion","x-revturbine-schema-persistence":Zj,"x-revturbine-schema-exposure":Kg,...Qj,...wn()}),Jj=fn("PromotionAnchor");({"/api/promotion-anchors":{get:f({operationId:"listPromotionAnchors",requestParams:{query:K},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:V(Jj)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:f({operationId:"listPromotions",requestParams:{query:K},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:V(Fi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:f({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:f({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Fi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:f({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:f({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:f({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Fi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Un,Pii:$g}=ke,{Persisted:Hg}=Le,{Internal:Gg}=je,nx=$.merge(ee).merge(le).extend({customer_id:z.string().min(1).meta($g),placement_id:z.string().min(1).meta(Un),payload_id:z.string().nullable().default(null).meta(Un),variant_id:z.string().nullable().default(null).meta(Un),surface_type:z.string().meta(Un),presented_at:z.string().datetime().meta({...Un,readOnly:true}),dismissed_at:zt.meta(Un),cta_clicked_at:zt.meta(Un),cta_action_type:z.string().nullable().default(null).meta(Un),converted:z.boolean().default(false).meta(Un),session_id:z.string().optional().meta(Un),metadata:At.meta(Un)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":Hg,"x-revturbine-schema-exposure":Gg}),rx=$.merge(ee).merge(le).extend({customer_id:z.string().min(1).meta($g),placement_id:z.string().min(1).meta(Un),decision:z.enum(["show","suppress","defer"]).meta(Un),reason:z.string().max(500).meta(Un),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Un),experiment_id:z.string().nullable().default(null).meta(Un),variant_id:z.string().nullable().default(null).meta(Un),latency_ms:z.number().min(0).optional().meta(Un)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":Hg,"x-revturbine-schema-exposure":Gg}),ax=$.merge(ee).merge(le).extend({customer_id:z.string().min(1).meta($g),entitlement_handle:z.string().min(1).meta(Un),entitlement_type:z.string().meta(Un),result:z.enum(["granted","denied","limited","metered"]).meta(Un),current_usage:z.number().nullable().default(null).meta(Un),limit:z.number().nullable().default(null).meta(Un),source:z.enum(["plan","addon","override","trial"]).meta(Un),source_id:z.string().min(1).meta(Un),latency_ms:z.number().min(0).optional().meta(Un)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":Hg,"x-revturbine-schema-exposure":Gg});({"/api/presentation-records":{get:f({operationId:"listPresentationRecords",requestParams:{query:K},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:V(nx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:f({operationId:"listDecisionLogs",requestParams:{query:K},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:V(rx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:f({operationId:"listEntitlementEvalLogs",requestParams:{query:K},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:V(ax)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:g}=ke,{Persisted:ml,Transient:st}=Le,{Internal:La,External:jt}=je,Tt=vt(We.Playbook,{sdkInput:true}),il=vt(We.Playbook,{sdkInput:false}),ms=vt(We.Playbook,{inConfig:false,sdkInput:false}),ix=vt(We.Playbook,{inConfig:false,sdkInput:true}),al=vt(We.Playbook,{inConfig:false,sdkInput:true,source:aa.CodeConstant}),Yg=vt(We.Playbook,{inConfig:false,sdkInput:true,source:aa.Runtime}),Wg=vt(We.Playbook,{inConfig:false,sdkInput:false,source:aa.Runtime}),tO=vt(We.Billing,{sdkInput:false}),nO=vt(We.Metering,{sdkInput:false}),rO=vt(We.Branding,{inConfig:true,sdkInput:true}),aO=vt(We.Branding,{sdkInput:false}),sx="1.0.0",sl=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:Bt.meta(g),handle:ht.meta(g),description:fa.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:At.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":ml,"x-revturbine-schema-exposure":La,...ms,...wn()}),iO=fn("SeatTypeAnchor"),ol=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:ht.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:At.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":ml,"x-revturbine-schema-exposure":La,...ms,...wn()}),sO=fn("PersonalizationTokenAnchor"),ox=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":La}),Ru=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({handle:ht.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:ox.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:At.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":ml,"x-revturbine-schema-exposure":La,...tO,...vr()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(g),workspace_name:z.string().optional().meta(g),logo_url:z.string().optional().meta(g),support_email:z.string().optional().meta(g)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...aO});var ll=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({handle:ht.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:At.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":ml,"x-revturbine-schema-exposure":La,...nO,...vr()}),Zg=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":La}),cl=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:ht.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:Zg.default("warn").meta(g),hard_limit_action:Zg.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":ml,"x-revturbine-schema-exposure":La,...ix,...vr()}),lO=fn("UsageEnforcementSettingsAnchor"),lx=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":st,"x-revturbine-schema-exposure":La}),cx=z.object({id:z.string().min(1).meta(g),group:z.array(lx).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":st,"x-revturbine-schema-exposure":La}),mx=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":La}),Jg=z.object({capRules:z.array(cx).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:mx.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":La}),ku=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:ht.meta({...g,readOnly:true}),global_frequency_cap:Jg.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":ml,"x-revturbine-schema-exposure":La,...ix,...vr()}),cO=fn("PlacementSettingsAnchor"),Xg=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":st,"x-revturbine-schema-exposure":jt}),eh=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Xg).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":st,"x-revturbine-schema-exposure":jt,...Tt}),ux=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:_i.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt}),dx=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:_i.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...il}),px=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:ws.meta(g),visibility:_i.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:$o.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...ms}),gx=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:ws.meta(g),visibility:_i.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:$o.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...ms}),hx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),fx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),_x=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Jg.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":st,"x-revturbine-schema-exposure":jt,...Tt}),yx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),vx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),bx=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:Bo.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":st,"x-revturbine-schema-exposure":jt,...Tt}),xx=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(lu).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:Bo.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}),...ss.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:Ho.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt}),Sx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),Px=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":st,"x-revturbine-schema-exposure":jt,...Tt}),Tx=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":st,"x-revturbine-schema-exposure":jt}),Ix=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(Tx).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt}),th=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),Cx=z.object({name:z.string().min(1).meta(g),action_type:th.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":st,"x-revturbine-schema-exposure":jt,...Tt}),Ex=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":st,"x-revturbine-schema-exposure":jt,...Tt}),Rx=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":st,"x-revturbine-schema-exposure":jt,...Tt}),Qg=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":st,"x-revturbine-schema-exposure":jt}),kx=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:Qg.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Qg})).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":st,"x-revturbine-schema-exposure":jt,...Tt}),Ax=z.object({label:z.string().meta(g),path:Ko.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),nh=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(Ax).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),rh=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":st,"x-revturbine-schema-exposure":jt}),wx=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":st,"x-revturbine-schema-exposure":jt}),ah=z.object({max_per_period:wx.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),jx=z.object({id:z.string().min(1).meta(g),target:rh.meta(g),surfaces:z.array(nh).meta(g),caps:ah.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":st,"x-revturbine-schema-exposure":jt}),Ox=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:is}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:is}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:is}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),qx=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt}),ih=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:qx.meta(g),trigger:Ox.meta(g),payloads:z.array(jx).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt}),Dx=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:rh.meta(g),caps:ah.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(nh).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":st,"x-revturbine-schema-exposure":jt,...Tt}),mO=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":st,"x-revturbine-schema-exposure":jt,...Tt}),uO=$.merge(Fg).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...ms}),dO=$.merge(Lg).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...ms}),Ux=z.object({plans:z.array(ux).meta({...g,...Tt}),addons:z.array(dx).optional().meta({...g,...il}),entitlements:z.array(bx).meta({...g,...Tt}),entitlement_rules:z.array(xx).meta({...g,...Tt}),segments:z.array(eh).meta({...g,...Tt}),content_ui_paths:z.array(Cx).meta({...g,...Tt}),slot_configs:z.array(Sx).optional().meta({...g,...Tt,...Ac({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,...Tt,...Ac({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,...rO,...Ac({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(Px).optional().meta({...g,...Tt}),message_blocks:z.array(kx).optional().meta({...g,...Tt}),placement_payloads:z.array(Dx).optional().meta({...g,...Tt}),placements:z.array(ih).optional().meta({...g,...Tt}),content_promotions:z.array(Ex).optional().meta({...g,...Tt}),personalization_tokens:z.array(Rx).optional().meta({...g,...Tt}),surface_templates:z.array(Ix).optional().meta({...g,...Tt}),free_trial_rules:z.array(uO).optional().meta({...g,...il}),reverse_trial_rules:z.array(dO).optional().meta({...g,...il}),plan_variations:z.array(px).optional().meta({...g,...il}),addon_variations:z.array(gx).optional().meta({...g,...il}),extension_rules:z.array(mO).optional().meta({...g,...Tt}),seat_types:z.array(hx).optional().meta({...g,...Tt}),enforcement_defaults:z.array(fx).optional().meta({...g,...Tt}),placement_settings:z.array(_x).optional().meta({...g,...Tt}),segment_dimensions:z.array(yx).optional().meta({...g,...Tt}),meter_bindings:z.array(vx).optional().meta({...g,...Tt}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...ms}),signal_catalog:z.object({}).strict().optional().meta({...g,...ms})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt}),Mx=z.object({artifact_type:z.literal("playbook").meta({...g,...al,readOnly:true}),format_version:z.literal(sx).meta({...g,...al,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...al}),playbook_version_id:z.string().nullable().default(null).meta({...g,...Yg,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...Wg,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...Wg,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...Wg,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...Yg,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...al,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...al,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...g,...al,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Yg}),Au=Mx.extend(Ux.shape).meta({"x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt});function pO(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Fx(t){if(!pO(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(Fx,Au).meta({id:"Playbook","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt});z.preprocess(Fx,Au.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":jt,...Tt});({"/api/seat-type-anchors":{get:f({operationId:"listSeatTypeAnchors",requestParams:{query:K},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:V(iO)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:f({operationId:"listSeatTypes",requestParams:{query:K},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:V(sl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:f({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(sl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:f({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:sl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:sl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:f({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:f({operationId:"listPersonalizationTokenAnchors",requestParams:{query:K},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:V(sO)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:f({operationId:"listPersonalizationTokens",requestParams:{query:K},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:V(ol)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:f({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(ol)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:f({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ol.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:f({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:f({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ru)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ru}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:f({operationId:"listMeteringConfigs",requestParams:{query:K},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:V(ll)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:f({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(ll)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:f({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ll.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ll}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:f({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:f({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:K},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:V(lO)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:f({operationId:"listUsageEnforcementSettings",requestParams:{query:K},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:V(cl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:f({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tr(cl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:f({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:cl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:cl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:f({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:f({operationId:"listPlacementSettingsAnchors",requestParams:{query:K},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:V(cO)}}},default:{description:"Error response",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:f({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(ku)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:ku}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Li}=ke,{Persisted:Lx}=Le,{Internal:Nx}=je,Vx=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Lx,"x-revturbine-schema-exposure":Nx}),sh=$.merge(ee).merge(le).extend({action:Vx.meta(Li),resource_type:z.string().min(1).max(100).meta(Li),resource_id:z.string().min(1).meta(Li),resource_name:z.string().max(200).optional().meta(Li),actor_id:z.string().min(1).meta(Li),actor_email:z.string().email().optional().meta(Li),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Li),summary:z.string().max(1e3).optional().meta(Li),metadata:At.meta(Li)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Lx,"x-revturbine-schema-exposure":Nx});({"/api/changelog":{get:f({operationId:"listChangeLogEntries",requestParams:{query:K},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:V(sh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:f({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:sh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:wu}=ke,{Persisted:yO,Transient:vO}=Le,{Internal:Bx}=je,zx=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":vO,"x-revturbine-schema-exposure":Bx}),Vi=$.merge(ee).extend({name:Bt.meta(wu),handle:ht.meta(wu),status:zx.default("active").meta(wu),metadata:At.meta(wu)}).meta({id:"Tenant","x-revturbine-schema-persistence":yO,"x-revturbine-schema-exposure":Bx});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:K},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:V(Vi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:f({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Vi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:f({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Vi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:f({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:Vi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:f({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Vi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Na}=ke,{Persisted:xO,Transient:Kx}=Le,{Internal:oh}=je,$x=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Kx,"x-revturbine-schema-exposure":oh}),zs=$.merge(ee).merge(le).extend({name:Bt.meta(Na),handle:ht.meta(Na),description:fa.meta(Na),is_production:z.boolean().default(false).meta({...Na,readOnly:true}),status:$x.default("active").meta(Na),cloned_from_environment_id:z.string().nullable().default(null).meta({...Na,readOnly:true}),cloned_at:zt.meta({...Na,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Na,readOnly:true}),requires_approval:z.boolean().default(false).meta(Na),auto_deploy_on_approval:z.boolean().default(false).meta(Na),created_by:z.string().optional().meta(Na),metadata:At.meta(Na)}).meta({id:"Environment","x-revturbine-schema-persistence":xO,"x-revturbine-schema-exposure":oh}),Hx=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":Kx,"x-revturbine-schema-exposure":oh});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:K},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:V(zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:f({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:zs}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:f({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:f({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:zs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:f({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:zs}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:f({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Hx}}},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:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ye,Pii:Gc}=ke,{Transient:Pi,Persisted:PO}=Le,{External:Ja}=je,Gx=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja});z.object({superseded_output_id:z.string().min(1).meta(Ye),superseded_by:z.string().min(1).meta(Ye),reason:Gx.meta(Ye)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":PO,"x-revturbine-schema-exposure":Ja,...ke.Operational});var Yx=z.enum(kc).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja}),lh=z.object({output_id:z.string().meta(Ye),category:z.string().meta(Ye),surface:z.object({template:z.string().optional().meta(Ye),type:Rc.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":Pi,"x-revturbine-schema-exposure":Ja}),Wx=z.object({status:Yx.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:lh.optional().meta(Ye)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja});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":Pi,"x-revturbine-schema-exposure":Ja});var Zx=z.object({id:z.string().meta(Gc),anonymous_id:z.string().optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Gc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja}),Qx=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:lh.optional().meta(Ye),reason_codes:z.array(z.string()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja}),Jx=Wx,Xx=qc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja}),eS=z.object({segments:z.array(z.string()).optional().meta(Ye),traits:z.record(z.string(),z.unknown()).optional().meta(Gc),usage_balances:z.record(z.string(),z.number()).optional().meta(Ye)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja});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:Zx.meta(Gc),decisions:z.array(Qx).meta(Ye),entitlements:z.record(z.string(),Jx).optional().meta(Ye),theme:z.record(z.string(),z.unknown()).optional().meta(Ye),trial_status:Xx.optional().meta(Ye),user_context:eS.optional().meta(Gc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Pi,"x-revturbine-schema-exposure":Ja});var {Unrestricted:Xt}=ke,{Persisted:EO,Transient:ju}=Le,{Internal:Yc}=je,tS=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Yc}),ul=$.merge(ee).merge(le).extend({environment_id:z.string().min(1).meta(Xt),name:Bt.meta(Xt),description:z.string().max(2e3).optional().meta(Xt),status:tS.default("draft").meta(Xt),labels:z.array(z.string()).default([]).meta(Xt),created_by:z.string().min(1).meta(Xt),submitted_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Xt,readOnly:true}),submitted_at:zt.meta({...Xt,readOnly:true}),reviewed_at:zt.meta({...Xt,readOnly:true}),deployed_at:zt.meta({...Xt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Xt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Xt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Xt),review_notes:z.string().max(2e3).optional().meta(Xt),rejection_reason:z.string().max(2e3).optional().meta(Xt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Xt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Xt,readOnly:true}),metadata:At.meta(Xt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":EO,"x-revturbine-schema-exposure":Yc}),ch=z.object({handle:z.string().meta(Xt),resource_type:z.string().meta(Xt),resource_name:z.string().optional().meta(Xt),action:z.enum(["create","update","delete"]).meta(Xt),has_conflict:z.boolean().meta(Xt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Yc}),nS=z.object({playbook_version_id:z.string().meta(Xt),entries:z.array(ch).meta(Xt),total_entries:z.number().int().min(0).meta(Xt),total_conflicts:z.number().int().min(0).meta(Xt),deployable:z.boolean().meta(Xt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Yc}),rS=z.object({playbook_version_id:z.string().meta(Xt),deployed_count:z.number().int().min(0).meta(Xt),superseded_count:z.number().int().min(0).meta(Xt),skipped_conflicts:z.number().int().min(0).meta(Xt),deployed_at:z.string().datetime().meta(Xt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":ju,"x-revturbine-schema-exposure":Yc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:f({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:ul}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:f({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:ul}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:f({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:ul}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:f({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:rS}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:f({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:ul}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:f({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:nS}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:f({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:K},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:V(ch)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:f({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:ul}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:f({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:Oe}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Ot,Pii:kO}=ke,{Persisted:Xa}=Le,{Internal:ei}=je,aS=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),Wc=$.merge(ee).merge(le).extend({name:Bt.meta(Ot),key_hash:z.string().min(1).meta({...kO,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...Ot,readOnly:true}),key_last4:z.string().length(4).meta({...Ot,readOnly:true}),status:aS.default("active").meta(Ot),last_used_at:zt.meta({...Ot,readOnly:true}),expires_at:zt.meta(Ot)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),iS=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),us=$.merge(ee).merge(le).extend({key:z.string().min(1).max(100).meta(Ot),value_type:iS.default("boolean").meta(Ot),value:z.string().max(4e3).default("false").meta(Ot),description:fa.meta(Ot),enabled:z.boolean().default(true).meta(Ot)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),Ou=$.merge(ee).merge(le).extend({workspace_name:z.string().min(1).max(200).meta(Ot),support_email:z.string().email().nullable().default(null).meta(Ot),timezone:z.string().max(50).default("UTC").meta(Ot),default_currency:z.string().length(3).default("USD").meta(Ot),logo_url:z.string().url().nullable().default(null).meta(Ot),activity_window_days:z.number().int().min(1).default(30).meta(Ot),activity_high_min:z.number().int().min(1).default(10).meta(Ot),activity_medium_min:z.number().int().min(1).default(3).meta(Ot),activity_low_min:z.number().int().min(1).default(1).meta(Ot)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),qu=$.merge(ee).merge(le).extend({server_url:z.string().url().max(500).meta(Ot),api_token_hint:z.string().max(50).nullable().default(null).meta(Ot),allow_write_actions:z.boolean().default(false).meta(Ot),enabled_tools:z.array(z.string().max(100)).default([]).meta(Ot),enabled:z.boolean().default(false).meta(Ot)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),Zc=$.merge(ee).merge(le).extend({step_key:z.string().min(1).max(100).meta(Ot),label:z.string().min(1).max(200).meta(Ot),done:z.boolean().default(false).meta(Ot),completed_at:zt.meta({...Ot,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),sS=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),oS=$.merge(le).extend({environment_id:z.string().min(1).default("production").meta(Ot),actor_type:sS.meta(Ot),actor_id:z.string().nullable().default(null).meta(Ot),action:z.string().min(1).max(120).meta(Ot),object_type:z.string().max(120).nullable().default(null).meta(Ot),object_id:z.string().max(200).nullable().default(null).meta(Ot),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(Ot),occurred_at:z.string().datetime().meta({...Ot,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),lS=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei}),Qc=$.merge(ee).merge(le).merge(wt).merge(Ut).extend({handle:ht.meta({...Ot,readOnly:true}),identifier:z.string().min(1).max(200).meta(Ot),identifier_type:lS.default("user_id").meta(Ot),note:z.string().max(500).nullable().default(null).meta(Ot),added_by:z.string().meta(Ot)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Xa,"x-revturbine-schema-exposure":ei,...vr()});({"/api/settings/api-keys":{get:f({operationId:"listApiKeys",requestParams:{query:K},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:V(Wc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:f({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(Wc)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:f({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:Wc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:f({operationId:"listFeatureFlags",requestParams:{query:K},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:V(us)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:f({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(us)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:us}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:f({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:us}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:f({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(us).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:us}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:f({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:us}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:f({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ou).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:f({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(qu).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:qu}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:f({operationId:"listOnboardingSteps",requestParams:{query:K},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:V(Zc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:f({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:Zc}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:f({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(Zc).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Zc}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:f({operationId:"listAuditEvents",requestParams:{query:K},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:V(oS)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:f({operationId:"listPlacementTestUsers",requestParams:{query:K},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:V(Qc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:f({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:tr(Qc)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:f({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:Qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:de,Pii:Wr}=ke,{Persisted:la,Transient:mh}=Le,{Internal:Ar}=je,cS=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.merge(ee).extend({name:Bt.meta(de),email:z.string().email().meta(Wr),email_verified:z.boolean().default(false).meta(de),image:z.string().url().nullable().default(null).meta(Wr),role:cS.default("user").meta(de),banned:z.boolean().default(false).meta({...de,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...de,readOnly:true}),ban_expires:zt.meta({...de,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...de,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.merge(ee).extend({expires_at:z.string().datetime().meta(de),token:z.string().min(1).meta({...Wr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Wr),user_agent:z.string().nullable().default(null).meta(Wr),user_id:z.string().min(1).meta({...de,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(de),impersonated_by:z.string().nullable().default(null).meta({...de,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.merge(ee).extend({account_id:z.string().min(1).meta(de),provider_id:z.string().min(1).meta(de),user_id:z.string().min(1).meta({...de,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Wr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Wr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Wr,readOnly:true}),access_token_expires_at:zt.meta({...de,readOnly:true}),refresh_token_expires_at:zt.meta({...de,readOnly:true}),scope:z.string().nullable().default(null).meta(de),password:z.string().nullable().default(null).meta({...Wr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.merge(ee).extend({identifier:z.string().min(1).meta(Wr),value:z.string().min(1).meta({...Wr,readOnly:true}),expires_at:z.string().datetime().meta(de)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({secret:z.string().min(1).meta({...Wr,readOnly:true}),backup_codes:z.string().min(1).meta({...Wr,readOnly:true}),user_id:z.string().min(1).meta({...de,readOnly:true}),verified:z.boolean().default(false).meta({...de,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({name:Bt.meta(de),slug:z.string().min(1).max(100).nullable().default(null).meta(de),logo:z.string().url().nullable().default(null).meta(de),created_at:z.string().datetime().meta({...de,readOnly:true}),metadata:z.string().nullable().default(null).meta(de)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});var uh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});var dh=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":mh,"x-revturbine-schema-exposure":Ar}),ph=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":mh,"x-revturbine-schema-exposure":Ar});z.object({resource:dh,action:ph}).meta({id:"Permission","x-revturbine-schema-persistence":mh,"x-revturbine-schema-exposure":Ar});var FO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],LO=["plans","entitlements","placements","targeting","content","experiments"],NO=["plans","entitlements","placements","targeting","content","experiments"],VO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],BO=["read","create","update","delete","publish","approve","invite","manage_roles"];function Du(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var zO=Du(FO,["read"]),KO=[...zO,...Du(LO,["create","update"])];[...KO,...Du(NO,["publish","approve","delete"])];Du(VO,BO);var $O=dh.options.flatMap(t=>ph.options.map(e=>`${t}:${e}`));z.enum($O).meta({id:"McpTokenScope","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({organization_id:z.string().min(1).meta({...de,readOnly:true}),user_id:z.string().min(1).meta({...de,readOnly:true}),role:uh.default("viewer").meta(de),created_at:z.string().datetime().meta({...de,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});var mS=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({organization_id:z.string().min(1).meta({...de,readOnly:true}),email:z.string().email().meta(Wr),role:uh.nullable().default(null).meta(de),status:mS.default("pending").meta(de),expires_at:z.string().datetime().meta(de),created_at:z.string().datetime().meta({...de,readOnly:true}),inviter_id:z.string().min(1).meta({...de,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({name:z.string().max(200).nullable().default(null).meta(de),public_key:z.string().min(1).meta({...Wr,readOnly:true}),user_id:z.string().min(1).meta({...de,readOnly:true}),credential_id:z.string().min(1).meta({...de,readOnly:true}),counter:z.number().int().default(0).meta({...de,readOnly:true}),device_type:z.string().min(1).meta(de),backed_up:z.boolean().default(false).meta(de),transports:z.string().nullable().default(null).meta(de),created_at:z.string().datetime().meta({...de,readOnly:true}),aaguid:z.string().nullable().default(null).meta(de)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.merge(ee).extend({config_id:z.string().min(1).meta(de),name:z.string().max(200).nullable().default(null).meta(de),start:z.string().nullable().default(null).meta(de),reference_id:z.string().min(1).meta(de),prefix:z.string().nullable().default(null).meta(de),key:z.string().min(1).meta({...Wr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(de),refill_amount:z.number().int().nullable().default(null).meta(de),last_refill_at:zt.meta({...de,readOnly:true}),enabled:z.boolean().default(true).meta(de),rate_limit_enabled:z.boolean().default(false).meta(de),rate_limit_time_window:z.number().int().nullable().default(null).meta(de),rate_limit_max:z.number().int().nullable().default(null).meta(de),request_count:z.number().int().default(0).meta({...de,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...de,readOnly:true}),last_request:zt.meta({...de,readOnly:true}),expires_at:zt.meta(de),permissions:z.string().nullable().default(null).meta(de),metadata:z.string().nullable().default(null).meta(de)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});$.extend({issuer:z.string().min(1).meta(de),oidc_config:z.string().nullable().default(null).meta(de),saml_config:z.string().nullable().default(null).meta(de),user_id:z.string().min(1).meta({...de,readOnly:true}),provider_id:z.string().min(1).meta(de),organization_id:z.string().nullable().default(null).meta(de),domain:z.string().min(1).meta(de)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":la,"x-revturbine-schema-exposure":Ar});var XO=14,e1=11;async function pS(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 uS(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var dl=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function t1(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new dl("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!uS(n))throw new dl("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(!uS(r)||r>n)throw new dl("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 gS(t,e){let n=XO,r=e1,a=t1(t);if(a.minReadableSchemaVersion>n)throw new dl("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${a.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(a.schemaVersion>n)throw new dl("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);if(a.schemaVersion<r)throw new dl("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);return a}var hS=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),dS=z.string().datetime({offset:true}),n1=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),gh=z.object({url:z.string().min(1),sha256:hS,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),r1=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:n1}).strict(),a1=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:a1,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:gh,standby:gh.optional(),previous:gh.optional(),not_before:dS,expires_at:dS,rollback_to:hS.optional(),signature:r1.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 i1=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),pl=class{constructor(){k(this,"types",new Map);k(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(i=>i.surface.type===e.surfaceType)};this.types.set(r.id,r);let a=this.surfaceIndex.get(r.surfaceType)??[];a.includes(r.id)||(a.push(r.id),this.surfaceIndex.set(r.surfaceType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let a=r.filter(i=>i!==e);a.length>0?this.surfaceIndex.set(n.surfaceType,a):this.surfaceIndex.delete(n.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let a=this.types.get(e.surface.template);if(a)return a}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(a=>this.types.get(a)).filter(a=>a!=null).sort((a,i)=>i.priority-a.priority);for(let a of r)if(a.accepts?.(e))return a;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function fS(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=i=>{if(typeof i=="number"&&Number.isFinite(i))return i;if(typeof i=="string"&&i.trim().length>0){let s=Number(i);if(Number.isFinite(s))return s}},a=i=>{let s="_usage_remaining";if(i==="usage_remaining"){let P=r(e.usage_current??e.current_usage),C=r(e.usage_limit);return P!==void 0&&C!==void 0?Math.max(0,C-P):void 0}if(!i.endsWith(s))return;let o=i.slice(0,-s.length);if(!o)return;let _=r(e[`${o}_usage_current`]),T=r(e[`${o}_usage_limit`]);if(!(_===void 0||T===void 0))return Math.max(0,T-_)};return t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let o=n[s]??s,_=e[o];if(_!=null)return String(_);let T=a(o);return T!=null?String(T):`{{${s}}}`})}function s1(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=fS(a,e):n[r]=a;return n}function o1(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,a]of Object.entries(t))i1.has(r)||(n[r]=a);return {type:e,plan_handle:typeof t.plan_handle=="string"?t.plan_handle:void 0,promotion_id:typeof t.promotion_id=="string"?t.promotion_id:void 0,placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0,url:typeof t.url=="string"?t.url:void 0,tour_id:typeof t.tour_id=="string"?t.tour_id:void 0,...Object.keys(n).length>0?{params:n}:{}}}function l1(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 Jc=null,hh=null;function yS(t){}function c1(){return Jc||(Jc=new pl,hh),Jc}function m1(){Jc=null;}var _h=class{constructor(){k(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();}},fh=null;function vS(){return fh||(fh=new _h),fh}function bS(t,e=vS()){let n=new Map;for(let[r,a]of Object.entries(t)){if(e.has(r))continue;let i=(s,o)=>{let _=o.placement.cta_path??o.placement.ui_path??{};Promise.resolve().then(()=>a(_)).catch(T=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,T);});};e.register(r,i),n.set(r,i);}return ()=>{for(let[r,a]of n)e.get(r)===a&&e.unregister(r);}}function xS(t,e=vS()){if(e.has("snooze"))return ()=>{};let n=(r,a)=>{let i=a.placement,s=typeof i.remind_later_minutes=="number"?i.remind_later_minutes:void 0;t(a.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}var Xc={recommended_plan_handle:"",recommended_plan_name:""};function SS(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:a}=t;if(a.length===0)return Xc;if(e==="custom"){let o=n??"";if(o===""||o===r)return Xc;let _=a.find(T=>T.unique_handle===o);return _?{recommended_plan_handle:_.unique_handle,recommended_plan_name:_.name}:Xc}if(r==="")return Xc;let i=pd(r,a);if(i===null)return Xc;let s=a.find(o=>o.unique_handle===i);return {recommended_plan_handle:i,recommended_plan_name:s?.name??i}}var yh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Mu=yh.length,u1=Mu-1,d1=10,Uu=16;function p1(t){let e=t,n="";for(let r=0;r<d1;r+=1){let a=e%Mu;n=yh[a]+n,e=Math.floor(e/Mu);}return n}function PS(){let t=new Uint8Array(Uu);crypto.getRandomValues(t);let e=new Array(Uu);for(let n=0;n<Uu;n+=1)e[n]=t[n]%Mu;return e}function g1(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<u1)return t[e]+=1,true;t[e]=0;}return false}function TS(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Uu?g1(e)||(t+=1,e=PS()):(t=n,e=PS());let r=p1(t);for(let a=0;a<e.length;a+=1)r+=yh[e[a]];return r}}}var vh=TS();var h1=new Set([408,429,500,502,503,504]);function f1(t){return new Promise(e=>setTimeout(e,t))}async function bh(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,a=e.sleep??f1,i;for(let s=0;s<=n;s+=1){try{let o=await t();if(o.ok)return {delivered:!0,status:o.status,attempts:s+1};if(!h1.has(o.status))return {delivered:!1,status:o.status,attempts:s+1};i=new Error(`ingest_status_${o.status}`);}catch(o){i=o instanceof Error?o:new Error(String(o));}s<n&&await a(r*(s+1));}return {delivered:false,error:i,attempts:n+1}}function xh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function IS(){let t=typeof IntersectionObserver<"u",e=new Map;function n(a,i,s,o){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),a.io.unobserve(i),a.tracked.delete(i),s.onExposed(o));}function r(a,i){let s=`${a}|${i}`,o=e.get(s);if(o)return o;let _=new Map,P={io:new IntersectionObserver(C=>{let R=e.get(s);if(R)for(let I of C){let E=_.get(I.target);!E||E.fired||(I.isIntersecting?E.minVisibleMs<=0?n(R,I.target,E,"viewport"):E.timer===null&&(E.timer=setTimeout(()=>n(R,I.target,E,"viewport"),E.minVisibleMs)):E.timer!==null&&(clearTimeout(E.timer),E.timer=null));}},{threshold:a,rootMargin:i}),tracked:_};return e.set(s,P),P}return {supported:t,observe(a,i,s){if(!t){let C=false;return Promise.resolve().then(()=>{C||s("render_fallback");}),()=>{C=true;}}let o=i.threshold??.5,_=i.rootMargin??"0px",T=r(o,_),P={onExposed:s,minVisibleMs:i.minVisibleMs??0,timer:null,fired:false};return T.tracked.set(a,P),T.io.observe(a),()=>{P.fired||(P.timer!==null&&(clearTimeout(P.timer),P.timer=null),T.io.unobserve(a),T.tracked.delete(a));}},disconnect(){for(let a of e.values())a.io.disconnect();e.clear();}}}var Sh=IS();var wS=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],_1=new Set(wS),y1=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,v1=Gs();function b1(t){v1&&console.warn(t);}var jS=new Set($m.options),OS=["usage","account_id","email","email_type","plan_handle","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],CS=new Set(OS);function sG(t,e){return Vu(e,"defineUiPathResolvers(resolvers)")}function Vu(t,e){if(!t)return {};let n={};for(let[r,a]of Object.entries(t)){let i=String(r||"").trim();if(!i)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof a!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${i}'.`);n[i]=a;}return n}var Fu={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function zu(t){return t?.playbook??t?.exportedConfig}function oG(t){return {...t,runtimeMode:"revturbine_server"}}function lG(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function x1(t){let e=Vu(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function cG(t){return x1(t)}function mG(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function uG(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function dG(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function ds(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function pG(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function gG(t,e,n){return {eventType:t,payload:e,options:n}}var ES="revturbine:sdk-route-change",ps="sdk_validation_warning",S1="revturbine:decision-cache",P1="revturbine:interaction-state",T1="revturbine:presentation-caps",I1="/api/track",C1="/api/sdk/meta",E1="/api/events/interactions",R1="/api/placements/interactions",k1="revturbine-web-sdk",RS="user_context_observed",A1=20,w1=5e3;function qS(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=DS(t);if(r){let a=r[e];if(typeof a=="string"&&a.trim().length>0)return a}return null}function DS(t){return he(t.payload)?t.payload:null}var j1=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function O1(t){let e={};for(let n of j1)e[n]=qS(t,n);return e}var q1=Bp.map(t=>t.prefix),D1=new Set([...Vp,...yy]);function U1(t){let e=Ol(t);return e===ps?"derived":D1.has(e)||q1.some(n=>e.startsWith(n))?"automatic":"explicit"}var M1=["decision_id"];function F1(t){let e={};for(let n of M1)e[n]=qS(t,n);return e}function L1(t){return cd(t,kh(8))}async function kS(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Pm(new Uint8Array(e))}function kh(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let a=0;a<n.length;a+=1){let i=n[a].toString(16).padStart(2,"0");r+=i;}return r.slice(0,t)}function wr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${kh(16)}`}function Lu(){return fo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function AS(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function N1(t,e){let n={};for(let[r,a]of Object.entries(e))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(n[r]=a);return Id(t,n)}function V1(t,e,n){if(t.length===0)return true;let r=new Map;for(let a of t){let i=n.get(a)??"__no_dim__",s=r.get(i)??[];s.push(a),r.set(i,s);}for(let a of r.values())if(!a.some(i=>e.has(i)))return false;return true}var Th=class{constructor(e){k(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Bu=class Bu{constructor(e,n,r,a){k(this,"endpoint",e);k(this,"tenantId",n);k(this,"token",r);k(this,"legacyTargetDefaults",a);k(this,"cached");k(this,"etag");k(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<Bu.REFRESH_TTL_MS)return this.cached;try{let n=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,n.status===304||!n.ok)return this.cached;let r=await n.text(),a=n.headers.get("x-bundle-sha256");if(a&&await pS(new TextEncoder().encode(r))!==a)return this.cached;let i=JSON.parse(r);gS(i);let s=Ei(i,"GET /api/sdk/config",this.legacyTargetDefaults);return s&&(this.cached=s,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};k(Bu,"REFRESH_TTL_MS",6e4);var Ih=Bu,Ch=class{constructor(e,n,r){k(this,"cached");k(this,"resolver");k(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=Ei(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},Eh=class{constructor(e,n){k(this,"source");k(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return Ei(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return Ei(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},em=class em{constructor(e){k(this,"tenantId");k(this,"apiKey");k(this,"ingestPublicKey");k(this,"environmentId");k(this,"testTraffic");k(this,"analyticsEnabled");k(this,"anonymousTelemetryEnabled");k(this,"previewMode");k(this,"telemetryConsent");k(this,"telemetryCounters",xh());k(this,"maxBatchSize");k(this,"flushIntervalMs");k(this,"flushTimer");k(this,"batchingTeardown",[]);k(this,"anonTelemetryNoticeShown",false);k(this,"piiRedactionWarned",false);k(this,"endpoint");k(this,"runtimeMode");k(this,"endpointOverrides");k(this,"localRuntime");k(this,"localStorageKey");k(this,"mode");k(this,"policy");k(this,"extensionEnabled");k(this,"placementBehaviorOverrides");k(this,"derivedPlacementBehaviorMemo",null);k(this,"providerFailureSlotBehavior");k(this,"uiPathResolvers");k(this,"unbridgeUiPathCtaResolvers",()=>{});k(this,"unregisterBuiltinSnoozeResolver",()=>{});k(this,"persistentStore");k(this,"sessionStore");k(this,"anonymousId");k(this,"sessionId");k(this,"decisionCache",new Map);k(this,"interactionState",new Map);k(this,"interactionQueue",[]);k(this,"defaultDecisionTtlMs",6e4);k(this,"defaultDismissCooldownMs",1440*60*1e3);k(this,"dismissCooldownDefaultMs",10080*60*1e3);k(this,"defaultRemindLaterMs",3600*1e3);k(this,"defaultUsageWarningPercent",80);k(this,"defaultTrialExpiringDays",3);k(this,"events",[]);k(this,"placements",new Map);k(this,"syncedSurfaceSlotIds",new Set);k(this,"userContext");k(this,"pageContext");k(this,"clientContextToken");k(this,"clientSessionProvider");k(this,"retriedClientContextAfterMint",false);k(this,"serverUserContextProvider");k(this,"lastServerContextHash");k(this,"usageBalances",{});k(this,"localDecisionsByPlacementId",new Map);k(this,"localPlacementsByLookupKey",new Map);k(this,"localEntitlementsByHandle",new Map);k(this,"localUserContextsByUserId",new Map);k(this,"localTrialStatus",{in_trial:false});k(this,"presentationCapsByKey",new Map);k(this,"usageLimitByEntitlement",new Map);k(this,"usageTokenPrefixByEntitlement",new Map);k(this,"segmentIdsByPredicateField",new Map);k(this,"configuredSegmentsById",new Map);k(this,"dirtySegmentIds",new Set);k(this,"segmentMembershipBySegmentId",new Map);k(this,"segmentMembershipUserId");k(this,"lastTrialTriggerStage","none");k(this,"configProvider");k(this,"branding");k(this,"apiBranding");k(this,"cachedPlacementResolver");k(this,"cachedPlacementResolverConfig");k(this,"sdkDisabledByProviderFailure",false);k(this,"sdkDisabledReason");k(this,"providerRegistry");k(this,"placementTypeRegistry");k(this,"impressionHistory");k(this,"emittedResolutionDiagnostics",new Set);k(this,"emittedSdkErrors",new Set);k(this,"reportedUnrecognizedContextKeys",new Set);k(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??A1),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??w1),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Fu.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.clientSessionProvider=e.clientSession,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=Vu(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=Zi(e.persistentStorage),this.sessionStore=lp(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?AS():{},...e.user||{}},this.pageContext={...this.policy.inferPage?Lu():{},...e.page||{},tags:jl(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),this.sessionId=wr(),this.providerRegistry=new ec,this.placementTypeRegistry=new pl,this.impressionHistory=new np({store:new Mm({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),yS(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=bS(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=xS((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),Br()&&this.policy.routerAutoTrack&&this.installRouteTracking(),Br()&&this.extensionEnabled&&this.installBridge(),this.capture("page_view",{mode:this.mode,runtime_mode:this.runtimeMode,source:"sdk_init",placement_behavior_flags:this.placementBehavior}),this.startEventBatchFlushing(),this.emitSdkInitTelemetry(),this.autoFetchClientContext();}isLocalOnlyMode(){return this.runtimeMode===Fu.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new Eh(e.configProvider,n);let r=Ei(zu(e.localRuntime),"localRuntime.playbook",n),a=e.localRuntime?.resolvers?.resolveExportedConfig;if(a)return new Ch(a,n,r);if(r)return new Th(r);let i=e.runtimeMode??Fu.Server,s=e.ingestPublicKey??e.apiKey;if(i!==Fu.LocalOnly&&e.endpoint&&s)return new Ih(e.endpoint,e.tenantId,s,n)}async refreshExportedConfigSnapshot(){try{await this.configProvider?.refresh?.(),this.rebuildSegmentPredicateFieldIndex();}catch{}}getConfiguredExportedConfig(){return this.configProvider?.getExportedConfig()}get placementBehavior(){let e=this.derivePlacementBehaviorFromPlaybook();return {enableClientCapsEnforcement:this.placementBehaviorOverrides.enableClientCapsEnforcement??e.enableClientCapsEnforcement,enableAutoGatedPlacement:this.placementBehaviorOverrides.enableAutoGatedPlacement??e.enableAutoGatedPlacement,enableTrialAutoTriggers:this.placementBehaviorOverrides.enableTrialAutoTriggers??e.enableTrialAutoTriggers}}derivePlacementBehaviorFromPlaybook(){let e=this.getConfiguredExportedConfig();if(this.derivedPlacementBehaviorMemo&&this.derivedPlacementBehaviorMemo.config===e)return this.derivedPlacementBehaviorMemo.flags;let n=e?.placements??[],i={enableClientCapsEnforcement:[...n.flatMap(s=>s.payloads??[]),...e?.placement_payloads??[]].some(s=>s.caps?.max_per_period!==void 0||s.caps?.cooldown_days!==void 0||s.remind_later_minutes!==void 0&&s.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(s=>s.category==="gated"),enableTrialAutoTriggers:n.some(s=>s.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:i},i}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let n=this.getConfiguredExportedConfig()?.segments??[];for(let r of n)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let a of r.predicates){let i=String(a.field||"").trim();if(!i)continue;let s=this.segmentIdsByPredicateField.get(i)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(i,s);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let n=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(n)return this.cachedPlacementResolver=Xs({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.resolveContextPlanRaw(),r=this.userContext.usage,a=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,o=this.userContext.tiers,_=o!==void 0&&Object.keys(o).length>0,T=this.userContext.experiments,P=T!==void 0&&Object.keys(T).length>0;if(!e&&!n&&!r&&!_&&!P)return;let C={};if(r&&typeof r=="object"){let I=ii(r);for(let[E,j]of Object.entries(r)){if(!j||typeof j!="object")continue;let ne=typeof j.amount=="number"?j.amount:I[E]??0,G=typeof j.limit=="number"?j.limit:0,pe=G>0?Math.max(0,G-ne):0;C[E]={used:ne,limit:G,remaining:pe,unit:typeof j.unit=="string"?j.unit:void 0,reset_date:typeof j.reset_date=="string"?j.reset_date:void 0};}}let R={...a.in_trial!==void 0?{trialActive:a.in_trial}:{},...a.trial_limit_type!==void 0?{trialLimitType:a.trial_limit_type}:{},...a.progress_percent!==void 0?{trialProgressPercent:a.progress_percent}:{},...a.days_remaining!==void 0?{trialDaysRemaining:a.days_remaining}:{},...a.day_number!==void 0&&a.days_remaining!==void 0?{trialDaysTotal:a.day_number+a.days_remaining}:{},...a.state!==void 0?{trialState:a.state}:{},...a.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:a.usage_entitlement_handle}:{},...a.usage_consumed!==void 0?{trialUsageConsumed:a.usage_consumed}:{},...a.usage_limit!==void 0?{trialUsageLimit:a.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...R,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(C).length>0||_?{entitlements:{entries:{},usage:C,..._?{tiers:o}:{}}}:{},...P?{experiments:{assignments:T}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let n of e){let r=this.segmentIdsByPredicateField.get(n);if(r)for(let a of r)this.dirtySegmentIds.add(a);}}toSegmentEvaluationTraits(e,n,r){return Am(e,n,r)}buildTargetingState(e){return wm(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,a=n.id||this.anonymousId;if(r!==a){this.segmentMembershipUserId=a,this.markAllSegmentsDirty();return}let i=this.buildTargetingState(e),s=this.buildTargetingState(n),o=new Set,_=new Set([...Object.keys(i.segmentTraits),...Object.keys(s.segmentTraits)]);for(let T of _)i.segmentTraits[T]!==s.segmentTraits[T]&&o.add(T);this.markSegmentsDirtyForFields(o);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return Br()?window.location.pathname:"/"}disableForProviderFailure(e){this.sdkDisabledByProviderFailure||(this.sdkDisabledByProviderFailure=true,this.sdkDisabledReason=e,this.decisionCache.clear(),this.persistDecisionCache(),console.warn(`[RevTurbine] SDK disabled after provider fallback chain failed: ${e}`));}isDisabledByProviderFailure(){return this.sdkDisabledByProviderFailure}disabledDecisionForPlacement(e,n){let r=this.providerFailureSlotBehavior==="placeholder",a=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,i=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:wr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:ds(a,i,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${wr()}`,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 Ad(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(a,i)=>!a||!i?true:a===i;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return dd(e,n.planHandle)}applyCategoryConflictSuppression(e){return Im(e)}resolveLocalPlacementFromCandidates(e,n){return jd(e,true,{fixedOnly:n?.fixedOnly??false})}localPlacementForConfig(e){let n=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(n&&!this.localOutputMatchesConfig(n,e))return null;let r=[];for(let[a,i]of this.localPlacementsByLookupKey.entries()){if(!i)continue;let s=ud(a);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(i,e)&&r.push(i);}return n&&!r.some(a=>a.output_id===n.output_id)&&r.push(n),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,a]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,a);if(e?.placementsByLookupKey)for(let[r,a]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,a);if(e?.entitlementByHandle)for(let[r,a]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,a);if(e?.userContextByUserId)for(let[r,a]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,a);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let n=this.persistentStore.getItem(this.localStorageKey);if(!n){this.persistLocalRuntimeState();return}try{let r=JSON.parse(n);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let a of r.placements||[])this.placements.set(a.id,a);for(let[a,i]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(a,i);for(let[a,i]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(a,i);for(let[a,i]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(a,i);for(let[a,i]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(a,i);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${S1}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${P1}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${T1}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let n=JSON.parse(e),r=Date.now();Object.entries(n).forEach(([a,i])=>{!i||typeof i!="object"||!Number.isFinite(i.expiresAt)||i.expiresAt<=r||this.decisionCache.set(a,i);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),n=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(n));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let n=JSON.parse(e);Object.entries(n).forEach(([r,a])=>{!a||typeof a!="object"||this.interactionState.set(r,a);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let n=JSON.parse(e);for(let[r,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let i=Array.isArray(a.seenAt)?a.seenAt.filter(o=>Number.isFinite(o)&&o>0):[],s=Number.isFinite(a.cooldownUntil)?a.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:i,cooldownUntil:s});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan_handle;if(typeof e=="string"&&e.trim())return e.trim();let n=this.userContext.plan;return he(n)&&typeof n.handle=="string"&&n.handle.trim()?n.handle.trim():""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),a=new Set;if(!r)return a;a.add(r);for(let i of e.plans??[]){let s=typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"";s===r&&a.add(s);}return a}ruleTargetsActivePlan(e,n){let a=(Array.isArray(e.targets)?e.targets:[]).filter(i=>he(i)&&i.kind==="plan");return a.length===0?true:a.some(i=>typeof i.id=="string"&&n.has(i.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,a=e.entitlements??[];for(let s of a){let o=typeof s.unique_handle=="string"?s.unique_handle:"";o&&r.set(o,o);}let i=e.entitlement_rules??[];for(let s of i){if(!he(s))continue;let o=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!o)continue;let _=typeof s.kind=="string"?s.kind:"";if(!(_==="usage_limit"||_==="credits"||_==="seat"))continue;let P=r.get(o)??"",C=typeof s.unit=="string"?s.unit:"",R=gd(C),I=R&&!hd(R)?R:Ws(P||o);I&&(this.usageTokenPrefixByEntitlement.set(o,I),P&&this.usageTokenPrefixByEntitlement.set(P,I));let E=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(E)||E<=0||!this.ruleTargetsActivePlan(s,n))continue;let j=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(o,{limit:E,warningPercent:j}),P&&this.usageLimitByEntitlement.set(P,{limit:E,warningPercent:j});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=Vd({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:a=>this.usageThresholdForEntitlement(a)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...n,...r}};}deriveRecommendedPlanTokens(e,n){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=e.plans.map(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 SS({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:i,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,i]of Object.entries(r))a!=="user_id"&&(typeof i=="string"||typeof i=="number")&&(n[a]=i);if(n.plan_name===void 0){let a=ys(this.getConfiguredExportedConfig(),this.userContext.plan);a?n.plan_name=a:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let a=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=a.recommended_plan_handle,n.recommended_plan_name=a.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...ii(this.userContext.usage),...this.usageBalances},n={};for(let[r,a]of Object.entries(e)){if(!Number.isFinite(a))continue;let i=this.usageTokenPrefixByEntitlement.get(r)??Ws(r)??r,s=this.usageThresholdForEntitlement(r);n[i]={current:a,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return ap({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,n){let r=this.getConfiguredExportedConfig();if(!r)return null;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=this.getTargeting(),o=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:_,effectivePlanHandle:T}=this.resolveReverseTrialGrants(r);return Ml({handle:e,context:n,currentPlanHandle:i,segmentIds:o,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,..._!==void 0?{trialGrantedEntitlementHandles:_}:{},...T!==void 0?{effectivePlanHandle:T}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let i=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !i||i.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(i.entitlements_during_trial),effectivePlanHandle:i.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),a=ys(r,this.userContext.plan),i=a??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],o=Array.from(new Set(s.flatMap(R=>(R.predicates??[]).map(I=>I.field)))).sort((R,I)=>R.localeCompare(I)),_={...n?.traits??{},...this.userContext.custom??{}};for(let[R,I]of Object.entries(this.userContext.entitlements??{}))_[R]===void 0&&(_[R]=I);a&&_.plan_name===void 0&&(_.plan_name=a),i&&_.plan===void 0&&(_.plan=i);let T={...n?.usage??{},...ii(this.userContext.usage),...this.usageBalances};for(let[R,I]of Object.entries(T))_[R]===void 0&&(_[R]=I);let P={};for(let[R,I]of Object.entries(_))(typeof I=="string"||typeof I=="number"||typeof I=="boolean")&&(P[R]=I);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),s.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),s.length>0&&this.dirtySegmentIds.size>0){for(let R of this.dirtySegmentIds){let I=this.configuredSegmentsById.get(R)??s.find(j=>j.handle===R);if(!I){this.segmentMembershipBySegmentId.delete(R);continue}let E=Ll([I],P).length>0;this.segmentMembershipBySegmentId.set(R,E);}this.dirtySegmentIds.clear();}let C=s.length>0?s.filter(R=>this.segmentMembershipBySegmentId.get(R.handle)===true).map(R=>R.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:C,traits:_,...i?{plan:i}:{},...Object.keys(T).length>0?{usage:T}:{},configuredSegments:s,configuredTraitFields:o}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),a=this.getEntitlements(),i=this.getPolicy(),s=this.getConfiguredExportedConfig(),o=new Set(r.segmentIds),_=r.configuredSegments.map(ie=>{let Wt=Array.isArray(ie.predicates)?ie.predicates.map(cn=>N1(cn,r.traits)):[],ln=Wt.length>0?Wt.every(cn=>cn.matched):o.has(ie.handle);return {segmentId:ie.handle,...ie.name?{segmentName:ie.name}:{},matched:ln,predicates:Wt}}),T=new Map,P=new Map;if(Array.isArray(s?.entitlements))for(let ie of s.entitlements){let Wt=Qn(ie.unique_handle),ln=Wt;ln&&Wt&&T.set(ln,Wt);let cn=Qn(ie.type);ln&&cn&&P.set(ln,cn);}let C=new Map;if(Array.isArray(s?.plans))for(let ie of s.plans){let Wt=Qn(ie.unique_handle),ln=Wt;ln&&Wt&&C.set(ln,Wt);}let I=(Qn(r.traits.plan_handle,r.plan)??"").toLowerCase(),E=new Map;if(Array.isArray(s?.segments))for(let ie of s.segments){let Wt=Qn(ie.handle),ln=Qn(ie.dimension_id);Wt&&ln&&E.set(Wt,ln);}let j=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((ie,Wt)=>{let ln=Qn(ie.id)??`entitlement_rule_${Wt}`,cn=Qn(ie.entitlement_id),_t=cn?T.get(cn):void 0,On=Array.isArray(ie.targets)?ie.targets.filter(Qe=>Qe.kind==="plan").map(Qe=>Qe.id):[],or=On.map(Qe=>C.get(Qe)??Qe),Dt=Array.isArray(ie.segment_ids)?ie.segment_ids.filter(Qe=>typeof Qe=="string"):[],mn=Qn(ie.kind),Kn=!I||On.some(Qe=>Qe.toLowerCase()===I),jr=V1(Dt,o,E),un=Kn&&jr,an=_t?a[_t]:cn?a[cn]:void 0,Sr=un?an?.status??"unknown":"unknown",xn;if(un)switch(mn){case "feature":xn=ie.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let Qe=Qn(ie.tier_name);xn=Qe?`unlocks ${Qe} tier`:"unlocks capability tier";break}case "usage_limit":{let Qe=typeof ie.limit_value=="number"?ie.limit_value:void 0,gr=Qn(ie.unit)??"",ba=Qn(ie.period_scope)??"",Ct=ba?` / ${ba.replace("per_","")}`:"";xn=Qe!=null?`sets limit to ${Qe.toLocaleString()}${gr?` ${gr}`:""}${Ct}`:"sets usage limit";break}case "credits":{let Qe=ie.allowance_value,gr=typeof Qe=="number"?Qe:void 0,ba=Qn(ie.unit)??"credits",Ct=Qn(ie.reset_period)??"",Or=Ct?` / ${Ct.replace("per_","")}`:"";xn=gr!=null?`grants ${gr.toLocaleString()} ${ba}${Or}`:"grants credit allowance";break}case "seat":{let Qe=ie.included_count,gr=typeof Qe=="number"?Qe:void 0;xn=gr!=null?`includes ${gr} seat${gr===1?"":"s"}`:"includes seats";break}default:if(cn){let Qe=P.get(cn);Qe==="feature"?xn="grants access":Qe&&(xn=`${Qe.replace(/_/g," ")} entitlement`);}break}return {ruleId:ln,...cn?{entitlementId:cn}:{},..._t?{entitlementHandle:_t}:{},...mn?{kind:mn}:{},planScopes:or,planIds:On,...Dt.length>0?{segmentIds:Dt}:{},matchesPlan:Kn,matchesSegment:jr,matched:un,outcome:Sr,...xn?{outcomeDescription:xn}:{},...an?.reason?{reason:an.reason}:{}}}):[],ne=Qn(n.output?.output_id),G=this.placements.get(e.placementId),pe=Qn(G?.name)??"",Re=Array.isArray(G?.metadata?.surface_template_ids)?G.metadata.surface_template_ids:[],J=[],H=new Set;if(Array.isArray(s?.placements))for(let ie of s.placements){if(!ie||typeof ie!="object")continue;let Wt=Qn(ie.id)??"",ln=Qn(ie.name)??"";if(H.has(Wt))continue;let cn=Qn(n.output?.rule_id);if(cn&&Wt===cn){H.add(Wt),J.push(ie);continue}if(pe&&(Wt===pe||ln===pe||Wt===`pl_${pe}`||ln===`pl_${pe}`)){H.add(Wt),J.push(ie);continue}Re.length>0&&(ie.payloads??[]).some(or=>(or.surfaces??[]).some(mn=>{let Kn=Qn(mn.template_id);return Kn?Re.includes(Kn):false}))&&(H.add(Wt),J.push(ie));}let Ze=J.flatMap(ie=>(ie.payloads??[]).map(ln=>{let cn=ln.target,_t=cn?.plan_ids??[],On=_t.map(Sr=>C.get(Sr)??Sr),or=cn?.segment_chips??[],mn=(ln.surfaces??[]).map(Sr=>Qn(Sr.template_id)).filter(Sr=>typeof Sr=="string"),Kn=_t.length===0||!I||_t.some(Sr=>Sr.toLowerCase()===I),jr=or.length===0||or.some(Sr=>o.has(Sr)),un="active",an=un==="active"&&Kn&&jr;return {payloadId:String(ln.id??""),placementId:String(ie.id??""),placementName:String(ie.name??""),status:un,planIds:_t,planScopes:On,segmentChips:or,surfaceTemplateIds:mn,matchesPlan:Kn,matchesSegment:jr,eligible:an,selected:!!ne&&ne===String(ln.id??"")}})),Yt=n.output?this.extractPlacementCapPolicies(n.output).flatMap(ie=>ie.rules.length===0&&ie.cooldownMs===void 0?[]:ie.rules.length===0?[{count:0,period:"session",cooldownMs:ie.cooldownMs}]:ie.rules.map(Wt=>({count:Wt.count,period:Wt.period,...ie.cooldownMs!==void 0?{cooldownMs:ie.cooldownMs}:{}}))):[],pr={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:Yt};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:i,entitlements:a,segments:_,entitlementRules:j,eligiblePayloads:Ze,placementRules:pr}}usageThresholdForEntitlement(e){return Pd(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return Bd(e,n,a=>this.usageThresholdForEntitlement(a)).map(a=>this.emitTrigger(a.type,{entitlement_handle:a.entitlement_handle,current_usage:a.current_usage,usage_limit:a.usage_limit,usage_percent:a.usage_percent,threshold:a.threshold}))}deriveTrialTriggerStage(e){return zd(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=wr();return this.persistentStore.setItem(e,r),r}catch{return wr()}}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(fo())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(ES,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...i)=>{r(...i),n();});let a=e.replaceState.bind(e);e.replaceState=((...i)=>{a(...i),n();}),window.addEventListener("popstate",n),window.addEventListener(ES,i=>{let s=i.detail;this.onRouteChange({path:s.path,title:s.title,tags:s.tags});}),e.__rtPatched=true;}mergeUserContext(e,n="setUserContext"){let r="plan"in e?{...e,plan:this.rejectLegacyPlanId(n,e.plan)}:e;return Ld(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:jl(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?Lu():{},...this.pageContext},r=String(n.url||"").trim();if(!r)e.push({code:"invalid_page_context_url",reason:"Page context URL is missing."});else try{new URL(r);}catch{e.push({code:"invalid_page_context_url",reason:"Page context URL is not a valid absolute URL.",details:{value:r}});}return n.tags&&!Array.isArray(n.tags)&&e.push({code:"invalid_page_context_tags",reason:"Page tags must be an array of strings."}),e}collectPayloadIssues(e){let n=[];if(!he(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=DS(e),a=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof a=="string"&&a.trim()&&(this.placements.has(a)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:a}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(ps,{source_event_type:e,warning_count:n.length,warning_codes:n.map(a=>a.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:he(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?Lu():{},...this.pageContext},a=r.url||(Br()?window.location.href:""),i=(()=>{try{return new URL(a).pathname}catch{return Br()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:a,path:i,page_title:r.title||(Br()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:jl(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===RS?{}:{...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&&Br()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&Br()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=em.RESOLUTION_DIAGNOSTIC_SESSION_CAP||(this.emittedResolutionDiagnostics.add(n),this.postAnonMeta("resolution_failure",e));}reportSdkError(e,n){if(this.diagnosticTelemetryActive()&&!this.emittedSdkErrors.has(e)&&!(this.emittedSdkErrors.size>=em.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",n?{reason:e,message:n}:{reason:e});}catch{}}}async emitSdkInitTelemetry(){this.anonymousTelemetryActive()&&await this.emitAnonMeta("sdk_init",{config_shape:this.computeConfigShape()});}computeConfigShape(){let e=this.getConfiguredExportedConfig();if(!e)return;let n=e.placements??[],r=n.reduce((a,i)=>a+(i.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:n.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,n={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,n));}async postAnonMeta(e,n={}){try{let r=this.getConfiguredExportedConfig(),a=r?.format_version!=null?String(r.format_version):void 0,i=a?`${this.tenantId}:${a}`:this.tenantId,s=(await kS(i)).slice(0,64),_={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:wr(),config_hash_id:s,sdk_version:Gy,runtime_mode:this.runtimeMode,...a?{bundle_version:a}:{},...n.config_shape?{config_shape:n.config_shape}:{},...n.message?{message:n.message.slice(0,500)}:{},...n.reason?{reason:n.reason.slice(0,64)}:{},...n.placement_handle?{placement_handle:n.placement_handle.slice(0,64)}:{},...n.slot_handle?{slot_handle:n.slot_handle.slice(0,64)}:{},...n.surface?{surface:n.surface.slice(0,64)}:{},...n.plan_handle?{plan_handle:n.plan_handle.slice(0,64)}:{},...n.entitlement_handle?{entitlement_handle:n.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",C1),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(_),keepalive:!0});}catch{}}showAnonTelemetryNoticeOnce(){this.anonTelemetryNoticeShown||(this.anonTelemetryNoticeShown=true,console.info("[RevTurbine] Sending anonymous SDK telemetry (config-shape counts and SDK version only \u2014 no user data or PII). Disable it by setting `anonymousTelemetry: false` in your initRevTurbine() options."));}async sendEvents(e){if(e.length===0)return;if(!this.telemetryConsented()){this.telemetryCounters.dropped+=e.length;return}let n=0,r=e.map(C=>{let R=x_(C);return n+=R.redactions,R.value}),a=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&a&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let i=wr(),s=this.getConfiguredExportedConfig()?.playbook_version_id,o=r.map(C=>{let R=C.user_id||C.anonymous_id,I=sp(this.userContext.account_id||R),E=ip({level:C.level,message:C.message,path:C.path,url:C.url,page_title:C.page_title,session_id:C.session_id,anonymous_id:C.anonymous_id,tags:C.tags,traits:C.identity.traits??null,payload:C.properties,source:k1});return n+=E.redactions+(I.redacted?1:0),{environment_id:this.environmentId,user_id:R,account_id:I.value,event_name:Ol(C.type).slice(0,120),event_ts:C.event_time,properties:JSON.stringify(E.value),...O1(C.properties),...F1(C.properties),origin:U1(C.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:vh.next(),request_id:wr(),tenant_id:C.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let _=this.endpointFor("ingestEvents",I1),T={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":i},body:JSON.stringify({events:o}),keepalive:true};(await bh(()=>fetch(_,T))).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 a of r)try{Promise.resolve(a.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,n,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let a=Ol(e),i=this.toEventEnvelope(a,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],o=[i];if(s.length>0&&o.push(this.buildValidationWarningEvent(a,s,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:a,properties:i}=op(e,n);await this.capture(a,i,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!Br()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let a=he(n)?n:{};await this.capture(e,{semantic:true,payload:a},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),a={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},i=await this.fetchUserContext(a.id||""),s=new Set(r.segmentIds||[]),o=new Set(i.segmentIds||[]),_=Array.from(o).filter(P=>!s.has(P)),T=Array.from(s).filter(P=>!o.has(P));for(let P of _)await this.emitSemantic("segment_enrolled",{segment_id:P,user_id:a.id??null});for(let P of T)await this.emitSemantic("segment_unenrolled",{segment_id:P,user_id:a.id??null});if(n){let P=r.usage||{},C={...P,...this.usageBalances},R=this.evaluateUsageThresholdCrossings(P,C);await Promise.all(R);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(RS,{context_fields:n});}setUserContext(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom),this.notifyUserContextChanged();}onUserContextChange(e){return this.userContextListeners.add(e),()=>{this.userContextListeners.delete(e);}}notifyUserContextChanged(){for(let e of [...this.userContextListeners])try{e();}catch{}}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(Lu());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let n=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,a=Date.now()+r;for(let i of e.decisions??[]){if(!i.output)continue;let s=[this.tenantId,i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),o=he(i.output?.content)?i.output.content:{};this.decisionCache.set(s,{value:{placementId:i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",requestId:e.request_id,visible:i.visible,decisionSource:"cache",reasonCodes:i.reason_codes??[],content:ds(String(o.header??""),String(o.body??""),String(o.cta_label??"")),output:i.output},expiresAt:a});}if(this.persistDecisionCache(),e.entitlements)for(let[i,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(i,{status:s.status,allowed:s.allowed,reason:s.reason,current_tier:s.current_tier,placement:s.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(n,this.userContext);}async generatePlacementId(e){return kd({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:kS,randomHex:kh})}async registerPlacement(e){let n=String(e.placementScopeKey||e.name||"").trim();return this.registerSurfaceSlot({id:n||String(e.name||"surface_slot").trim(),name:e.name,metadata:he(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=wr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),a=L1(e.placementScopeKey||e.id||e.name),i={...he(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},s={name:e.name,slug:a,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:i},o={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},_=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:o,body:JSON.stringify(s)});if(_.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(_.status!==404)throw new Error(`surface_slot_upsert_failed:${_.status}`);let T=await fetch(r,{method:"POST",headers:o,body:JSON.stringify(s)});if(!T.ok)throw new Error(`surface_slot_create_failed:${T.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=Ys(this.currentPathname()),r=String(e?.id||"").trim(),a=String(e?.name||r).trim(),i=[];r||i.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),a||i.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!he(e.metadata)&&i.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:a||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),o={id:s,route:n,name:a||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...he(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},_=this.placements.get(s),T=_?this.stableStringify(_):null,P=this.stableStringify(o);return (!_||T!==P)&&(this.placements.set(s,o),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(o),i.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",i,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:a||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;let n=(Array.isArray(e)?e:[]).map(i=>z1(i)).filter(i=>i!==null);if(n.length===0)return;let r=wr(),a=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:n})});if(!a.ok)throw new Error(`persist_placement_types_failed:${a.status}`)}stableStringify(e){return Ri(e)}decisionCacheKey(e,n){return wd({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 u_({tenantId:this.tenantId,...e})}readDecisionCache(e){let n=this.decisionCache.get(e);return n?n.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...n.value,decisionSource:"cache"}:null}writeDecisionCache(e,n,r){let a=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:a,value:n}),this.persistDecisionCache();}suppressionForState(e){return d_(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return Cm(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,a=this.placementCapKey(e),i=this.presentationCapsByKey.get(a),s=qd(e,a,i,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(a,s.updatedState),s.allowed&&this.persistPresentationCaps()),{allowed:s.allowed,reason:s.reason}}gateDecisionByCaps(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:n.tick??true});if(r.allowed)return e;let a=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],a],suppressionReason:a}}normalizeDecisionFromResponse(e,n,r,a){return Od(e,n,r,a)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=wr();if(this.isDisabledByProviderFailure())return this.disabledDecisionForPlacement(e.placementId,n?.name);if(!n)return this.emitResolutionFailure({reason:"placement_not_registered",placement_handle:e.placementId}),{placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["placement_not_registered"],suppressionReason:"placement_not_registered",content:ds("Placement not found","Register the placement before requesting a decision.","Register placement")};let a=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),i=this.suppressionForState(this.interactionState.get(a));if(i.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:ds(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,o=await this.localRuntime?.getContext?.(),_=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(o||_)&&(s=this.stableStringify({legacyCtx:o??{},providerCtx:_??{}}));let T=this.decisionCacheKey(e,s),P=this.readDecisionCache(T);if(P)return this.gateDecisionByCaps(P,{tick:false});{let R=this.getOrBuildPlacementResolver();if(R){let E={...o,..._?{__providers:_}:{}},j=this.gateDecisionByCaps(await R(e,n,E));return this.localDecisionsByPlacementId.set(e.placementId,j),this.writeDecisionCache(T,j,e.ttlMs),this.persistLocalRuntimeState(),j}let I=this.localDecisionsByPlacementId.get(e.placementId);if(I){let E=this.gateDecisionByCaps({...I,decisionSource:"fallback"});return this.writeDecisionCache(T,E,e.ttlMs),this.persistLocalRuntimeState(),E}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let C={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:ds(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),C}async preloadPlacementDecisions(e){let n=new Map;for(let r of e)n.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(n.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let a=await this.getPlacementDecision(r),i=this.decisionCacheKey(r);this.writeDecisionCache(i,a,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let i=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(i);if(s){s.placementIds.push(r.placementId);continue}n.set(i,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of n.values()){let a=e.filter(i=>r.placementIds.includes(i.placementId)&&i.userId===r.userId);await Promise.allSettled(a.map(i=>this.getPlacementDecision(i)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),a=e.metadata??{},s={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let o=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let o=Number(a.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(o)&&o>0?o*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let o=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(s.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let o=Number(a.suppress_duration_ms);s.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.defaultDismissCooldownMs);}this.interactionState.set(n,s),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let n=e.map(r=>({user_id:r.userId,placement_id:r.placementId,treatment_id:r.treatmentId,interaction_type:r.interactionType,interaction_at:r.interactionAt,surface_slot_id:r.surfaceSlotId,surface_template_id:r.surfaceTemplateId,payload_id:r.payloadId,...r.experimentId?{experiment_id:r.experimentId}:{},...r.variantKey?{variant_key:r.variantKey}:{},metadata:r.metadata??{},tenant_id:this.tenantId,...this.testTraffic?{test:true}:{}}));try{(await fetch(this.endpointFor("touchpointTransition",E1),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":wr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",R1),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":wr()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let n={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(n),this.interactionQueue.push(n),this.flushInteractionQueue();let r=n.placementId,a=n.treatmentId,i=n.metadata??{},s=Number(i.cooldown_ms),o=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,a,void 0,void 0,o);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,a);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,a,void 0,void 0,o);else if(n.interactionType==="suppress"){let P=Number(i.suppress_duration_ms);this.impressionHistory.recordSuppression(r,a,void 0,i,Number.isFinite(P)&&P>0?P:void 0);}let _=n.metadata??{},T=typeof _.decision_id=="string"?_.decision_id:null;await this.emitSemantic("placement_interaction",{user_id:n.userId,placement_id:n.placementId,treatment_id:n.treatmentId??null,interaction_type:n.interactionType,interaction_at:n.interactionAt??null,...T?{decision_id:T}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:_},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),a=wr();if(this.isDisabledByProviderFailure()){let o=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:a,decisionSource:"fallback",content:o.content}}if(this.isLocalOnlyMode()){let o=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:a,decisionSource:o?"remote":"fallback",content:ds(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:a,decisionSource:"fallback",content:ds("Placement not found","Register the placement before requesting content.","Register placement")};let i=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:i});return {placementId:e,requestId:a,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??ds(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}rejectLegacyPlanId(e,n){if(!he(n)||!("id"in n))return n;let{id:r,...a}=n,i=typeof a.handle=="string"&&a.handle.trim()!=="",s=`${e}:plan.id`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.error(`[RevTurbine] ${e}() received a removed \`plan.id\` key and dropped it. Plan identity is the unique_handle: pass { plan: { handle: "\u2026" } } (or the flat plan_handle). `+(i?"A handle was also supplied, so plan matching is unaffected.":"No handle was supplied, so this user has NO plan for entitlement-rule matching and plan-targeted rules will not match."));try{this.capture(ps,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:i?"1":"0"});}catch{}}return a}reportUnrecognizedContextKeys(e,n,r,a){if(n.length===0)return;let i=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(i))return;this.reportedUnrecognizedContextKeys.add(i);let s=a?` ${a}`:"";console.warn(`[RevTurbine] ${e}() dropped unrecognized user-context key(s): ${n.join(", ")}. Recognized keys: ${r.join(", ")}. Pass free-form values under { custom: { \u2026 } }.${s}`);try{this.capture(ps,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=xm(e,wr);return n&&he(e)&&typeof e.decision_id!="string"&&this.capture(ps,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return bd(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!jS.has(r))return this.capture(ps,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;wr();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 i=this.localPlacementForConfig(e);return i&&this.applyPlacementCapsIfNeeded(i).allowed?i:null}async checkEntitlement(e,n){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let i=this.localRuntime?.resolvers?.checkEntitlement;if(i){let s=await i(e,n);return this.localEntitlementsByHandle.set(e,s),this.persistLocalRuntimeState(),s}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let a=this.localEntitlementsByHandle.get(e);return a||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"entitlement_not_in_playbook":"config_unavailable"})}updateUsage(e){let n=this.userContext,r=ii(e);this.reportUnusableUsageValues(e,r),this.reportUnmatchedUsageKeys(Object.keys(r)),this.usageBalances={...this.usageBalances,...r},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true),this.notifyUserContextChanged();}reportUnusableUsageValues(e,n){let r=Object.keys(e).filter(i=>!(i in n));if(r.length===0)return;let a=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(a)){this.reportedUnrecognizedContextKeys.add(a),console.warn(`[RevTurbine] updateUsage() dropped usage value(s) it could not read: ${r.join(", ")}. A usage balance is a number \u2014 \`update({ usage: { <entitlement_handle>: 42 } })\` \u2014 or an entry object carrying a numeric \`amount\`. The reported balance was NOT applied, so any limit on these entitlements is still evaluating the previous value.`);try{this.capture(ps,{reason:"updateUsage received unusable usage value(s)",unrecognized_keys:r.join(",")});}catch{}}}reportUnmatchedUsageKeys(e){if(e.length===0)return;let r=this.getConfiguredExportedConfig()?.entitlements;if(!Array.isArray(r)||r.length===0)return;let a=new Set(r.map(o=>he(o)&&typeof o.unique_handle=="string"?o.unique_handle:null).filter(o=>o!==null));if(a.size===0)return;let i=e.filter(o=>!a.has(o));if(i.length===0)return;let s=`usage:unmatched:${[...i].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.warn(`[RevTurbine] updateUsage() received usage key(s) matching no entitlement in the Playbook: ${i.join(", ")}. The balance is stored but nothing reads it, so any limit on the entitlement you meant is still evaluating zero consumed. Usage keys are entitlement unique_handles \u2014 check for a typo. Known handles: ${[...a].sort().join(", ")}.`);try{this.capture(ps,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:i.join(",")});}catch{}}}getUserContext(){let e=this.userContext.id||this.anonymousId,n=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:n,updated_at:n,account_id:this.userContext.account_id,email:this.userContext.email,plan:this.userContext.plan,usage:this.userContext.usage??{},entitlements:this.userContext.entitlements??{},custom:Object.fromEntries(Object.entries(this.userContext.custom??{}).filter(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)),personalization:Object.fromEntries(Object.entries(this.userContext.personalization??{}).filter(([,r])=>typeof r=="string"||typeof r=="number")),derived_computed_at:null}}async fetchUserContext(e){let n=wr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let i=await r(e);return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}let a=this.localUserContextsByUserId.get(e);return a||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},body:JSON.stringify({request_id:n,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let a=await r.json(),i={userId:e,segmentIds:Array.isArray(a.segment_ids)?a.segment_ids.filter(s=>typeof s=="string"):[],traits:he(a.traits)?a.traits:{},plan:typeof a.plan=="string"?a.plan:void 0,usage:he(a.usage)?Object.fromEntries(Object.entries(a.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new tc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e),this.clientContextToken||(this.clientContextToken=await this.mintClientSessionToken());let n=this.clientContextToken;if(n)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${n}`}});if(!r.ok){if(r.status===401&&(this.clientContextToken=void 0,this.clientSessionProvider&&!this.retriedClientContextAfterMint)){let _=await this.mintClientSessionToken();if(_){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(_);}finally{this.retriedClientContextAfterMint=!1;}}}return}let a=await r.json(),i=this.mapClientSafeContext(a);if(Object.keys(i).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:i.trial?{in_trial:i.trial.in_trial,state:i.trial.state,days_remaining:i.trial.days_remaining}:void 0,payment_at_risk:i.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:i.trial??null,plan_handle:i.plan_handle??null,plan:i.plan??null})),o=await Nd(s)+`:${i.payment_at_risk===!0?1:0}`;if(o===this.lastServerContextHash)return;this.lastServerContextHash=o,this.applyServerContextPatch(i);}catch{}}async mintClientSessionToken(){if(this.clientSessionProvider)try{let e=await this.clientSessionProvider();return typeof e=="string"&&e.length>0?e:void 0}catch{return}}autoFetchClientContext(){this.clientSessionProvider&&this.fetchClientContext().catch(()=>{});}mapClientSafeContext(e){let n={},a=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);a&&(n.trial={in_trial:a==="active"||a==="running_out",state:a,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let i=e.plan?.handle;return typeof i=="string"&&i.length>0&&(n.plan_handle=i,n.plan={handle:i,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:i}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e,"update"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,n,r,a){await this.impressionHistory.recordImpression(e,n,r,a);}async recordDismissal(e,n,r,a,i){await this.impressionHistory.recordDismissal(e,n,r,a,i);}async recordClickThru(e,n,r,a,i){await this.impressionHistory.recordClickThru(e,n,r,a,i);}async recordConversion(e,n,r,a){await this.impressionHistory.recordConversion(e,n,r,a);}async getTrialStatus(){let e=wr();if(this.isLocalOnlyMode()){let n=this.localRuntime?.resolvers?.getTrialStatus;if(n){let r=await n();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let n=await fetch(this.endpointFor("trialStatus","/api/sdk/trial-status"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify({request_id:e,tenant_id:this.tenantId,user_id:this.userContext.id})});if(!n.ok)return {in_trial:!1};let r=await n.json(),a=this.validateTrialStatusShape(r);return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),a=n?.nowIso??new Date().toISOString(),{trial:i}=gm({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:a,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=i??{in_trial:false};return this.localTrialStatus=s,await this.evaluateTrialLifecycleTriggers(s),this.persistLocalRuntimeState(),s}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:he(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],a=e.includeProviderHandlers??true,i=Vu(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...i};if(a&&this.providerRegistry.has("cta"))try{let P=await this.providerRegistry.resolveAll();he(P.cta)&&he(P.cta.handlers)&&Object.assign(s,P.cta.handlers);}catch{}let o=[],_=0;for(let P of r){let C=he(P)?P:{},R=typeof C.action_type=="string"?C.action_type.trim():"";if(!R){o.push({actionType:"unknown",reason:"missing_action_type",...typeof C.id=="string"?{uiPathId:C.id}:{},...typeof C.name=="string"?{name:C.name}:{}});continue}if(typeof s[R]=="function"){_+=1;continue}o.push({actionType:R,reason:"missing_resolver",...typeof C.id=="string"?{uiPathId:C.id}:{},...typeof C.name=="string"?{name:C.name}:{}});}let T={valid:o.length===0,totalUiPaths:r.length,resolvedUiPaths:_,issues:o};if(!T.valid&&e.throwOnMissing){let P=T.issues.filter(R=>R.reason==="missing_resolver").map(R=>R.actionType),C=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 ${T.issues.length} issue(s).${C}`)}return T}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=he(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],a=0;for(let o of n){let T=(he(o)?o:{}).action_type,P=typeof T=="string"?T.trim():"";if(!P){a+=1;continue}typeof this.uiPathResolvers[P]!="function"&&r.push(P);}if(a===0&&r.length===0)return;let i=Array.from(new Set(r)),s=[];i.length>0&&s.push(`missing resolvers for action_type: ${i.join(", ")}`),a>0&&s.push(`content_ui_paths with missing action_type: ${a}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${s.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,n=3600){await this.emitSemantic("placement_interaction",{interaction_type:"remind_me_later",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),remind_after_seconds:n},{immediate:false});}async convert(e){await this.emitSemantic("placement_interaction",{interaction_type:"cta_completed",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async emitTrigger(e,n,r){await this.emitSemantic(e,{...n,user_id:this.userContext.id??null,plan_handle:this.userContext.personalization?.plan_name??null,triggered_at:new Date().toISOString(),source:"sdk"},r);}async trackEvent(e,n){await this.capture(e,n??{});}identify(e,n){if(typeof e!="string"||e.trim()===""){console.error("[RevTurbine] identify() requires a non-empty user id; call ignored. Pass your stable internal user id.");return}y1.test(e)&&b1(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,a=he(n)?n:{};he(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(i=>!_1.has(i)),wS),a.usage&&(this.usageBalances={...this.usageBalances,...ii(a.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:a.account_id,email:a.email,plan_handle:typeof a.plan_handle=="string"&&a.plan_handle.trim()!==""?a.plan_handle.trim():void 0,plan:a.plan,usage:a.usage,entitlements:a.entitlements,custom:a.custom,personalization:a.personalization},"identify"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.clientSessionProvider&&(this.clientContextToken=void 0,this.autoFetchClientContext()),this.emitObservedContextFields(a.custom),this.notifyUserContextChanged();}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?AS():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate(),this.notifyUserContextChanged();}can(e,n){return this.checkEntitlement(e,n)}async gate(e,n,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let a=await this.checkEntitlement(e,r);return a.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:a}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:a.reason??null},{immediate:false}),{ran:false,entitlement:a})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},a=Object.entries(r).filter(([i])=>CS.has(i));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(i=>!CS.has(i)),OS,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),a.length>0&&this.setUserContext(Object.fromEntries(a)),n&&this.updateUsage(n);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${Br()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};k(em,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var Rh=em;function Ah(t){let e=B1(t),n=new Rh(e);if(!e.provider)return n;let r=(P,C)=>{try{return typeof P=="function"?P(e):P}catch(R){return console.warn(`[RevTurbine] Provider factory failed at chain index ${C}.`,R),null}},a=[r(e.provider,0),...(e.providerFallbacks??[]).map((P,C)=>r(P,C+1))].filter(P=>P!==null);if(a.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let i=async(P,C,R)=>{let I=[];for(let E=0;E<a.length;E+=1){let ne=a[E][P];if(ne){I.push(E);try{return await ne(...C)}catch(G){let pe=a.slice(E+1).some(Re=>typeof Re[P]=="function");console.warn(E===0&&pe?`[RevTurbine] Primary provider ${P} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${P} failed at chain index ${E}.`,G);}}}return I.length===0||n.disableForProviderFailure(`provider_${P}_chain_failed`),R()},s=n.getPlacement.bind(n),o=n.checkEntitlement.bind(n),_=n.persistPlacementTypes.bind(n),T=n.identify.bind(n);return n.getPlacement=async P=>i("getPlacement",[P],()=>s(P)),n.checkEntitlement=async(P,C)=>i("checkEntitlement",[P,C],()=>o(P,C)),n.persistPlacementTypes=async P=>i("persistPlacementTypes",[P],()=>_(P)),n.identify=(P,C)=>{let R=0;for(let I=0;I<a.length;I+=1){let E=a[I];if(E.identify){R+=1;try{E.identify(P,C);return}catch(j){let ne=a.slice(I+1).some(G=>typeof G.identify=="function");console.warn(I===0&&ne?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${I}.`,j);}}}if(R>0){n.disableForProviderFailure("provider_identify_chain_failed"),T(P,C);return}T(P,C);},n}var Nu={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function Ph(t){return typeof t=="string"&&t.trim().length>0}function B1(t){return zu(t.localRuntime)!==void 0?{...t,tenantId:Ph(t.tenantId)?t.tenantId:Nu.tenantId,apiKey:Ph(t.apiKey)?t.apiKey:Nu.apiKey,endpoint:Ph(t.endpoint)?t.endpoint:Nu.endpoint,mode:t.mode??Nu.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function z1(t){if(!he(t))return null;let e=(_,T)=>String(_??"").trim().slice(0,T),n=e(t.id,256),r=e(t.label,256),a=e(t.description,1024),i=e(t.surfaceType,64);if(!n||!r||!a||!jS.has(i))return null;let s=Number(t.priority),o=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:a,surfaceType:i,priority:o}}typeof window<"u"&&(window.RevTurbine={init:Ah});var ti=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 gl(t){return t?{id:t.id??ti.id,name:t.name??ti.name,version:t.version??ti.version,colors:{...ti.colors,...t.colors},typography:{...ti.typography,...t.typography},shape:{...ti.shape,...t.shape},shadows:{...ti.shadows,...t.shadows}}:{...ti}}var K1="revturbine:theme";function wh(t){return `${K1}:${t}`}function $1(t,e){try{let n=e.getItem(wh(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function H1(t,e,n){try{n.setItem(wh(t),JSON.stringify(e));}catch{}}function G1(t,e){let n=e??Zi();try{n.removeItem(wh(t));}catch{}}async function jh(t,e){let{tenantId:n,endpoint:r,apiKey:a,base:i}=t,s=t.storage??Zi(),o=$1(n,s),_=gl({...i,...o});return t.onOverride?.(o),Y1(r,n,a).then(T=>{T&&(o?.version&&T.version===o.version||(H1(n,T,s),t.onOverride?.(T),e?.(gl({...i,...T}))));}).catch(()=>{}),_}async function Y1(t,e,n){let r=t.replace(/\/$/,""),a=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,i=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":a}});if(!i.ok)return null;let s=await i.json();return typeof s!="object"||s===null?null:s}var Ku=class{constructor(e,n){k(this,"sdk");k(this,"options");k(this,"listeners",new Set);k(this,"_placementId","");k(this,"_decision",null);k(this,"_isLoading",false);k(this,"_error","");k(this,"_impressionTracked",false);k(this,"_loadSeq",0);k(this,"_rendered",false);k(this,"_exposed",false);k(this,"_exposureBasis",null);k(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 a=this.slotContext();this.emitSlotEvent("slot_evaluated",a),this.emitSlotEvent(n,a);}emitSlotError(e){let n=`${this._placementId}|slot_error`;this._lastSlotKey!==n&&(this._lastSlotKey=n,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,n){try{this.sdk.emitSemantic(e,n,{immediate:!1});}catch{}}emitPlacementOutcome(e){let n=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:n?.output?.surface?.slot_id??null,payload_id:n?.output?.output_id??null,decision_id:n?.output?.decision_id??null,decision_source:n?.decisionSource??null,outcome:"cta_completed",cta_target:e},{immediate:!1});}catch{}}get visible(){return !!this._decision?.visible}get content(){return this._decision?.content??null}get decision(){return this._decision}get placementId(){return this._placementId}async load(){let e=this.options,n=e.userId||this.sdk.getUserContext().user_id;if(!n)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let a=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:n,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=a,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let i=this.exposureMode;return i==="legacy_resolution"?this.fireImpression("legacy_resolution"):i==="viewport"&&!Sh.supported&&this.fireImpression("render_fallback"),a}catch(a){return r===this._loadSeq&&(this._error=a instanceof Error?a.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,n){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let a=this._decision?.output?.decision_id??null;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:a?{...n,decision_id:a}:n}),(e==="dismiss"||e==="remind_me_later"||e==="cta_completed")&&this._decision&&(this._decision={...this._decision,visible:false},this.notify());}notify(){for(let e of this.listeners)e();}};function tm(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var $u=class{constructor(e,n){k(this,"sdk");k(this,"options");k(this,"listeners",new Set);k(this,"_isLoading",false);k(this,"_error",null);k(this,"_result",null);k(this,"_gatedPlacement",null);k(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:tm(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return tm(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:a}=this.options;this._isLoading=true,this._error=null,this.notify();try{let i=await this.sdk.checkEntitlement(e,n);if(this._result=i,this.emitGateEvaluated(e,i),!r||!tm(i))this._gatedPlacement=null;else if(i.placement)this._gatedPlacement=i.placement;else {let s=await this.sdk.getPlacement({...a,entitlementHandle:e});this._gatedPlacement=s;}return i}catch(i){return this._error=i instanceof Error?i.message:String(i),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,n){let r=`${e}|${n.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:n.status,gated:tm(n),reason:n.reason??null,limit:n.limit??null,used:n.used??null,remaining:n.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}watchUserContext(){let e=this.sdk.onUserContextChange;return typeof e!="function"?()=>{}:e.call(this.sdk,()=>{this._result===null&&!this._isLoading||this.check();})}notify(){for(let e of this.listeners)e();}},Hu=class{constructor(e,n){k(this,"sdk");k(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 Ku(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 $u(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 W1(t){let{bootstrapPlacements:e,...n}=t,r=n,a=Ah(r),i=r.user;i&&typeof i=="object"&&i.id&&a.identify(i.id,i);let s=ti,_=zu(r.localRuntime)?.theme;if(_&&typeof _=="object"?s=gl(_):s=await jh({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let T=a.getUserContext().user_id,P=[];for(let C of e){let R=await a.registerPlacement(C.placement),I=C.userId||T;I&&P.push({placementId:R,userId:I,contextMode:C.contextMode,overrides:C.overrides,traits:C.traits,ttlMs:C.ttlMs});}P.length>0&&await a.bootstrapPlacementDecisions(P);}return new Hu(a,s)}var Z1=/\{[^{}]+\}/g,Q1=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function J1(){return Math.random().toString(36).slice(2,11)}function LS(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:a,bodySerializer:i,pathSerializer:s,headers:o,requestInitExt:_=void 0,...T}={...t};_=Q1()?_:void 0,e=FS(e);let P=[];async function C(R,I){let{baseUrl:E,fetch:j=r,Request:ne=n,headers:G,params:pe={},parseAs:Re="json",querySerializer:J,bodySerializer:H=i??eq,pathSerializer:Ze,body:Yt,middleware:pr=[],...ie}=I||{},Wt=e;E&&(Wt=FS(E)??e);let ln=typeof a=="function"?a:US(a);J&&(ln=typeof J=="function"?J:US({...typeof a=="object"?a:{},...J}));let cn=Ze||s||X1,_t=Yt===void 0?void 0:H(Yt,MS(o,G,pe.header)),On=MS(_t===void 0||_t instanceof FormData?{}:{"Content-Type":"application/json"},o,G,pe.header),or=[...P,...pr],Dt={redirect:"follow",...T,...ie,body:_t,headers:On},mn,Kn,jr=new ne(tq(R,{baseUrl:Wt,params:pe,querySerializer:ln,pathSerializer:cn}),Dt),un;for(let xn in ie)xn in jr||(jr[xn]=ie[xn]);if(or.length){mn=J1(),Kn=Object.freeze({baseUrl:Wt,fetch:j,parseAs:Re,querySerializer:ln,bodySerializer:H,pathSerializer:cn});for(let xn of or)if(xn&&typeof xn=="object"&&typeof xn.onRequest=="function"){let Qe=await xn.onRequest({request:jr,schemaPath:R,params:pe,options:Kn,id:mn});if(Qe)if(Qe instanceof ne)jr=Qe;else if(Qe instanceof Response){un=Qe;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!un){try{un=await j(jr,_);}catch(xn){let Qe=xn;if(or.length)for(let gr=or.length-1;gr>=0;gr--){let ba=or[gr];if(ba&&typeof ba=="object"&&typeof ba.onError=="function"){let Ct=await ba.onError({request:jr,error:Qe,schemaPath:R,params:pe,options:Kn,id:mn});if(Ct){if(Ct instanceof Response){Qe=void 0,un=Ct;break}if(Ct instanceof Error){Qe=Ct;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(Qe)throw Qe}if(or.length)for(let xn=or.length-1;xn>=0;xn--){let Qe=or[xn];if(Qe&&typeof Qe=="object"&&typeof Qe.onResponse=="function"){let gr=await Qe.onResponse({request:jr,response:un,schemaPath:R,params:pe,options:Kn,id:mn});if(gr){if(!(gr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");un=gr;}}}}let an=un.headers.get("Content-Length");if(un.status===204||jr.method==="HEAD"||an==="0"&&!un.headers.get("Transfer-Encoding")?.includes("chunked"))return un.ok?{data:void 0,response:un}:{error:void 0,response:un};if(un.ok)return {data:await(async()=>{if(Re==="stream")return un.body;if(Re==="json"&&!an){let Qe=await un.text();return Qe?JSON.parse(Qe):void 0}return await un[Re]()})(),response:un};let Sr=await un.text();try{Sr=JSON.parse(Sr);}catch{}return {error:Sr,response:un}}return {request(R,I,E){return C(I,{...E,method:R.toUpperCase()})},GET(R,I){return C(R,{...I,method:"GET"})},PUT(R,I){return C(R,{...I,method:"PUT"})},POST(R,I){return C(R,{...I,method:"POST"})},DELETE(R,I){return C(R,{...I,method:"DELETE"})},OPTIONS(R,I){return C(R,{...I,method:"OPTIONS"})},HEAD(R,I){return C(R,{...I,method:"HEAD"})},PATCH(R,I){return C(R,{...I,method:"PATCH"})},TRACE(R,I){return C(R,{...I,method:"TRACE"})},use(...R){for(let I of R)if(I){if(typeof I!="object"||!("onRequest"in I||"onResponse"in I||"onError"in I))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");P.push(I);}},eject(...R){for(let I of R){let E=P.indexOf(I);E!==-1&&P.splice(E,1);}}}}function Gu(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 NS(t,e,n){if(!e||typeof e!="object")return "";let r=[],a={simple:",",label:".",matrix:";"}[n.style]||"&";if(n.style!=="deepObject"&&n.explode===false){for(let o in e)r.push(o,n.allowReserved===true?e[o]:encodeURIComponent(e[o]));let s=r.join(",");switch(n.style){case "form":return `${t}=${s}`;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return s}}for(let s in e){let o=n.style==="deepObject"?`${t}[${s}]`:s;r.push(Gu(o,e[s],n));}let i=r.join(a);return n.style==="label"||n.style==="matrix"?`${a}${i}`:i}function VS(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let i={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(o=>encodeURIComponent(o))).join(i);switch(n.style){case "simple":return s;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return `${t}=${s}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",a=[];for(let i of e)n.style==="simple"||n.style==="label"?a.push(n.allowReserved===true?i:encodeURIComponent(i)):a.push(Gu(t,i,n));return n.style==="label"||n.style==="matrix"?`${r}${a.join(r)}`:a.join(r)}function US(t){return function(n){let r=[];if(n&&typeof n=="object")for(let a in n){let i=n[a];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;r.push(VS(a,i,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof i=="object"){r.push(NS(a,i,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Gu(a,i,t));}}return r.join("&")}}function X1(t,e){let n=t;for(let r of t.match(Z1)??[]){let a=r.substring(1,r.length-1),i=false,s="simple";if(a.endsWith("*")&&(i=true,a=a.substring(0,a.length-1)),a.startsWith(".")?(s="label",a=a.substring(1)):a.startsWith(";")&&(s="matrix",a=a.substring(1)),!e||e[a]===void 0||e[a]===null)continue;let o=e[a];if(Array.isArray(o)){n=n.replace(r,VS(a,o,{style:s,explode:i}));continue}if(typeof o=="object"){n=n.replace(r,NS(a,o,{style:s,explode:i}));continue}if(s==="matrix"){n=n.replace(r,`;${Gu(a,o)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(o)}`:encodeURIComponent(o));}return n}function eq(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 tq(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 MS(...t){let e=new Headers;for(let n of t){if(!n||typeof n!="object")continue;let r=n instanceof Headers?n.entries():Object.entries(n);for(let[a,i]of r)if(i===null)e.delete(a);else if(Array.isArray(i))for(let s of i)e.append(a,s);else i!==void 0&&e.set(a,i);}return e}function FS(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function nq(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),LS({baseUrl:t.baseUrl,headers:e})}var Oh=class extends Error{constructor(n,r){super(r);k(this,"status",n);this.name="ApiError";}};var qh=class extends f_{constructor(n){let{exportedConfig:r,environmentId:a,...i}=n,s=Ei(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:a??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let o=Zi(n.storage),_=new Mm({storage:o,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...i,exportedConfig:s,storage:o,impressionStore:_});k(this,"_hydratePromise");let T=n.autoHydrate??true;this._hydratePromise=T?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function rq(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 BS(t){return rq(t)/4294967296}function aq(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 zS(t,e,n){if(!t)return;let r=aq(n.variants);if(r.length===0)return;let{exposure:a}=n;if(a!==void 0&&(!(a>0)||a<1&&BS(`${t}:${e}:exposure`)>=a))return;let i=r.reduce((o,[,_])=>o+_,0),s=BS(`${t}:${e}:variant`)*i;for(let[o,_]of r)if(s-=_,s<0)return o;return r[r.length-1][0]}function iq(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let a={};for(let[i,s]of Object.entries(e)){let o=zS(r,i,s);o!==void 0&&(a[i]=o);}return {assignments:a}}}}var sq=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function oq(t){let e={};for(let[n,r]of Object.entries(t.properties))e[sq.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 Dh=class{constructor(e){k(this,"name");k(this,"handler");k(this,"transform");k(this,"filterSet");this.name=e.name??"analytics",this.handler=e.handler,this.transform=e.transform,this.filterSet=e.filter?new Set(e.filter):void 0;}consume(e){for(let n of e){if(this.filterSet&&!this.filterSet.has(n.type))continue;let r=n.type,a=oq(n);if(this.transform){let i=this.transform(r,a);if(i===null)continue;r=i.eventName,a=i.properties;}try{this.handler(r,a);}catch{}}}};function KS(t){let e=new Dh(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function $S(t){let{posthog:e,filter:n,transform:r,name:a}=t;return KS({name:a??"posthog",filter:n,transform:r,handler:(i,s)=>{e.capture(i,s);}})}function lq(t){let{posthog:e,filter:n,transform:r,name:a,syncIdentity:i=false,syncAccountGroup:s=false,mirrorNavigation:o=false}=t,_=a??"posthog",T=$S({posthog:e,filter:n,transform:r,name:_}),P=null,C=null,R=I=>{try{if(i){let E=I.user_id;E&&E!==P?(e.identify?.(E,I.identity.traits),P=E):!E&&P!==null&&(e.reset?.(),P=null);}if(s){let E=I.identity.traits.account_id;typeof E=="string"&&E&&E!==C&&(e.group?.("account",E),C=E);}o&&I.type==="page_view"&&e.capture("$pageview",{$current_url:I.url});}catch{}};return {domain:"events",async resolve(){let E=(await T.resolve())?.consumers??[];return {consumers:[{name:_,consume(ne){for(let G of ne)R(G);for(let G of E)G.consume(ne);}}]}}}}var cq=["banner_placement"],mq=["banner_placement","in_page_card"],uq=["toast_message"],dq=["modal_overlay"];var pq=["banner_placement","in_page_card","usage_counter","button"],gq=["modal_overlay","inline_gate_message"],hq=["toast_message","modal_overlay","banner_placement"];function hl(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var Yu=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);k(this,"status",n);k(this,"requestId",r);this.name="RevTurbineClientSessionError";}},Wu=class{constructor(e){k(this,"tenantId");k(this,"apiKey");k(this,"endpoint");k(this,"defaultTtlSeconds");k(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=hl(),r=e.anonymousId??hl(),[a,i,s,o,_]=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)]),T={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:a};return i&&Object.keys(i).length>0&&(T.entitlements=i),s&&(T.trial_status=s),o&&(T.user_context=o),_&&(T.theme=_),T}async getPlacement(e,n,r){let a=hl(),i={request_id:a,user_id:e,traits:r??{},slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle};try{let s=await this.apiCall(a,"/api/decision-api/v1/decide-context",i);if(!s.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 s.json(),_=o.decision,T=_?.visible??!1,P={slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:T};return T&&_&&(P.output=_),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 a=hl(),i={request_id:a,user_id:e,entitlement_handle:n,...r??{}};try{let s=await this.apiCall(a,"/api/decision-api/v1/check-entitlement",i);if(!s.ok)return {status:"denied",allowed:!1,reason:"api_error"};let o=await s.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=hl();return this.fetchTrialStatus(n,e)}async createClientSession(e){let n=hl(),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 Yu(r.status,n);let a=await r.json();return {client_token:a.client_token,expires_at:a.expires_at}}async apiCall(e,n,r){return this.fetchFn(`${this.endpoint}${n}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify(r)})}async apiGet(e,n){return this.fetchFn(`${this.endpoint}${n}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}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 a={request_id:e,user_id:n.userId,traits:n.traits??{},usage_balances:n.usageBalances??{},page:n.page??{},placements:r.map(i=>({slot_id:i.slotId,entitlement_handle:i.entitlementHandle,plan_handle:i.planHandle,placement_handle:i.placementHandle}))};try{let i=await this.apiCall(e,"/api/decision-api/v1/bootstrap-context",a);return i.ok?(await i.json()).decisions.map((o,_)=>{let T=r[_]??{},P=o.result.decision?.visible??!1,C={slot_id:T.slotId,entitlement_handle:T.entitlementHandle,plan_handle:T.planHandle,placement_handle:T.placementHandle,visible:P};return P&&o.result.decision&&(C.output=o.result.decision),o.result.reason_codes&&(C.reason_codes=o.result.reason_codes),C}):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(i=>({slot_id:i.slotId,entitlement_handle:i.entitlementHandle,plan_handle:i.planHandle,placement_handle:i.placementHandle,visible:false,reason_codes:["network_error"]}))}}async evaluateEntitlements(e,n){let r=n.entitlementHandles??[];if(r.length===0)return;let a={},i=await Promise.allSettled(r.map(async s=>{let o=await this.checkEntitlement(n.userId,s);return {handle:s,result:o}}));for(let s of i)s.status==="fulfilled"&&(a[s.value.handle]=s.value.result);return a}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 a=await r.json();return {in_trial:a.in_trial??!1,...a.trial_type!==void 0?{trial_type:a.trial_type}:{},...a.plan_handle!==void 0?{plan_handle:a.plan_handle}:{},...a.trial_limit_type!==void 0?{trial_limit_type:a.trial_limit_type}:{},...a.progress_percent!==void 0?{progress_percent:a.progress_percent}:{},...a.day_number!==void 0?{day_number:a.day_number}:{},...a.days_remaining!==void 0?{days_remaining:a.days_remaining}:{},...a.usage_entitlement_handle!==void 0?{usage_entitlement_handle:a.usage_entitlement_handle}:{},...a.usage_consumed!==void 0?{usage_consumed:a.usage_consumed}:{},...a.usage_remaining!==void 0?{usage_remaining:a.usage_remaining}:{},...a.usage_limit!==void 0?{usage_limit:a.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 a=await r.json();return {segments:a.segments,traits:a.traits,usage_balances:a.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 _q=/^[a-z0-9._]{1,100}$/,gs={Persisted:"persisted",Transient:"transient"},Ti={Internal:"internal",External:"external"},ni={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},yq="readOnly";function ya(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[yq]===true||(e[n]=r);}return z.object(e)}function Zr(t){let e=ya(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(_q)}):e}var {Unrestricted:ca}=ni,{Transient:ma,Persisted:bq}=gs,{Internal:Ks,External:Bi}=Ti;z.object({page:z.coerce.number().int().min(1).default(1).meta(ca),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ca)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi});var Bn=z.object({created_at:z.string().datetime().meta({...ca,readOnly:true}),updated_at:z.string().datetime().meta({...ca,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi}),jn=z.object({id:z.string().min(1).meta({...ca,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi}),zn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ca,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Ks});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi});var Mh=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":ma,"x-revturbine-schema-exposure":Bi}),GS=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi});var Zu=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi}),YS=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Bi});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Ks});var zi=z.string().min(1).max(200),br=z.string().min(1).max(100),Qu=z.string().max(500).optional(),Ia=z.record(z.string(),z.unknown()).default({}),$s=z.number().int().min(10).max(100).multipleOf(10),Ju=z.string().datetime().nullable().default(null),dr=z.object({environment_id:z.string().min(1).default("production").meta({...ca,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Ks}),xr=z.object({playbook_version_id:z.string().nullable().default(null).meta(ca),is_current:z.boolean().default(true).meta({...ca,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ca,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ca,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ca,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ca,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Ks}),xq=jn.merge(Bn).merge(zn).merge(dr).extend({handle:br.meta({...ca,readOnly:true}),active:z.boolean().default(true).meta({...ca,readOnly:true})});function Qr(t){return xq.meta({id:t,"x-revturbine-schema-persistence":bq,"x-revturbine-schema-exposure":Ks})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ma,"x-revturbine-schema-exposure":Ks});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":ma,"x-revturbine-schema-exposure":Ks});var WS=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":ma,"x-revturbine-schema-exposure":Bi});new Set(Mh.options);var ZS=z.enum(["session","day","week","month"]),QS=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(QS),cap:z.object({count:z.number().int().min(1),period:ZS})});z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var XS={Named:"named",Minted:"minted"},eP="x-revturbine-schema-identity";function ri(t="handle"){return {[eP]:{kind:XS.Named,handleField:t}}}function ai(t="handle"){return {[eP]:{kind:XS.Minted,handleField:t}}}var _n={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Va={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},Eq="x-revturbine-context",Rq="x-revturbine-in-config",kq="x-revturbine-sdk-input",Aq="x-revturbine-source",wq="x-revturbine-deprecation",jq={[_n.Playbook]:Va.Customer,[_n.Branding]:Va.Customer,[_n.Billing]:Va.Stripe,[_n.Metering]:Va.Customer,[_n.CustomerOperations]:Va.Runtime,[_n.EventIngestion]:Va.Runtime};function Zn(t,e){return {[Eq]:t,[Rq]:e.inConfig??t===_n.Playbook,[kq]:e.sdkInput,[Aq]:e.source??jq[t]}}function Xu(t){return {deprecated:true,[wq]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var nn=t=>z.object({items:z.array(t)}),ar=z.object({error:z.string(),code:z.string(),request_id:z.string()}),q=t=>t,rn=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:Ve}=ni,{Persisted:ed,Transient:hs}=gs,{External:za}=Ti,aP=Zn(_n.Playbook,{sdkInput:true});Zn(_n.Playbook,{inConfig:false,sdkInput:false});var $q=Zn(_n.Playbook,{inConfig:false,sdkInput:true}),Hq=Zn(_n.Playbook,{inConfig:false,sdkInput:false,source:Va.Runtime}),Gq=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var iP=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),sP=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),Yq=z.object({count:z.number().int().positive().meta(Ve),period:sP.meta(Ve)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za});z.object({surface_type:z.string().min(1).meta(Ve),rules:z.array(Yq).meta(Ve),cooldown_ms:z.number().int().nonnegative().optional().meta(Ve)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":ed,"x-revturbine-schema-exposure":za,...ni.Operational,...$q});var Wq=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":hs,"x-revturbine-schema-exposure":za}),_l=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Ve,readOnly:true}),name:zi.meta(Ve),handle:br.meta(Ve),description:Qu.meta(Ve),category:iP.meta(Ve),drag_order_in_category:z.number().int().default(0).meta(Ve),surface_slot_id:z.string().optional().meta(Ve),entitlement_id:z.string().optional().meta(Ve),tier_threshold:z.string().optional().meta(Ve),threshold_percent:$s.optional().meta(Ve),trial_type:z.enum(["free","reverse"]).optional().meta(Ve),trigger_type:z.string().optional().meta(Ve),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ve),days_before_end:z.number().int().min(0).optional().meta(Ve),qualifier:Gq.optional().meta(Ve),activation_window_start:z.string().datetime().optional().meta(Ve),activation_window_end:z.string().datetime().optional().meta(Ve),metadata:Ia.meta(Ve)}).meta({id:"Placement","x-revturbine-schema-persistence":ed,"x-revturbine-schema-exposure":za,...aP,...ri()}),Zq=Qr("PlacementAnchor"),Qq=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),Jq=z.object({code:Qq.meta(Ve),message:z.string().min(1).meta(Ve),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ve)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),tP=_l.extend({warnings:z.array(Jq).optional().meta(Ve)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),Xq=z.object({label:z.string().min(1).max(200).meta(Ve),cta_path_type:Wq.meta(Ve),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ve)}).meta({id:"CtaObject","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":za}),nm=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Ve,readOnly:true}),handle:br.meta({...Ve,readOnly:true}),placement_id:z.string().min(1).meta(Ve),drag_order:z.number().int().default(0).meta(Ve),target_plan_ids:z.array(z.string()).default([]).meta(Ve),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ve),target_segments:z.array(z.string()).default([]).meta(Ve),surface_slot_ids:z.array(z.string()).default([]).meta(Ve),surface_template_id:z.string().min(1).meta(Ve),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ve),cta_list:z.array(Xq).default([]).meta(Ve),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ve),max_period_unit:sP.default("session").meta(Ve),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ve),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ve),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ve),recommendation_plan_override:z.string().optional().meta(Ve)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":ed,"x-revturbine-schema-exposure":za,...aP,...ai()}),eD=Qr("PlacementPayloadAnchor"),tD=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ve),surface_type:Mh.meta(Ve),surface_template_ids:z.array(z.string()).default([]).meta(Ve),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ve),first_seen:z.string().datetime().meta({...Ve,readOnly:true}),last_seen:z.string().datetime().meta({...Ve,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ve),placement_count:z.number().int().min(0).default(0).meta({...Ve,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":ed,"x-revturbine-schema-exposure":za,...Hq,...ri("surface_slot_handle")}),nD=ya(_l),rD=ya(nm);({"/api/placement-anchors":{get:q({operationId:"listPlacementAnchors",requestParams:{query:rn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:nn(Zq)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:q({operationId:"listPlacements",requestParams:{query:rn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:nn(_l)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:q({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Zr(_l)}}},responses:{201:{description:"Created",content:{"application/json":{schema:tP}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:q({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:_l}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:q({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:nD}}},responses:{200:{description:"Updated",content:{"application/json":{schema:tP}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:q({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:q({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:_l}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:q({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:iP,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:q({operationId:"listPlacementPayloadAnchors",requestParams:{query:rn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:nn(eD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:q({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:rn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:nn(nm)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:q({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Zr(nm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:q({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:rD}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nm}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:q({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:q({operationId:"listSurfaceSlots",requestParams:{query:rn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:nn(tD)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var cD="__self__",mD={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},oP={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:cD,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:mD},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 lP=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(lP).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:Ce}=ni,{Persisted:Hh,Transient:va}=gs,{Internal:uP,External:ua}=Ti,dP=Zn(_n.Playbook,{sdkInput:true}),gD=Zn(_n.Playbook,{inConfig:false,sdkInput:false}),pP=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":va,"x-revturbine-schema-exposure":ua}),rd=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),hD=z.enum(GS).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),fD=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),gP=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),Lh=z.object({entitlement_id:z.string().min(1).meta(Ce),entitlement_handle:z.string().min(1).meta(Ce),status:hD.meta(Ce),limit:z.number().optional().meta(Ce),used:z.number().optional().meta(Ce),allocation:rd.optional().meta(Ce),enforcement:gP.optional().meta(Ce),source:fD.optional().meta(Ce),plan_id:z.string().optional().meta(Ce),segment_id:z.string().optional().meta(Ce),seat_type_id:z.string().optional().meta(Ce),rule_id:z.string().optional().meta(Ce)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua,...ni.Operational});z.object({account:z.record(z.string(),Lh).optional().meta(Ce),instance:z.record(z.string(),Lh).optional().meta(Ce),user:z.record(z.string(),Lh).optional().meta(Ce)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua,...ni.Operational});var _D=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),yD=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),hP=z.object({kind:yD.meta(Ce),id:z.string().min(1).meta(Ce)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),vD=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),Pl=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),name:zi.meta(Ce),handle:br.meta(Ce),customer_facing_description:z.string().max(500).optional().meta(Ce),type:Zu.meta(Ce),unit:z.string().max(100).optional().meta(Ce),period_scope:pP.optional().meta(Ce),allocation:rd.optional().meta(Ce),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Ce),sort_order:z.number().int().default(0).meta(Ce),metadata:Ia.meta(Ce)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Hh,"x-revturbine-schema-exposure":ua,...dP,...ri()}),bD=Qr("EntitlementAnchor"),Al=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),handle:br.meta({...Ce,readOnly:true}),entitlement_id:z.string().min(1).meta(Ce),targets:z.array(hP).min(1).meta(Ce),segment_ids:z.array(z.string()).default([]).meta(Ce),visibility:_D.default("public").meta(Ce),period_scope:pP.optional().meta(Ce),instance:z.string().max(100).optional().meta(Ce),reset_period:vD.optional().meta(Ce),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ce),enforcement:gP.optional().meta(Ce),warning_threshold_percent:$s.optional().meta(Ce),overage_price_ref:z.string().optional().meta(Ce),grace_period_hours:z.number().int().min(0).optional().meta(Ce),tier_value:z.string().optional().meta(Ce),rate_value:z.number().optional().meta(Ce),initial_grant:z.number().optional().meta(Ce),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Ce),rollover_enabled:z.boolean().optional().meta(Ce),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Ce),seat_type_id:z.string().optional().meta(Ce),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Ce),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Ce),stripe_metered_price_id:z.string().optional().meta(Ce),enabled:z.boolean().optional().meta(Ce),allocation:rd.optional().meta(Ce),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Ce),amount_cents:z.number().int().optional().meta(Ce),currency:z.string().optional().meta(Ce)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Hh,"x-revturbine-schema-exposure":uP,...dP,...ai()}),xD=Qr("EntitlementRuleAnchor");Al.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var SD=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),PD=z.object({code:SD.meta(Ce),message:z.string().min(1).meta(Ce),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ce)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),Nh=Al.extend({warnings:z.array(PD).optional().meta(Ce)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":va,"x-revturbine-schema-exposure":ua}),Vh=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...Ce,readOnly:true}),rule_id:z.string().min(1).meta(Ce),experiment_id:z.string().min(1).meta(Ce),variant_name:z.string().min(1).max(200).meta(Ce),is_control:z.boolean().default(false).meta(Ce),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Ce)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Hh,"x-revturbine-schema-exposure":uP,...gD,...ai()}),TD=ya(Pl),ID=ya(Al);({"/api/entitlement-anchors":{get:q({operationId:"listEntitlementAnchors",requestParams:{query:rn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:nn(bD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:q({operationId:"listEntitlementRuleAnchors",requestParams:{query:rn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:nn(xD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:q({operationId:"listEntitlements",requestParams:{query:rn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:nn(Pl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:q({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Zr(Pl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:q({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:q({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:TD}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:q({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:q({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:rn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:nn(Al)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:q({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Zr(Al)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:q({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ID}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:q({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:q({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Nh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:q({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:rn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:nn(Vh)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:q({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(Vh)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:rt}=ni,{Persisted:lm,Transient:cm}=gs,{Internal:Ci}=Ti,fP=Zn(_n.Playbook,{sdkInput:true}),_P=Zn(_n.Playbook,{inConfig:false,sdkInput:true}),CD=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":Ci}),Gh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":Ci}),yP=z.object({name:zi.meta(rt),handle:br.meta(rt),plan_id:z.string().nullable().optional().meta(rt),segment_id:z.string().nullable().optional().meta(rt),trial_limit_type:Gh.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:Ia.meta(rt)}),yl=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(yP).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":Ci,...fP,...ri()}),ED=Qr("FreeTrialRuleAnchor"),RD=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":Ci}),vP=z.object({name:zi.meta(rt),handle:br.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:Gh.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:RD.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:Ia.meta(rt)}),vl=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...rt,readOnly:true})}).merge(vP).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":Ci,...fP,...ri()}),kD=Qr("ReverseTrialRuleAnchor"),bP=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":Ci}),xP=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":cm,"x-revturbine-schema-exposure":Ci}),bl=jn.merge(Bn).merge(zn).extend({trial_limit_policy:bP.default("1_per_lifetime").meta(rt),eligibility_scope:xP.default("per_customer").meta(rt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":Ci,..._P}),xl=jn.merge(Bn).merge(zn).extend({trial_limit_policy:bP.default("1_per_lifetime").meta(rt),eligibility_scope:xP.default("per_customer").meta(rt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":Ci,..._P}),td=jn.merge(Bn).merge(zn).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:CD.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:Gh.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:Ju.meta(rt),cancelled_at:Ju.meta(rt),metadata:Ia.meta(rt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":lm,"x-revturbine-schema-exposure":Ci});({"/api/free-trial-rule-anchors":{get:q({operationId:"listFreeTrialRuleAnchors",requestParams:{query:rn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:nn(ED)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:q({operationId:"listFreeTrialRules",requestParams:{query:rn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:nn(yl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:q({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:yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:q({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:yl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:q({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:q({operationId:"listReverseTrialRuleAnchors",requestParams:{query:rn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:nn(kD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:q({operationId:"listReverseTrialRules",requestParams:{query:rn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:nn(vl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:q({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:vl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:q({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:vl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:q({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:q({operationId:"listFreeTrialSettings",requestParams:{query:rn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:nn(bl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:q({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:bl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:q({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:bl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:q({operationId:"listReverseTrialSettings",requestParams:{query:rn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:nn(xl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:q({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:xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:q({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",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:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:q({operationId:"listTrialInstances",requestParams:{query:rn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:nn(td)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:q({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:td}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:q({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:td}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:q({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:td}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Gt,Financial:nd}=ni,{Persisted:mm,Transient:ad}=gs,{External:Ki}=Ti,AD=Zn(_n.Playbook,{sdkInput:true}),wD=Zn(_n.Playbook,{sdkInput:false}),Yh=Zn(_n.Billing,{sdkInput:false}),_s=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":Ki}),um=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":Ki}),id=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":Ki}),Tl=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:zi.meta(Gt),handle:br.meta(Gt),tier_position:z.number().int().min(0).default(0).meta(Gt),sort_order:z.number().int().default(0).meta(Gt),visibility:_s.default("public").meta(Gt),metadata:Ia.meta(Gt)}).meta({id:"Plan","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":Ki,...AD,...ri()}),jD=Qr("PlanAnchor"),Il=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:br.meta({...Gt,readOnly:true}),plan_id:z.string().min(1).meta(Gt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Gt),segment_id:z.string().nullable().default(null).meta(Gt),price_amount:z.number().min(0).meta(nd),pricing_model:um.meta(Gt),visibility:_s.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:id.default("static").meta(Gt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":Ki,...Yh,...ai()}),OD=Qr("PlanVariationAnchor"),Cl=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:zi.meta(Gt),handle:br.meta(Gt),sort_order:z.number().int().default(0).meta(Gt),visibility:_s.default("public").meta(Gt),metadata:Ia.meta(Gt)}).meta({id:"AddOn","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":Ki,...wD,...ri()}),qD=Qr("AddOnAnchor"),El=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:br.meta({...Gt,readOnly:true}),addon_id:z.string().min(1).meta(Gt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(Gt),segment_id:z.string().nullable().default(null).meta(Gt),price_amount:z.number().min(0).meta(nd),pricing_model:um.meta(Gt),visibility:_s.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:id.default("static").meta(Gt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":Ki,...Yh,...ai()}),DD=Qr("AddOnVariationAnchor"),UD=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":Ki}),Rl=jn.merge(Bn).merge(zn).extend({stripe_price_id:z.string().min(1).meta(Gt),stripe_product_id:z.string().min(1).meta(Gt),billing_period:UD.meta(Gt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(nd),currency:YS.meta(nd),pricing_model:um.meta(Gt),nickname:z.string().nullable().default(null).meta(Gt),is_mock:z.boolean().default(false).meta(Gt),last_updated_from_stripe:Ju.meta(Gt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":mm,"x-revturbine-schema-exposure":Ki,...Yh}),MD=ya(Tl),FD=ya(Il),LD=ya(Cl),ND=ya(El),VD=ya(Rl);({"/api/plan-anchors":{get:q({operationId:"listPlanAnchors",requestParams:{query:rn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:nn(jD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:q({operationId:"listPlans",requestParams:{query:rn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:nn(Tl)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:q({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Zr(Tl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Tl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:q({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:Tl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:q({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:MD}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Tl}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:q({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:q({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:q({operationId:"listPlanVariationAnchors",requestParams:{query:rn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:nn(OD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:q({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:rn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:nn(Il)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:q({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Zr(Il)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:q({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:Il}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:q({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:FD}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Il}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:q({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:q({operationId:"listAddOnAnchors",requestParams:{query:rn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:nn(qD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:q({operationId:"listAddOns",requestParams:{query:rn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:nn(Cl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:q({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Zr(Cl)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Cl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:q({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:Cl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:q({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:LD}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Cl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:q({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:q({operationId:"listAddOnVariationAnchors",requestParams:{query:rn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:nn(DD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:q({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:rn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:nn(El)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:q({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Zr(El)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:q({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:q({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:ND}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:q({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:q({operationId:"listStripePrices",requestParams:{query:rn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:nn(Rl)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:q({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Zr(Rl)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Rl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:q({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:Rl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:q({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:VD}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Rl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:q({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:h}=ni,{Persisted:wl,Transient:ot}=gs,{Internal:Ka,External:qt}=Ti,It=Zn(_n.Playbook,{sdkInput:true}),kl=Zn(_n.Playbook,{sdkInput:false}),fs=Zn(_n.Playbook,{inConfig:false,sdkInput:false}),SP=Zn(_n.Playbook,{inConfig:false,sdkInput:true}),Sl=Zn(_n.Playbook,{inConfig:false,sdkInput:true,source:Va.CodeConstant}),Bh=Zn(_n.Playbook,{inConfig:false,sdkInput:true,source:Va.Runtime}),zh=Zn(_n.Playbook,{inConfig:false,sdkInput:false,source:Va.Runtime}),BD=Zn(_n.Billing,{sdkInput:false}),zD=Zn(_n.Metering,{sdkInput:false}),KD=Zn(_n.Branding,{inConfig:true,sdkInput:true}),$D=Zn(_n.Branding,{sdkInput:false}),HD="1.0.0",am=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:zi.meta(h),handle:br.meta(h),description:Qu.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Ia.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...fs,...ri()}),GD=Qr("SeatTypeAnchor"),im=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta(h),label:z.string().min(1).meta(h),description:z.string().nullable().default(null).meta(h),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z.string().nullable().default(null).meta(h),example_value:z.string().nullable().default(null).meta(h),value_map:z.record(z.string(),z.string()).default({}).meta(h),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(h),metadata:Ia.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...fs,...ri()}),YD=Qr("PersonalizationTokenAnchor"),WD=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ka}),Kh=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:WD.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:Ia.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...BD,...ai()});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":ot,"x-revturbine-schema-exposure":qt,...$D});var sm=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({handle:br.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),meter_key:z.string().min(1).max(100).meta(h),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(h),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(h),stripe_meter_id:z.string().nullable().default(null).meta(h),is_active:z.boolean().default(true).meta(h),metadata:Ia.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...zD,...ai()}),cP=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ka}),om=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta({...h,readOnly:true}),entitlement_id:z.string().min(1).meta(h),soft_limit_percent:z.number().min(0).max(100).default(80).meta(h),hard_limit_percent:z.number().min(0).max(100).default(100).meta(h),soft_limit_action:cP.default("warn").meta(h),hard_limit_action:cP.default("block").meta(h),grace_period_hours:z.number().int().min(0).default(0).meta(h),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(h),is_active:z.boolean().default(true).meta(h)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...SP,...ai()}),ZD=Qr("UsageEnforcementSettingsAnchor"),QD=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":ot,"x-revturbine-schema-exposure":Ka}),JD=z.object({id:z.string().min(1).meta(h),group:z.array(QD).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":ot,"x-revturbine-schema-exposure":Ka}),XD=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ka}),PP=z.object({capRules:z.array(JD).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:XD.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ka}),$h=jn.merge(Bn).merge(zn).merge(dr).merge(xr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:br.meta({...h,readOnly:true}),global_frequency_cap:PP.nullable().default(null).meta(h),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z.boolean().default(false).meta(h),suppress_for_trial:z.boolean().default(false).meta(h),allow_stacking:z.boolean().default(false).meta(h),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(h)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":wl,"x-revturbine-schema-exposure":Ka,...SP,...ai()}),eU=Qr("PlacementSettingsAnchor"),tU=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":ot,"x-revturbine-schema-exposure":qt}),nU=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(tU).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":ot,"x-revturbine-schema-exposure":qt,...It}),rU=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:_s.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It}),aU=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:_s.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...kl}),iU=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:um.meta(h),visibility:_s.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:id.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...fs}),sU=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:um.meta(h),visibility:_s.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:id.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...fs}),oU=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":ot,"x-revturbine-schema-exposure":qt,...It}),lU=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":ot,"x-revturbine-schema-exposure":qt,...It}),cU=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:PP.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":ot,"x-revturbine-schema-exposure":qt,...It}),mU=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":ot,"x-revturbine-schema-exposure":qt,...It}),uU=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":ot,"x-revturbine-schema-exposure":qt,...It}),dU=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:Zu.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":ot,"x-revturbine-schema-exposure":qt,...It}),pU=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(hP).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:Zu.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}),...Al.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:rd.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It}),gU=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":ot,"x-revturbine-schema-exposure":qt,...It}),hU=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":ot,"x-revturbine-schema-exposure":qt,...It}),fU=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":ot,"x-revturbine-schema-exposure":qt}),_U=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(fU).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It}),yU=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":ot,"x-revturbine-schema-exposure":qt}),vU=z.object({name:z.string().min(1).meta(h),action_type:yU.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":ot,"x-revturbine-schema-exposure":qt,...It}),bU=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":ot,"x-revturbine-schema-exposure":qt,...It}),xU=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":ot,"x-revturbine-schema-exposure":qt,...It}),mP=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":ot,"x-revturbine-schema-exposure":qt}),SU=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:mP.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:mP})).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":ot,"x-revturbine-schema-exposure":qt,...It}),PU=z.object({label:z.string().meta(h),path:WS.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt}),TP=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(PU).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt}),IP=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":ot,"x-revturbine-schema-exposure":qt}),TU=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":ot,"x-revturbine-schema-exposure":qt}),CP=z.object({max_per_period:TU.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt}),IU=z.object({id:z.string().min(1).meta(h),target:IP.meta(h),surfaces:z.array(TP).meta(h),caps:CP.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":ot,"x-revturbine-schema-exposure":qt}),CU=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:$s}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:$s}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:$s}),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":ot,"x-revturbine-schema-exposure":qt}),EU=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt}),RU=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:EU.meta(h),trigger:CU.meta(h),payloads:z.array(IU).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It}),kU=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:IP.meta(h),caps:CP.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(TP).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":ot,"x-revturbine-schema-exposure":qt,...It}),AU=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":ot,"x-revturbine-schema-exposure":qt,...It}),wU=jn.merge(yP).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...fs}),jU=jn.merge(vP).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...fs}),OU=z.object({plans:z.array(rU).meta({...h,...It}),addons:z.array(aU).optional().meta({...h,...kl}),entitlements:z.array(dU).meta({...h,...It}),entitlement_rules:z.array(pU).meta({...h,...It}),segments:z.array(nU).meta({...h,...It}),content_ui_paths:z.array(vU).meta({...h,...It}),slot_configs:z.array(gU).optional().meta({...h,...It,...Xu({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,...It,...Xu({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,...KD,...Xu({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(hU).optional().meta({...h,...It}),message_blocks:z.array(SU).optional().meta({...h,...It}),placement_payloads:z.array(kU).optional().meta({...h,...It}),placements:z.array(RU).optional().meta({...h,...It}),content_promotions:z.array(bU).optional().meta({...h,...It}),personalization_tokens:z.array(xU).optional().meta({...h,...It}),surface_templates:z.array(_U).optional().meta({...h,...It}),free_trial_rules:z.array(wU).optional().meta({...h,...kl}),reverse_trial_rules:z.array(jU).optional().meta({...h,...kl}),plan_variations:z.array(iU).optional().meta({...h,...kl}),addon_variations:z.array(sU).optional().meta({...h,...kl}),extension_rules:z.array(AU).optional().meta({...h,...It}),seat_types:z.array(oU).optional().meta({...h,...It}),enforcement_defaults:z.array(lU).optional().meta({...h,...It}),placement_settings:z.array(cU).optional().meta({...h,...It}),segment_dimensions:z.array(mU).optional().meta({...h,...It}),meter_bindings:z.array(uU).optional().meta({...h,...It}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...fs}),signal_catalog:z.object({}).strict().optional().meta({...h,...fs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It}),qU=z.object({artifact_type:z.literal("playbook").meta({...h,...Sl,readOnly:true}),format_version:z.literal(HD).meta({...h,...Sl,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Sl}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Bh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...zh,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...zh,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...zh,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Bh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Sl,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Sl,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Sl,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...Bh}),EP=qU.extend(OU.shape).meta({"x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It});function DU(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function RP(t){if(!DU(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(RP,EP).meta({id:"Playbook","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It});z.preprocess(RP,EP.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":qt,...It});({"/api/seat-type-anchors":{get:q({operationId:"listSeatTypeAnchors",requestParams:{query:rn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:nn(GD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:q({operationId:"listSeatTypes",requestParams:{query:rn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:nn(am)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:q({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Zr(am)}}},responses:{201:{description:"Created",content:{"application/json":{schema:am}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:q({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:am.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:am}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:q({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:q({operationId:"listPersonalizationTokenAnchors",requestParams:{query:rn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:nn(YD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:q({operationId:"listPersonalizationTokens",requestParams:{query:rn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:nn(im)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:q({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Zr(im)}}},responses:{201:{description:"Created",content:{"application/json":{schema:im}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:q({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:im.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:im}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:q({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:q({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ya(Kh)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Kh}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:q({operationId:"listMeteringConfigs",requestParams:{query:rn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:nn(sm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:q({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Zr(sm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sm}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:q({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:sm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:sm}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:q({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:q({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:rn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:nn(ZD)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:q({operationId:"listUsageEnforcementSettings",requestParams:{query:rn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:nn(om)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:q({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Zr(om)}}},responses:{201:{description:"Created",content:{"application/json":{schema:om}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:q({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:om.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:om}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:q({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:q({operationId:"listPlacementSettingsAnchors",requestParams:{query:rn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:nn(eU)}}},default:{description:"Error response",content:{"application/json":{schema:ar}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:q({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ya($h)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:$h}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var MU=["web-client","server"],FU=z.enum(MU),LU=["method","meta","component"],NU=z.enum(LU),VU=["ts","python","java","csharp","rust"];z.enum(VU);var BU=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(),zU=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:NU,appliesTo:z.array(FU).min(1),composes:z.string().min(1).optional(),perLanguage:BU.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"]}),KU=z.object({version:z.number().int().positive(),functions:z.array(zU).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});KU.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 $U=[{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 HU(){let t=[];for(let[e,n]of Object.entries(oP))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function GU(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(GU([...HU(),...$U]));
|
|
2
|
-
export{
|
|
1
|
+
import {z as z$1}from'zod';var hP=Object.defineProperty;var fP=(t,e,n)=>e in t?hP(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var k=(t,e,n)=>fP(t,typeof e!="symbol"?e+"":e,n);function _P(){try{return "production"}catch{return}}function yP(){try{return typeof process<"u"}catch{return false}}function gs(){let t=_P();if(t!==void 0)return t!=="production";if(yP())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var lm="1.0.0",Lh=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],vP=["slot_configs","content_overrides"];function bP(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function xP(t,e){if(!gs())return;let n=vP.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 SP(t,e){for(let n of Lh)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function PP(t){return t.artifact_type==="playbook"&&t.format_version===lm&&typeof t.playbook_handle=="string"&&t.playbook_handle.length>0&&(t.playbook_version_id===null||typeof t.playbook_version_id=="string")&&typeof t.tenant_id=="string"&&t.tenant_id.length>0&&typeof t.environment_id=="string"&&t.environment_id.length>0&&Lh.every(e=>Array.isArray(t[e]))}function TP(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 Nh(t,e,n){if(t===void 0)return;if(!bP(t))throw new Error(`Invalid ${e}: expected top-level object`);xP(t,e),SP(t,e);let r="artifact_type"in t||"format_version"in t;if(r&&t.artifact_type!=="playbook")throw new Error(`Invalid ${e}: unsupported "artifact_type"`);if(r&&t.format_version!==lm)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==lm)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let a=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,i=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!a)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!i)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(t.playbook_handle!==void 0&&(typeof t.playbook_handle!="string"||t.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!TP(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:s,change_set_id:u,..._}=t,T=r?t.playbook_version_id??null:u??null,P={..._,artifact_type:"playbook",format_version:lm,playbook_handle:t.playbook_handle??"default",playbook_version_id:T,tenant_id:a,environment_id:i};if(!PP(P))throw new Error(`Invalid ${e}: malformed Playbook header`);return P}function Pi(t,e,n){return Nh(t,e,n)}var td=864e5,IP=75;function Vh(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function CP(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=IP?"running_out":"active"}function EP(t,e,n){let r=Math.max(0,e-t),a=Math.max(0,n-t),i=Math.max(0,e-n),s=Math.max(1,Math.round(r/td)),u=Math.min(s,Math.floor(a/td)),_=Math.max(0,Math.ceil(i/td)),T=Math.min(100,Math.max(0,a/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:u,daysRemaining:_,daysTotal:s,progressPercent:T}}function RP(t,e){let n=Math.max(1,e),r=Math.max(0,t),a=Math.max(0,n-r),i=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:a,usageLimit:n,progressPercent:i}}function cm(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:a,usageBalances:i}=t,s=Date.parse(e.started_at),u=Date.parse(r);if(Number.isNaN(s)||Number.isNaN(u)||e.status==="not_started"||u<s)return;let _=e.trial_limit_type??"time",T=0,P=false,E,R,I,C,j,te;if(_==="usage"){let K=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),We=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof K!="string"||typeof We!="number"||We<1)return;let Gt=i?.[K]??0,cr=RP(Gt,We);T=cr.progressPercent,P=cr.isExpiredByBounds,I=cr.usageConsumed,C=cr.usageRemaining,j=cr.usageLimit,te=K;}else {let K=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(K))return;let We=EP(s,K,u);T=We.progressPercent,P=We.isExpiredByBounds,E=We.dayNumber,R=We.daysRemaining;}let G=Vh(e.status,P),de=CP(G,T),Re;e.rule_type==="reverse_trial"?Re=a:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(Re=n.plan_id);let J=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:G==="active",trial_type:J,...Re!==void 0?{plan_handle:Re}:{},state:de,trial_limit_type:_,progress_percent:T,...E!==void 0?{day_number:E}:{},...R!==void 0?{days_remaining:R}:{},...te!==void 0?{usage_entitlement_handle:te}:{},...I!==void 0?{usage_consumed:I}:{},...C!==void 0?{usage_remaining:C}:{},...j!==void 0?{usage_limit:j}:{}}}function Bh(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let a,i=-1/0;for(let s of t){let u=Date.parse(s.started_at);if(Number.isNaN(u)||r<u)continue;let _=false;if((s.trial_limit_type??"time")==="usage")n&&typeof s.usage_entitlement_handle=="string"&&typeof s.usage_limit_value=="number"&&(_=(n[s.usage_entitlement_handle]??0)>=s.usage_limit_value);else if(s.expires_at){let P=Date.parse(s.expires_at);Number.isNaN(P)||(_=r>=P);}let T=Vh(s.status,_);T!=="active"&&T!=="converted"||u>i&&(a=s,i=u);}return a}function nd(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 rd(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,a=-1/0;for(let i of t){if(i.status!=="active"&&i.status!=="expired"&&i.status!=="converted")continue;let s=Date.parse(i.started_at);Number.isNaN(s)||n<s||s>a&&(r=i,a=s);}return r}function mm(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:a,usageBalances:i,basePlanHandle:s}=t,u=rd(r,a);if(!u)return {trial:void 0,reverseGrants:null};if(u.rule_type==="reverse_trial"){let P=(n??[]).find(I=>I.id===u.rule_id),E=cm({instance:u,...P!==void 0?{rule:P}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),R=P!==void 0?nd(u,P):null;return {trial:E,reverseGrants:R}}let _=(e??[]).find(P=>P.id===u.rule_id);return {trial:cm({instance:u,..._!==void 0?{rule:_}:{},nowIso:a,...s!==void 0?{basePlanHandle:s}:{},...i!==void 0?{usageBalances:i}:{}}),reverseGrants:null}}function pe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function El(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Gn(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function bn(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 Ks(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function ad(t,e){return String(t||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Rl(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 id(t){if(!pe(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 sd(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function zh(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 Kh(t){let e=t,n=pe(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(s=>typeof s=="string"):[];if(r.length>0)return r;let a=pe(t.content)?t.content:{};return Array.isArray(a.__target_plan_ids)?a.__target_plan_ids.filter(s=>typeof s=="string"):[]}function od(t,e){let n=Kh(t);if(n.length===0||!e)return true;let r=zh(e);return r.length===0?true:n.some(a=>{let i=a.toLowerCase();return r.some(s=>i===s||i.endsWith(`_${s}`)||i.includes(s))})}function ld(t,e){if(e.length===0)return null;let n=[...e].sort((a,i)=>a.tier_position!==i.tier_position?a.tier_position-i.tier_position:a.sort_order!==i.sort_order?a.sort_order-i.sort_order:a.source_id.localeCompare(i.source_id)),r=n.findIndex(a=>a.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function $s(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function cd(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function md(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function ti(t){if(!t)return {};let e={};for(let[n,r]of Object.entries(t))pe(r)&&typeof r.amount=="number"?e[n]=r.amount:typeof r=="number"&&(e[n]=r);return e}function um(t){if(typeof t.plan_handle=="string"&&t.plan_handle.trim().length>0)return t.plan_handle.trim();if(typeof t.plan=="string"&&t.plan.trim().length>0)return t.plan.trim();if(pe(t.plan)&&typeof t.plan.handle=="string"&&t.plan.handle.trim().length>0)return t.plan.handle.trim()}function hs(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0&&(n=e.trim()),!n)return;let r=n.toLowerCase();for(let a of t.plans){if(!pe(a))continue;if((typeof a.unique_handle=="string"?a.unique_handle.toLowerCase():"")===r){let s=typeof a.name=="string"?a.name.trim():"";if(s.length>0)return s}}}function dm(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function Bi(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 kl(t){let e=t,n=pe(t.content)?t.content:{};return [bn(e.score),bn(e.ltv_propensity_score),bn(n.score),bn(n.ltv_propensity_score),bn(n.ranking_score)].find(a=>a!==null)??0}function pm(t){let e=t,n=pe(t.content)?t.content:{};return [bn(e.priority),bn(e.placement_priority),bn(n.priority),bn(n.placement_priority)].find(a=>a!==null)??0}function ud(t){let e=pe(t.content)?t.content:{};return [bn(e.usage_percent),bn(e.trial_percent_elapsed),bn(e.threshold_percent)].find(r=>r!==null)??kl(t)}var kP=new Set(["trial_started","trial_ended","trial_converted"]),AP=new Set(["trial_progress","trial_ending"]);function dd(t){let e=pe(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&kP.has(n))return 1;if(n&&AP.has(n))return 3;let r=[bn(e.usage_percent),bn(e.threshold_percent)].find(a=>a!==null);return r!=null&&r>=100?2:3}function Al(t){let e=t,n=pe(t.content)?t.content:{};return [bn(e.server_order),bn(e.order),bn(e.rank),bn(e.order_index),bn(n.server_order),bn(n.order),bn(n.rank),bn(n.order_index)].find(a=>a!==null)??null}function pd(t){let e=pe(t.content)?t.content:{},n=e.template_version;if(typeof n=="string"&&n.trim().length>0)return n.trim();let r=bn(n);if(r!==null)return String(r);let a=e.milestone_version;if(typeof a=="string"&&a.trim().length>0)return a.trim();let i=bn(a);return i!==null?String(i):null}function gd(t){let n=(pe(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(a=>typeof a=="string"?a.trim():bn(a)).filter(a=>a!==null&&a!=="").map(a=>String(a));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=bn(n);return r!==null?[String(r)]:[]}function Ti(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>Ti(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${Ti(r)}`).join(",")}}`}function hd(t){return pe(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 jP=/^[a-z0-9._]{1,100}$/,zi={Persisted:"persisted",Transient:"transient"},ni={Internal:"internal",External:"external"},Va={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},OP="readOnly";function la(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[OP]===true||(e[n]=r);}return z$1.object(e)}function Ur(t){let e=la(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(jP)}):e}var {Unrestricted:Yr}=Va,{Transient:Wr,Persisted:DP}=zi,{Internal:fs,External:Ii}=ni;z$1.object({page:z$1.coerce.number().int().min(1).default(1).meta(Yr),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(Yr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii});var jn=z$1.object({created_at:z$1.string().datetime().meta({...Yr,readOnly:true}),updated_at:z$1.string().datetime().meta({...Yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii}),En=z$1.object({id:z$1.string().min(1).meta({...Yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii}),On=z$1.object({tenant_id:z$1.string().min(1,"tenant_id is required").meta({...Yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":fs});z$1.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii});var fd=z$1.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":Ii}),Hh=["allowed","limited","denied"];z$1.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii});var gm=z$1.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":Ii}),Gh=z$1.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":Ii});z$1.union([z$1.boolean(),z$1.number(),z$1.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":fs});var Ci=z$1.string().min(1).max(200),ur=z$1.string().min(1).max(100),hm=z$1.string().max(500).optional(),_a=z$1.record(z$1.string(),z$1.unknown()).default({}),_s=z$1.number().int().min(10).max(100).multipleOf(10),fm=z$1.string().datetime().nullable().default(null),ar=z$1.object({environment_id:z$1.string().min(1).default("production").meta({...Yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":fs}),dr=z$1.object({playbook_version_id:z$1.string().nullable().default(null).meta(Yr),is_current:z$1.boolean().default(true).meta({...Yr,readOnly:true}),is_deleted:z$1.boolean().default(false).meta({...Yr,readOnly:true}),delete_date:z$1.string().datetime().nullable().default(null).meta({...Yr,readOnly:true}),sequence:z$1.number().int().min(1).default(1).meta({...Yr,readOnly:true}),base_sequence:z$1.number().int().nullable().default(null).meta({...Yr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":fs}),UP=En.merge(jn).merge(On).merge(ar).extend({handle:ur.meta({...Yr,readOnly:true}),active:z$1.boolean().default(true).meta({...Yr,readOnly:true})});function Mr(t){return UP.meta({id:t,"x-revturbine-schema-persistence":DP,"x-revturbine-schema-exposure":fs})}z$1.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Wr,"x-revturbine-schema-exposure":fs});z$1.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":fs});var Yh=z$1.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":Ii}),MP=new Set(fd.options);function _m(t,e){if(!pe(t))return null;let n=typeof t.output_id=="string"?t.output_id:"";if(!n)return null;let r=pe(t.surface)?t.surface:{},a=MP.has(r.type)?r.type:"custom",i=pe(t.cta_path)?t.cta_path:pe(t.ui_path)?t.ui_path:{};return {output_id:n,category:typeof t.category=="string"?t.category:"unknown",surface:{...typeof r.template=="string"?{template:r.template}:{},type:a,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:pe(t.content)?t.content:{},...pe(t.promotion)?{promotion:t.promotion}:{},cta_path:i,ui_path:i,rule_id:typeof t.rule_id=="string"?t.rule_id:"",decision_id:typeof t.decision_id=="string"?t.decision_id:e(),config_version:typeof t.config_version=="string"?t.config_version:"unknown",present_upsell:typeof t.present_upsell=="boolean"?t.present_upsell:false}}var FP="__no_dim__";function Qh(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),a=new Map;for(let i of t){let s=n(i)??FP,u=a.get(s)??[];u.push(i),a.set(s,u);}for(let i of a.values())if(!i.some(s=>r.has(s)))return false;return true}var LP=999999;function NP(t){return t==null||t==="unlimited"||t===LP}function wl(t){return NP(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function VP(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 Jh(t,e,n){return t.map(r=>{let a=r.targets!=null&&r.targets.length>0?r.targets.some(s=>VP(s,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),i=Qh(r.segmentIds,e.segmentIds,s=>n?.[s]);return {rule:r,matchesPlan:a,matchesSegment:i,matched:a&&i}})}function Xh(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return wl(e.limit_value)??0;case "credits":return wl(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return wl(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function ef(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let a of t){let i=e(a);(n===void 0||i>r)&&(n=a,r=i);}return n}function BP(t){return ef(t,e=>Xh(e.rule))?.rule}function _d(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let a=Jh(r,n,t.segmentDimensions);return BP(a.filter(i=>i.matched))}function zP(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 KP(t,e,n){let r=new Map;for(let a of n)typeof a.handle=="string"&&r.set(a.handle,typeof a.dimension_id=="string"?a.dimension_id:void 0);return Qh(zP(t),e,a=>r.get(a))}function Wh(t,e,n){if(!t)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:n};case "block_with_upsell":case "soft_block":return {status:"denied",allowed:false,reason:`${n}_block_with_upsell`};case "degrade":return {status:"limited",allowed:true,reason:`${n}_degraded`};case "allow_overage":return {status:"allowed",allowed:true,reason:`${n}_overage`};default:return {status:"limited",allowed:false,reason:n}}}function jl(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:a,segmentIds:i,usageBalances:s,userUsage:u,trialGrantedEntitlementHandles:_,effectivePlanHandle:T}=t,E=(r.entitlements??[]).find(_t=>typeof _t?.unique_handle=="string"&&_t.unique_handle===e),R=typeof E?.unique_handle=="string"?E.unique_handle:e,I=typeof E?.unique_handle=="string"?E.unique_handle:void 0,C=!!(_&&_.size>0&&(_.has(e)||_.has(R)||I!==void 0&&_.has(I)));if(C&&(T===void 0||T===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let te=String((C&&T?T:a)||"").trim().toLowerCase(),de=(r.plans??[]).find(_t=>typeof _t.unique_handle=="string"&&_t.unique_handle.toLowerCase()===te),Re=typeof de?.unique_handle=="string"?de.unique_handle:te||void 0;if(Re===void 0)return {status:"denied",allowed:false,reason:"no_plan_identity"};let K=(r.entitlement_rules??[]).filter(_t=>!((typeof _t.entitlement_id=="string"?_t.entitlement_id:typeof _t.entitlementId=="string"?_t.entitlementId:"")!==R||!(Array.isArray(_t.targets)?_t.targets.filter(qt=>pe(qt)&&qt.kind==="plan"&&typeof qt.id=="string").map(qt=>qt.id):Array.isArray(_t.plan_ids)?_t.plan_ids.filter(qt=>typeof qt=="string"):Array.isArray(_t.planIds)?_t.planIds.filter(qt=>typeof qt=="string"):[]).includes(Re)||!KP(_t,i,r.segments??[])));if(K.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let We=(()=>{let _t=(r.entitlements??[]).find(An=>An.unique_handle===R);return _t&&typeof _t.type=="string"?_t.type:void 0})(),Gt=_t=>{let An=pe(_t)?_t:{},qt={...pe(An.type_fields)?An.type_fields:pe(An.typeFields)?An.typeFields:{},...An};return typeof qt.kind!="string"&&We&&(qt.kind=We),qt},cr=ef(K,_t=>{let An=Gt(_t);return Xh({kind:typeof An.kind=="string"?An.kind:"",fields:An})})??K[0],ae=Gt(cr);typeof ae.kind=="string"?ae.kind:void 0;let ln=_t=>{let An=u?.[_t];if(pe(An)&&typeof An.amount=="number")return An.amount},cn=n?.used??(Number.isFinite(s[e])?s[e]:void 0)??(Number.isFinite(s[R])?s[R]:void 0)??ln(e)??ln(R)??0;return ym(ae,cn)}function Zh(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function tf(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function ym(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=wl(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?Zh(Wh(e>=r,t.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(n==="credits"){let r=t.allowance_value!==void 0?t.allowance_value:t.allowance,a=r===void 0?void 0:wl(r),i=Number(t.initial_grant),s=a!==void 0&&a>=0?a:Number.isFinite(i)&&i>=0?i:void 0;return s!==void 0&&Number.isFinite(s)?Zh(Wh(e>=s,t.enforcement,"credit_balance_exhausted"),s,e):{status:"allowed",allowed:true}}if(n==="capability_tier"){let r=typeof t.tier_name=="string"?t.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function yd(t,e,n,r,a=80){let i=e.get(t);if(i)return i;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let u=Number(r[t]);if(u>0)return {limit:u,warningPercent:a}}return null}var $P=0;function HP(){return `core_${Date.now()}_${++$P}`}function nf(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var vd=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=HP(),n=this.placements.get(t.placementId);if(this.interactionTracker){let i=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(i.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:nf(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let a={__providers:await this.registry.resolveAll()};if(t.traits&&(a.traits=t.traits),this.placementResolver){let i=await this.placementResolver(t,n,a);if(i.visible&&i.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let s=this.capEnforcer.enforce(i.output);if(!s.allowed)return {...i,visible:false,reasonCodes:[...i.reasonCodes,s.reason??"suppressed_by_cap"],suppressionReason:s.reason}}return i}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:nf("No resolver","No placement resolver configured.","")}}async evaluateBatch(t){return Promise.all(t.map(e=>this.evaluate(e)))}async checkEntitlement(t,e){let n=await this.registry.resolveAll();return this.deriveEntitlementResult(t,n,e)}trackInteraction(t){this.interactionTracker?.track(t);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(t,e,n){let r=this.options.defaultEntitlementPolicy??"allow",a=e.entitlements;if(!a)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let i=a.entries[t];if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let s=a.usage?.[t];if(e.rules){let u=_d(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(u){let _={kind:u.kind,...u.fields};if(tf(_.kind))return ym(_,n?.used??s?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return s&&n?.used!==void 0&&s.limit>0&&n.used>=s.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:s.limit,used:n.used,remaining:Math.max(0,s.limit-n.used)}:{status:i.status,allowed:i.status==="allowed",reason:i.reason,limit:s?.limit,used:s?.used,remaining:s?.remaining}}};var rf=["high","medium","low"];function Ol(t,e){return t==="active"?rf.includes(e):t===e}var GP="activity_level";function af(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),a=t.value,i=t.field===GP;switch(t.operator){case "eq":return i?Ol(a,r):r===a;case "neq":return i?!Ol(a,r):r!==a;case "gt":return Number(r)>Number(a);case "lt":return Number(r)<Number(a);case "gte":return Number(r)>=Number(a);case "lte":return Number(r)<=Number(a);case "contains":return r.includes(a);case "in":{let s=a.split(",").map(u=>u.trim());return i?s.some(u=>Ol(u,r)):s.includes(r)}default:return false}}function ql(t,e,n={}){return t.filter(r=>{let a=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(n,r.experiment_id))return false;if(!a)return true}else if(!a)return false;return r.predicates.every(i=>af(i,e))}).map(r=>r.handle)}function sf(t){let e={};for(let n of t)n.experiment_id&&(e[n.handle]=n.experiment_id);return e}function of(t,e,n={}){for(let r of e){let a=t[r];if(!a)continue;let i=n[a];if(typeof i=="string")return {experiment_id:a,variant_key:i}}}function bd(t,e){let n=String(t.field||""),r=String(t.operator||""),a=String(t.value||""),i=e[n],s=typeof i=="string"||typeof i=="number"||typeof i=="boolean"?i:null,u=af(t,e);return {field:n,operator:r,expected:a,actual:s,matched:u}}function vm(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Dl(t){let e=2166136261;for(let a=0;a<t.length;a+=1)e^=t.charCodeAt(a),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let n=new Uint8Array(8),r=new DataView(n.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),vm(n)}var xd={async sha256Base64Url(t){return Dl(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 lf=z$1.enum(["session","day","week","month"]),cf=z$1.object({kind:z$1.enum(["template","slot"]),id:z$1.string(),label:z$1.string().optional()});z$1.object({id:z$1.string(),group:z$1.array(cf),cap:z$1.object({count:z$1.number().int().min(1),period:lf})});function YP(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 uf(t,e){return `${t}:${e}`}function Ul(t){let{now:e}=t;if(t.sessionCooldownMinutes!=null&&t.sessionCooldownMinutes>0&&t.lastSessionPresentationAt!=null&&e-t.lastSessionPresentationAt<t.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(t.rules&&t.candidate){let n=t.candidate,r=t.counters??new Map;for(let a of t.rules){if(!a.group.some(_=>_.kind==="template"?_.id===n.templateId:_.kind==="slot"?_.id===n.slotId:false))continue;let s=uf(a.id,a.cap.period);if((r.get(s)??0)>=a.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:a.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:a}=t.perPayload;if(a!=null&&Number.isFinite(a)&&a>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let i of n)for(let s of i.rules){let u=YP(s.period,e);if(r.filter(T=>T>=u&&T<=e).length>=s.count)return {allowed:false,reason:`suppressed_by_payload_cap_${s.period}`}}}return {allowed:true}}z$1.object({target_plan_ids:z$1.array(z$1.string()).default([]),target_billing_periods:z$1.array(z$1.string()).default([]),category:z$1.string().optional()});function Sd(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 df={Named:"named",Minted:"minted"},pf="x-revturbine-schema-identity";function Ba(t="handle"){return {[pf]:{kind:df.Named,handleField:t}}}function za(t="handle"){return {[pf]:{kind:df.Minted,handleField:t}}}var pn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Sa={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},ZP="x-revturbine-context",QP="x-revturbine-in-config",JP="x-revturbine-sdk-input",XP="x-revturbine-source",eT="x-revturbine-deprecation",tT={[pn.Playbook]:Sa.Customer,[pn.Branding]:Sa.Customer,[pn.Billing]:Sa.Stripe,[pn.Metering]:Sa.Customer,[pn.CustomerOperations]:Sa.Runtime,[pn.EventIngestion]:Sa.Runtime};function Ln(t,e){return {[ZP]:t,[QP]:e.inConfig??t===pn.Playbook,[JP]:e.sdkInput,[XP]:e.source??tT[t]}}function bm(t){return {deprecated:true,[eT]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Xt=t=>z$1.object({items:z$1.array(t)}),Yn=z$1.object({error:z$1.string(),code:z$1.string(),request_id:z$1.string()}),O=t=>t,en=z$1.object({page:z$1.number().int().min(1).default(1).optional(),per_page:z$1.number().int().min(1).max(100).default(25).optional(),sort:z$1.string().optional(),order:z$1.enum(["asc","desc"]).default("asc").optional(),include_deleted:z$1.boolean().default(false).optional()});async function Td(t,e){let n=Ks(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 Dl(r).slice(0,22)}function Id(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function Cd(t){let e=Ti({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:Ks(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${Dl(e)}`}function bf(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let a=r.surface.template;if(!a)continue;let i=gd(r);if(i.length!==0)for(let s of t){if(s.output_id===r.output_id||s.surface.template!==a)continue;let u=pd(s);u&&i.includes(u)&&e.add(s.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let a=n.get(r.surface.template)??[];a.push(r),n.set(r.surface.template,a);}for(let r of n.values()){if(r.length<=1)continue;let a=r.map(s=>{let u=pe(s.content)?s.content:{};return {output:s,order:bn(u.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(s=>Number.isFinite(s.order));if(a.length<=1)continue;let i=a.reduce((s,u)=>u.order>s.order?u:s);for(let s of a)s.output.output_id!==i.output.output_id&&e.add(s.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function gf(t){let n=(pe(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function nT(t,e,n){if(n===1){let r=t.surface.slot_id,a=e.surface.slot_id;if(typeof r=="string"&&r&&typeof a=="string"&&a)return {leftKey:r,rightKey:a}}else if(n===0){let r=gf(t),a=gf(e);if(r&&a)return {leftKey:r,rightKey:a}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function xm(t){if(t.length<=1)return t;let e=new Set;for(let n=0;n<t.length;n+=1)for(let r=n+1;r<t.length;r+=1){let a=t[n],i=t[r];if(a.surface.type!==i.surface.type)continue;let s=Bi(a.category),u=Bi(i.category);if(s!==u){s<u?e.add(i.output_id):e.add(a.output_id);continue}if(s===0||s===1){let{leftKey:_,rightKey:T}=nT(a,i,s);_===T&&e.add(i.output_id);}}return t.filter(n=>!e.has(n.output_id))}function Ed(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(_=>Bi(_.category)===1)),r.length===0)return null;let a=bf(r);if(a.length===0)return null;let i=a.some(_=>Al(_)!==null),s=i?a:xm(a);return s.length===0?null:[...s].sort((_,T)=>{if(i){let j=Al(_),te=Al(T);if(j!==null&&te!==null&&j!==te)return j-te;if(j!==null&&te===null)return -1;if(j===null&&te!==null)return 1}let P=Bi(_.category),E=Bi(T.category),R=P-E;if(R!==0)return R;if(P===2){let j=dd(_)-dd(T);if(j!==0)return j;let te=ud(T)-ud(_);if(te!==0)return te}let I=kl(T)-kl(_);if(I!==0)return I;let C=pm(T)-pm(_);return C!==0?C:_.output_id.localeCompare(T.output_id)})[0]??null}function rT(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function Rd(t,e,n,r){let a=pe(r)?r:{},i=pe(a.decision)?a.decision:{},s=pe(a.content)?a.content:pe(i.content)?i.content:{},u=typeof i.visible=="boolean"?i.visible:typeof a.visible=="boolean"?a.visible:true;return {placementId:t,requestId:typeof a.request_id=="string"?a.request_id:e,visible:u,decisionSource:"remote",reasonCodes:Array.isArray(a.reason_codes)?a.reason_codes.filter(_=>typeof _=="string"):[],content:rT(typeof s.title=="string"?s.title:`${n} recommendation`,typeof s.body=="string"?s.body:"Treatment selected by RevTurbine decisioning.",typeof s.cta=="string"?s.cta:"Continue")}}function Sm(t){let e=[],n=[t,t.content,pe(t.content)?t.content.payload:void 0,pe(t.content)?t.content.placement:void 0,pe(t.content)?t.content.surface:void 0];for(let r of n){if(!pe(r))continue;let a=pe(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=id(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,..._!==void 0?{cooldownMs:_}:{}});}return e}function kd(t,e,n,r,a="impression"){if(Bi(t.category)<=1)return {allowed:true};let i=Sm(t);if(i.length===0)return {allowed:true};let s={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(E=>Number.isFinite(E)&&E>0)},u=Ul({perPayload:{policies:i,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!u.allowed)return {allowed:false,reason:u.reason,updatedState:s};let _=[...s.seenAt,r],T=a==="dismiss"?i.map(E=>E.cooldownMs).filter(E=>typeof E=="number"&&Number.isFinite(E)&&E>0):[],P=T.length>0?r+Math.max(...T):void 0;return {allowed:true,updatedState:{seenAt:_,...P!==void 0?{cooldownUntil:P}:{}}}}function Ad(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 Pd(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=Ad(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 xf(t,e){let n=t.filter(s=>s.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(s=>s.trialTrigger?.kind!=="trial_progress"?false:e>=s.trialTrigger.progressPercent);if(r.length===0)return null;let a=r[0];for(let s of r.slice(1)){let u=s.trialTrigger.kind==="trial_progress"?s.trialTrigger.progressPercent:-1,_=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1;(u>_||u===_&&s.entryOrder<a.entryOrder)&&(a=s);}let i=r.filter(s=>s!==a).map(s=>s.ruleId).filter(s=>typeof s=="string"&&s.length>0);return {winner:a,supersededIds:i}}function Sf(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 aT(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 iT(t,e){let n=aT(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 sT(t,e){if(!e)return null;let n=iT(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 hf(t,e){if(!t)return true;let n=sT(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:De}=Va,{Persisted:Pm,Transient:Ki}=zi,{External:Ta}=ni,Pf=Ln(pn.Playbook,{sdkInput:true});Ln(pn.Playbook,{inConfig:false,sdkInput:false});var oT=Ln(pn.Playbook,{inConfig:false,sdkInput:true}),lT=Ln(pn.Playbook,{inConfig:false,sdkInput:false,source:Sa.Runtime}),cT=z$1.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),mT={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function uT(t){return mT[t]??[]}function dT(t,e){return uT(e).includes(t)}var Tf=z$1.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),If=z$1.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),pT=z$1.object({count:z$1.number().int().positive().meta(De),period:If.meta(De)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta});z$1.object({surface_type:z$1.string().min(1).meta(De),rules:z$1.array(pT).meta(De),cooldown_ms:z$1.number().int().nonnegative().optional().meta(De)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ta,...Va.Operational,...oT});var gT=z$1.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":Ki,"x-revturbine-schema-exposure":Ta}),Gs=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...De,readOnly:true}),name:Ci.meta(De),handle:ur.meta(De),description:hm.meta(De),category:Tf.meta(De),drag_order_in_category:z$1.number().int().default(0).meta(De),surface_slot_id:z$1.string().optional().meta(De),entitlement_id:z$1.string().optional().meta(De),tier_threshold:z$1.string().optional().meta(De),threshold_percent:_s.optional().meta(De),trial_type:z$1.enum(["free","reverse"]).optional().meta(De),trigger_type:z$1.string().optional().meta(De),trial_progress_percent:z$1.number().min(0).max(100).optional().meta(De),days_before_end:z$1.number().int().min(0).optional().meta(De),qualifier:cT.optional().meta(De),activation_window_start:z$1.string().datetime().optional().meta(De),activation_window_end:z$1.string().datetime().optional().meta(De),metadata:_a.meta(De)}).meta({id:"Placement","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ta,...Pf,...Ba()}),hT=Mr("PlacementAnchor"),fT=z$1.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),_T=z$1.object({code:fT.meta(De),message:z$1.string().min(1).meta(De),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(De)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),ff=Gs.extend({warnings:z$1.array(_T).optional().meta(De)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),yT=z$1.object({label:z$1.string().min(1).max(200).meta(De),cta_path_type:gT.meta(De),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(De)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Ta}),Fl=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...De,readOnly:true}),handle:ur.meta({...De,readOnly:true}),placement_id:z$1.string().min(1).meta(De),drag_order:z$1.number().int().default(0).meta(De),target_plan_ids:z$1.array(z$1.string()).default([]).meta(De),target_plan_billing_cadences:z$1.array(z$1.string()).default([]).meta(De),target_segments:z$1.array(z$1.string()).default([]).meta(De),surface_slot_ids:z$1.array(z$1.string()).default([]).meta(De),surface_template_id:z$1.string().min(1).meta(De),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(De),cta_list:z$1.array(yT).default([]).meta(De),max_per_period:z$1.number().int().min(0).nullable().default(null).meta(De),max_period_unit:If.default("session").meta(De),cooldown_after_dismiss_days:z$1.number().int().min(0).default(7).meta(De),remind_later_minutes:z$1.number().int().min(0).nullable().default(null).meta(De),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(De),recommendation_plan_override:z$1.string().optional().meta(De)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ta,...Pf,...za()}),vT=Mr("PlacementPayloadAnchor"),bT=En.merge(jn).merge(On).merge(ar).merge(dr).extend({surface_slot_handle:z$1.string().min(1).max(200).meta(De),surface_type:fd.meta(De),surface_template_ids:z$1.array(z$1.string()).default([]).meta(De),surface_slot_category:z$1.enum(["fixed","gated","triggered"]).default("fixed").meta(De),first_seen:z$1.string().datetime().meta({...De,readOnly:true}),last_seen:z$1.string().datetime().meta({...De,readOnly:true}),status:z$1.enum(["active","inactive","new"]).default("new").meta(De),placement_count:z$1.number().int().min(0).default(0).meta({...De,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Pm,"x-revturbine-schema-exposure":Ta,...lT,...Ba("surface_slot_handle")}),xT=la(Gs),ST=la(Fl);({"/api/placement-anchors":{get:O({operationId:"listPlacementAnchors",requestParams:{query:en},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:Xt(hT)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:O({operationId:"listPlacements",requestParams:{query:en},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:Xt(Gs)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:O({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ur(Gs)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ff}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:O({operationId:"getPlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Gs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:O({operationId:"updatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:xT}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ff}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:O({operationId:"deletePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:O({operationId:"duplicatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Gs}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:O({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({category:Tf,ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:O({operationId:"listPlacementPayloadAnchors",requestParams:{query:en},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:Xt(vT)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:O({operationId:"listPlacementPayloads",requestParams:{path:z$1.object({placementId:z$1.string()}),query:en},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:Xt(Fl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:O({operationId:"createPlacementPayload",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ur(Fl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:O({operationId:"updatePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:ST}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:O({operationId:"deletePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.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:O({operationId:"listSurfaceSlots",requestParams:{query:en},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:Xt(bT)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function _f(t,e,n){if(!t)return true;if(!dT(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 yf(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let a=r.indexOf(t.tierThreshold);if(a<0)return false;let i=n?.tiers?.[t.entitlementHandle];return (i?r.indexOf(i):-1)<a}function Tm(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(s=>[s.block_id,s])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],a=Array.isArray(t.promotions)?t.promotions:[],i=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:s=>e.filter(u=>u.surface_template_id===s),getMessageBlockById:s=>n.get(s),getUiPathById:s=>r.find(u=>u.id===s||u.name===s),getPromotionById:s=>a.find(u=>u.id===s||u.name===s),listPersonalizationTokens:()=>i}}function Ll(t,e){let n={...t};for(let r of e){let a=t[r.token];if(a==null||!r.value_map)continue;let i=String(a),s=r.value_map[i];s!==void 0&&(n[r.token]=s);}return n}function wd(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,a)=>{let i=e[a];if(i===void 0){let s=n[a];s&&(i=e[s]);}return i===void 0?r:String(i)})}function jd(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=wd(a,e):n[r]=a;return n}function Cf(t,e){return jd(t,e)}function Od(t,e,n,r,a,i,s){let u=n.filter(R=>R.surface_template_id===t&&R.status==="active");if(u.length===0)return null;let _=new Map(r.map(R=>[R.block_id,R])),T=new Set(e.segmentIds),P=Ll(i,a),E=s?.segmentDimensions;for(let R of u){let I=R.default_message_block_id,C,j=R.ui_path_id,te=R.promotion_id;if(R.segment_content_map){if(E&&Object.keys(E).length>0){let J=new Map;for(let K of R.segment_content_map){let We=K.dimension;if(!We)continue;let Gt=J.get(We)??[];Gt.push(K),J.set(We,Gt);}if(J.size>0){let K=true,We;for(let[,Gt]of J){let cr=Gt.find(ae=>T.has(ae.segment_id));if(!cr){K=false;break}We||(We=cr);}if(K&&We)I=We.message_block_id,C=We.segment_id,We.ui_path_id&&(j=We.ui_path_id),We.promotion_id&&(te=We.promotion_id);else if(!K)continue}else for(let K of R.segment_content_map)if(T.has(K.segment_id)){I=K.message_block_id,C=K.segment_id,K.ui_path_id&&(j=K.ui_path_id),K.promotion_id&&(te=K.promotion_id);break}}else for(let J of R.segment_content_map)if(T.has(J.segment_id)){I=J.message_block_id,C=J.segment_id,J.ui_path_id&&(j=J.ui_path_id),J.promotion_id&&(te=J.promotion_id);break}}let G=_.get(I);if(!G||G.status!=="active")continue;let de={...G.default_content};if(G.segment_overrides){let J=C?G.segment_overrides.find(K=>K.segment_value_id===C):G.segment_overrides.find(K=>T.has(K.segment_value_id));J&&(de={...de,...J.content},C=J.segment_value_id);}let Re=Cf(de,P);return {payload:R,messageBlock:G,resolvedContent:Re,matchedSegmentId:C,uiPathId:j,promotionId:te}}return null}async function Im(t,e,n,r,a){let s=(await Promise.resolve(n.listPayloads(t))).filter(P=>P.status==="active");if(s.length===0)return null;let u=new Set(e.segmentIds),_=a??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),T=Ll(r,_);for(let P of s){let E=P.default_message_block_id,R,I=P.ui_path_id,C=P.promotion_id;if(P.segment_content_map){for(let J of P.segment_content_map)if(u.has(J.segment_id)){E=J.message_block_id,R=J.segment_id,J.ui_path_id&&(I=J.ui_path_id),J.promotion_id&&(C=J.promotion_id);break}}let j=await Promise.resolve(n.getMessageBlockById(E));if(!j||j.status!=="active")continue;let te={...j.default_content};if(j.segment_overrides){let J=R?j.segment_overrides.find(K=>K.segment_value_id===R):j.segment_overrides.find(K=>u.has(K.segment_value_id));J&&(te={...te,...J.content},R=J.segment_value_id);}let G=Cf(te,T),de;I&&n.getUiPathById&&(de=await Promise.resolve(n.getUiPathById(I)));let Re;return C&&n.getPromotionById&&(Re=await Promise.resolve(n.getPromotionById(C))),{payload:P,messageBlock:j,resolvedContent:G,matchedSegmentId:R,uiPathId:I,promotionId:C,uiPath:de??void 0,promotion:Re??void 0}}return null}var PT={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 TT(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let a=e[r];return a==null?`{{${r}}}`:String(a)})}function IT(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=TT(r,t);continue}e[n]=r;}return e}function CT(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 ET(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function RT(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 ET(e,n)}function kT(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 AT(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 kT(n,e,r)}function wT(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 jT(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 wT(n,e,r)}function OT(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function qT(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function DT(t,e){let n={...PT};for(let u of t.surface_templates??[])n[u.id]=u.surface_type;let r=new Map;for(let u of t.plans??[])r.set(u.unique_handle,u.unique_handle);let a=new Map;for(let u of t.entitlements??[])u.tier_definitions?.length&&a.set(u.unique_handle,u.tier_definitions.map(_=>_.handle));let i=new Map,s=new Map;for(let u of e.placements){let _=u.payloads[0];if(!_)continue;let T=_.surfaces[0];if(!T)continue;let P=T.template_id,E=n[P]??"custom",R={...T.fields};T.ctas?.[0]&&(R.cta_label=T.ctas[0].label),T.ctas?.[1]&&(R.secondary_cta_label=T.ctas[1].label);let I=CT(T.ctas?.[0]),C=Array.isArray(_.target?.plan_ids)?_.target.plan_ids:[],j=OT(u.trigger),te=qT(u.trigger),G=Sf(u.trigger),de=AT(u.trigger,j),Re=RT(u.trigger),J=jT(u.trigger,j),K={output_id:_.id,category:u.category,surface:{template:P,type:E,slot_id:u.id},content:{...R,__target_plan_ids:C,...j?{__trigger_entitlement_handle:j}:{},...G?{__trigger_kind:G.kind}:{}},cta_path:I,rule_id:u.id,decision_id:_.id,config_version:dm(t),present_upsell:true},We=i.get(P)??[];We.push({output:K,entryOrder:u.order??0,entryCategory:u.category,triggerEntitlementHandle:j,triggerSlotId:te,trialTrigger:G,thresholdTrigger:de,qualifierTrigger:Re,entitlementGateTrigger:J}),i.set(P,We);let Gt=u.id.replace(/^pl_/,"");s.set(Gt,K),s.set(u.id,K);}for(let u of i.values())u.sort((_,T)=>_.entryOrder-T.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:r,tierLaddersByHandle:a}}function UT(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let a=new Map;for(let s of e.placements){let u=s.payloads[0]?.surfaces?.[0]?.template_id;u&&a.set(s.id,u);}let i=[];for(let s of r){let u=s.content_link?.message_block_id;if(!u)continue;let _=a.get(s.placement_id);_&&i.push({payload_id:s.payload_id,tenant_id:"",name:s.payload_id,surface_template_id:_,default_message_block_id:u,ui_path_id:s.content_link?.ui_path_id,promotion_id:s.content_link?.promotion_id,status:"active"});}if(i.length!==0)return Tm({payloads:i,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function Ef(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:a,planHandleToId:i,tierLaddersByHandle:s}=DT(e.exportedConfig,e.placements),u=UT(e.exportedConfig,e.placements),_=sf(e.exportedConfig.segments??[]);function T(P,E,R,I){let C=Array.isArray(P.content.__target_plan_ids)?P.content.__target_plan_ids.filter(te=>typeof te=="string"):[],j=Array.isArray(P.content.__target_billing_periods)?P.content.__target_billing_periods.filter(te=>typeof te=="string"):[];return Sd({target_plan_ids:C,target_billing_periods:j,category:P.category},{currentPlanId:E,planHandle:R,billingPeriod:I}).eligible}return async(P,E,R)=>{let I=R?.__providers,C=I?.plan?.currentPlanHandle,j=I?.plan?.billingPeriod,te=C?i.get(C):void 0,G=qt=>typeof qt=="string"?qt:"",de=Array.isArray(E?.metadata?.surface_template_ids)?E.metadata.surface_template_ids:void 0,Re,J=[];if(de&&de.length>0){let qt=[];for(let Ct of de){let kr=r.get(Ct);kr&&qt.push(...kr);}if(qt.length===0)return vf(P,"no_candidates_for_template","No placements configured for this surface template");qt.sort((Ct,kr)=>Ct.entryOrder-kr.entryOrder);let mn=E?.metadata?.entitlement_handle,Fn=E?.metadata?.surface_slot_category,un=Fn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Fn]:void 0,an=qt;if(mn){let Ct=qt.filter(kr=>kr.triggerEntitlementHandle===mn);Ct.length>0&&(an=Ct);}let yr=E?.metadata?.surface_slot_id;if(yr){let Ct=an.filter(kr=>kr.triggerSlotId===yr);Ct.length>0&&(an=Ct);}if(E?.metadata?.fixedOnly===true&&(an=an.filter(Ct=>Ct.entryCategory==="fixed")),un&&Fn!=="fixed"&&an.length>1){let Ct=an.filter(kr=>un.includes(kr.entryCategory));Ct.length>0&&(an=Ct);}n&&(an=an.filter(Ct=>!n.isHiddenSync(Ct.output.rule_id??""))),an=an.filter(Ct=>Pd(Ct.trialTrigger,I?.plan)),an=an.filter(Ct=>hf(Ct.thresholdTrigger,I?.entitlements)),an=an.filter(Ct=>_f(Ct.qualifierTrigger,Ct.entryCategory,I?.plan)),an=an.filter(Ct=>yf(Ct.entitlementGateTrigger,s,I?.entitlements));let vn,Ze=[],mr=Ad(I?.plan);if(mr!==null&&an.length>1){let Ct=an.map(zs=>({ruleId:zs.output.rule_id??void 0,entryOrder:zs.entryOrder,trialTrigger:zs.trialTrigger,output:zs.output})),kr=xf(Ct,mr);if(kr){vn=kr.winner,Ze=kr.supersededIds;let zs=kr.winner.ruleId;an=an.filter(Fh=>Fh.trialTrigger?.kind!=="trial_progress"||(Fh.output.rule_id??void 0)===zs);}}let fa;for(let Ct of an)if(T(Ct.output,te,C,j)){Re=Ct.output,fa=Ct;break}fa&&vn&&vn.ruleId===(fa.output.rule_id??void 0)&&Ze.length>0&&(Re={...Re,content:{...Re.content,__superseded_placement_ids:Ze}}),Re||(J=["no_eligible_candidate"]);}else {let qt=E?.name,mn=(qt?a.get(qt):void 0)??a.get(P.placementId),Fn;if(mn)for(let Rr of r.values()){let un=Rr.find(an=>an.output===mn);if(un){Fn=un;break}}mn&&n?.isHiddenSync(mn.rule_id??"")?J=["placement_retired"]:mn&&!Pd(Fn?.trialTrigger,I?.plan)?J=["trial_trigger_unmet"]:mn&&!hf(Fn?.thresholdTrigger,I?.entitlements)?J=["threshold_trigger_unmet"]:mn&&!_f(Fn?.qualifierTrigger,Fn?.entryCategory??mn.category,I?.plan)?J=["qualifier_trigger_unmet"]:mn&&!yf(Fn?.entitlementGateTrigger,s,I?.entitlements)?J=["entitlement_gate_unmet"]:mn&&T(mn,te,C,j)?Re=mn:mn?J=["plan_target_mismatch"]:J=["placement_not_found"];}if(!Re){let qt=J[0]??"placement_not_found";return vf(P,qt,"Placement not configured")}let K=Re.content,We=Re.surface.template;if(u&&We){let qt={userId:typeof P.userId=="string"?P.userId:"",segmentIds:I?.segments?.segmentIds??[]},mn=await Im(We,qt,u,{});mn&&(K={...Re.content,...mn.resolvedContent});}let Gt={...K},cr=typeof Gt.entitlement=="string"?Gt.entitlement:typeof Gt.__trigger_entitlement_handle=="string"?Gt.__trigger_entitlement_handle:void 0,ae=cr?I?.entitlements?.usage?.[cr]:void 0;if(ae){Gt.usage_remaining=Number.isFinite(ae.remaining)?ae.remaining:0,Gt.usage_limit=Number.isFinite(ae.limit)?ae.limit:0,Gt.usage_current=Number.isFinite(ae.used)?ae.used:0,Gt.usage_percent=ae.limit>0?Math.min(100,Math.round(ae.used/ae.limit*100)):0;let qt=ae.reset_date;typeof qt=="string"&&qt.length>0&&(Gt.reset_date=qt);}let Yt=IT(Gt),ln=of(_,I?.segments?.segmentIds??[],I?.experiments?.assignments),cn={...Re,content:Yt,...ln},rr=!((Re.category==="upsell"||Re.category==="trial_conversion")&&C==="enterprise");return {placementId:P.placementId,requestId:`local_${Date.now()}`,visible:rr,decisionSource:"fallback",reasonCodes:rr?[]:["plan_tier_suppressed"],content:{header:G(cn.content.header),body:G(cn.content.body),cta_label:G(cn.content.cta_label),title:G(cn.content.header),cta:G(cn.content.cta_label)},output:cn}}}function vf(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 Ws(t){return Ef({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}function Ys(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 Ml(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function MT(t,e){let n=Ys(t.limit_value??t.usage_limit??t.limit??t.allowance??t.initial_grant);if(n!==void 0)return n;let r=t.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let a=(e??"").toLowerCase();for(let[i,s]of Object.entries(r))if(i.toLowerCase()===a)return Ys(s)}}function FT(t){let e=Ys(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 Rf(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[I,C]of Object.entries(t.base))(typeof C=="string"||typeof C=="number")&&(e[I]=C);let r=n?.plan?.currentPlanHandle,a=n?.plan?.currentPlanName??r;typeof a=="string"&&a.length>0&&(e.plan_name=a);let i=n?.plan?.trialDaysRemaining;i!==void 0&&Number.isFinite(i)&&(e.trial_days_remaining=i);let s=n?.plan?.trialDaysTotal;s!==void 0&&Number.isFinite(s)&&(e.trial_days_total=s);let u=n?.traits?.traits??{};for(let[I,C]of Object.entries(u))(typeof C=="string"||typeof C=="number")&&(e[I]=C);let _=n?.entitlements?.usage??{};for(let[I,C]of Object.entries(_)){let j=Ml(I);if(!j)continue;let te=Ys(C.used),G=Ys(C.remaining),de=Ys(C.limit);if(te!==void 0&&(e[`${j}_usage_current`]=te,e.usage_current===void 0&&(e.usage_current=te),e.current_usage===void 0&&(e.current_usage=te)),de!==void 0&&(e[`${j}_usage_limit`]=de,e.usage_limit===void 0&&(e.usage_limit=de),e.current_limit===void 0&&(e.current_limit=de)),G!==void 0)e[`${j}_usage_remaining`]=G,e.usage_remaining===void 0&&(e.usage_remaining=G);else if(te!==void 0&&de!==void 0){let J=Math.max(0,de-te);e[`${j}_usage_remaining`]=J,e.usage_remaining===void 0&&(e.usage_remaining=J);}if(te!==void 0&&de!==void 0&&de>0){let J=Math.min(100,Math.round(te/de*100));e[`${j}_usage_percent`]=J,e.usage_percent===void 0&&(e.usage_percent=J);}let Re=C.reset_date;typeof Re=="string"&&Re.length>0&&(e[`${j}_reset_date`]=Re,e.reset_date===void 0&&(e.reset_date=Re));}let T=n?.rules?.entitlementRules??{};for(let[I,C]of Object.entries(T)){if(!Array.isArray(C)||C.length===0)continue;let j=C.find(J=>J.kind==="usage_limit"||J.kind==="usage_rate"||J.kind==="credits"||J.kind==="seat");if(!j)continue;let te=Ml(I);if(!te)continue;let G=j.fields??{},de=MT(G,r);de!==void 0&&e[`${te}_usage_limit`]===void 0&&(e[`${te}_usage_limit`]=de);let Re=FT(G);Re!==void 0&&(e[`${te}_usage_warning_threshold_percent`]=Re);}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 E=t.effectiveGrants;if(E)for(let[I,C]of Object.entries(E)){if(C.allocation==="per_user"||C.allocation==="per_user_pooled"||!C.allocation){let j=Ml(I);if(!j)continue;C.used!==void 0&&e[`${j}_usage_current`]===void 0&&(e[`${j}_usage_current`]=C.used),C.limit!==void 0&&e[`${j}_usage_limit`]===void 0&&(e[`${j}_usage_limit`]=C.limit);}if(C.enforcement&&(C.status==="limited"||C.status==="denied")){let j=Ml(I);j&&e[`${j}_enforcement`]===void 0&&(e[`${j}_enforcement`]=C.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=C.enforcement);}}let R=n?.rules?.entitlementRules??{};for(let[I,C]of Object.entries(R)){if(!Array.isArray(C))continue;let j=Ml(I);if(j)for(let te of C){if(te.kind==="credits"){let G=e[`${j}_usage_remaining`];G!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=G);}if(te.kind==="seat"){let G=e[`${j}_usage_current`],de=e[`${j}_usage_limit`];G!==void 0&&e.seat_count===void 0&&(e.seat_count=G),de!==void 0&&e.seat_limit===void 0&&(e.seat_limit=de);}}}if(t.featureInteractions&&E){let{invokedFeatureHandles:I,interactionCounts:C,topFeaturesByEngagement:j}=t.featureInteractions,te=new Set(I),G=new Set;for(let[J,K]of Object.entries(E))(K.status==="denied"||K.status==="limited")&&G.add(J);let de=0,Re=0;for(let J of I)G.has(J)&&(de++,C&&(Re+=C[J]??0));if(e.gated_features_used_count=de,C&&(e.gated_action_count=Re),j){let J=j.find(K=>!te.has(K)&&G.has(K));J&&(e.top_unused_gated_feature=J);}if(n?.plan?.trialActive){let J=0;for(let K of I)K in E&&J++;e.trial_features_used=J;}}return e}function qd(t,e){let n={};for(let[r,a]of Object.entries(e))a!==void 0&&(n[r]=a);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function Cm(t,e,n){let r={};for(let[a,i]of Object.entries(t))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(r[a]=i);e&&r.plan===void 0&&(r.plan=e);for(let[a,i]of Object.entries(n))r[a]===void 0&&(r[a]=i);return r}function Em(t,e,n){let r=um(t),a=hs(e,r),i=a??r,s={...t.custom??{}};for(let[_,T]of Object.entries(t.entitlements??{}))s[_]===void 0&&(s[_]=T);r?s.plan_handle=r:delete s.plan_handle,a&&s.plan_name===void 0&&(s.plan_name=a),i&&s.plan===void 0&&(s.plan=i);let u={...ti(t.usage),...n??{}};for(let[_,T]of Object.entries(u))s[_]===void 0&&(s[_]=T);return {effectivePlan:i,traits:s,usage:u,segmentTraits:Cm(s,i,u)}}function LT(t){return {plan_handle:t.plan_handle??null,plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function Dd(t,e=xd){return e.sha256Base64Url(Ti(LT(t)))}function Ud(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:a,usageThresholdLookup:i}=t,s={};for(let[G,de]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(G)||(s[G]=de);let u={...s},_=hs(n,um(e));_?u.plan_name=_:typeof e.plan=="object"&&e.plan?.name&&(u.plan_name=e.plan.name);let T={...ti(e.usage),...r},P=Object.entries(T).filter(([,G])=>Number.isFinite(G)).sort(([G],[de])=>G.localeCompare(de)),E,R,I,C,j=[];for(let[G,de]of P){let Re=a.get(G)??$s(G);if(!Re)continue;let K=i(G)?.limit,We=K!==void 0?Math.max(0,K-de):void 0,Gt=K!==void 0&&K>0?Math.min(100,Math.round(de/K*100)):void 0;u[`${Re}_usage_current`]=de,K!==void 0&&(u[`${Re}_usage_limit`]=K),We!==void 0&&(u[`${Re}_usage_remaining`]=We),Gt!==void 0&&(u[`${Re}_usage_percent`]=Gt),j.push({prefix:Re,current:de,...K!==void 0?{limit:K}:{},...We!==void 0?{remaining:We}:{},...Gt!==void 0?{percent:Gt}:{}}),E===void 0&&(E=de,R=K,I=We,C=Gt);}let te=j.find(G=>G.prefix==="core")??j.find(G=>G.limit!==void 0)??j[0];return te&&(E=te.current,R=te.limit,I=te.remaining,C=te.percent),E!==void 0&&(u.usage_current=E),R!==void 0&&(u.usage_limit=R),I!==void 0&&(u.usage_remaining=I),C!==void 0&&(u.usage_percent=C),u}function Md(t,e,n){let r=[];for(let[a,i]of Object.entries(e)){let s=t[a]||0;if(!Number.isFinite(i)||i<=s)continue;let u=n(a);if(!u)continue;let _=s/u.limit*100,T=i/u.limit*100;T>=u.warningPercent&&_<u.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(T)),threshold:u.warningPercent}),i>=u.limit&&s<u.limit&&r.push({type:"usage_limit_reached",entitlement_handle:a,current_usage:i,usage_limit:u.limit,usage_percent:Math.min(100,Math.round(T)),threshold:100});}return r}function Fd(t,e,n=3){if(!t.in_trial)return e==="none"?"none":"expired";let r=Number(t.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=n)return "expiring";let a=Number(t.day_number);if(Number.isFinite(a)&&a>0&&Number.isFinite(r)){let i=a+Math.max(0,r);if(i>0&&a>=Math.ceil(i/2))return "midpoint"}return "none"}var kf="__self__",NT={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Ld={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:kf,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:NT},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 Af=z$1.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z$1.object({stages:z$1.array(Af).default([]),days_before_end:z$1.number().int().min(0).max(365).nullable().default(null),trial_type:z$1.enum(["free","reverse"]).nullable().default(null)});z$1.object({threshold_percent:z$1.number().int().min(0).max(100),trial_type:z$1.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:he}=Va,{Persisted:Yd,Transient:ca}=zi,{Internal:Of,External:Zr}=ni,qf=Ln(pn.Playbook,{sdkInput:true}),zT=Ln(pn.Playbook,{inConfig:false,sdkInput:false}),Df=z$1.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":ca,"x-revturbine-schema-exposure":Zr}),Am=z$1.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),KT=z$1.enum(Hh).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),$T=z$1.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),Uf=z$1.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),Vd=z$1.object({entitlement_id:z$1.string().min(1).meta(he),entitlement_handle:z$1.string().min(1).meta(he),status:KT.meta(he),limit:z$1.number().optional().meta(he),used:z$1.number().optional().meta(he),allocation:Am.optional().meta(he),enforcement:Uf.optional().meta(he),source:$T.optional().meta(he),plan_id:z$1.string().optional().meta(he),segment_id:z$1.string().optional().meta(he),seat_type_id:z$1.string().optional().meta(he),rule_id:z$1.string().optional().meta(he)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr,...Va.Operational});z$1.object({account:z$1.record(z$1.string(),Vd).optional().meta(he),instance:z$1.record(z$1.string(),Vd).optional().meta(he),user:z$1.record(z$1.string(),Vd).optional().meta(he)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr,...Va.Operational});var HT=z$1.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),GT=z$1.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),Mf=z$1.object({kind:GT.meta(he),id:z$1.string().min(1).meta(he)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),YT=z$1.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),to=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...he,readOnly:true}),name:Ci.meta(he),handle:ur.meta(he),customer_facing_description:z$1.string().max(500).optional().meta(he),type:gm.meta(he),unit:z$1.string().max(100).optional().meta(he),period_scope:Df.optional().meta(he),allocation:Am.optional().meta(he),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(he),sort_order:z$1.number().int().default(0).meta(he),metadata:_a.meta(he)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Yd,"x-revturbine-schema-exposure":Zr,...qf,...Ba()}),WT=Mr("EntitlementAnchor"),lo=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...he,readOnly:true}),handle:ur.meta({...he,readOnly:true}),entitlement_id:z$1.string().min(1).meta(he),targets:z$1.array(Mf).min(1).meta(he),segment_ids:z$1.array(z$1.string()).default([]).meta(he),visibility:HT.default("public").meta(he),period_scope:Df.optional().meta(he),instance:z$1.string().max(100).optional().meta(he),reset_period:YT.optional().meta(he),limit_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(he),enforcement:Uf.optional().meta(he),warning_threshold_percent:_s.optional().meta(he),overage_price_ref:z$1.string().optional().meta(he),grace_period_hours:z$1.number().int().min(0).optional().meta(he),tier_value:z$1.string().optional().meta(he),rate_value:z$1.number().optional().meta(he),initial_grant:z$1.number().optional().meta(he),allowance_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(he),rollover_enabled:z$1.boolean().optional().meta(he),max_balance:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().default(null).meta(he),seat_type_id:z$1.string().optional().meta(he),included_count:z$1.union([z$1.number().int(),z$1.literal("unlimited")]).optional().meta(he),at_limit_behavior:z$1.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(he),stripe_metered_price_id:z$1.string().optional().meta(he),enabled:z$1.boolean().optional().meta(he),allocation:Am.optional().meta(he),max_seats:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().optional().meta(he),amount_cents:z$1.number().int().optional().meta(he),currency:z$1.string().optional().meta(he)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Yd,"x-revturbine-schema-exposure":Of,...qf,...za()}),ZT=Mr("EntitlementRuleAnchor");lo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var QT=z$1.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),JT=z$1.object({code:QT.meta(he),message:z$1.string().min(1).meta(he),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(he)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),Bd=lo.extend({warnings:z$1.array(JT).optional().meta(he)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ca,"x-revturbine-schema-exposure":Zr}),zd=En.merge(jn).merge(On).merge(ar).merge(dr).extend({handle:ur.meta({...he,readOnly:true}),rule_id:z$1.string().min(1).meta(he),experiment_id:z$1.string().min(1).meta(he),variant_name:z$1.string().min(1).max(200).meta(he),is_control:z$1.boolean().default(false).meta(he),override_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(he)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Yd,"x-revturbine-schema-exposure":Of,...zT,...za()}),XT=la(to),eI=la(lo);({"/api/entitlement-anchors":{get:O({operationId:"listEntitlementAnchors",requestParams:{query:en},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:Xt(WT)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:O({operationId:"listEntitlementRuleAnchors",requestParams:{query:en},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:Xt(ZT)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:O({operationId:"listEntitlements",requestParams:{query:en},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:Xt(to)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:O({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(to)}}},responses:{201:{description:"Created",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:O({operationId:"getEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:O({operationId:"updateEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:XT}}},responses:{200:{description:"Updated",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:O({operationId:"deleteEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:O({operationId:"listEntitlementRules",requestParams:{path:z$1.object({entitlementId:z$1.string()}),query:en},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:Xt(lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:O({operationId:"createEntitlementRule",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(lo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Bd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:O({operationId:"updateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:eI}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:O({operationId:"deleteEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.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:O({operationId:"duplicateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Bd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:O({operationId:"listEntitlementRuleVariants",requestParams:{path:z$1.object({ruleId:z$1.string()}),query:en},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:Xt(zd)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:O({operationId:"createEntitlementRuleVariant",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ur(zd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Xe}=Va,{Persisted:$l,Transient:Hl}=zi,{Internal:ai}=ni,Ff=Ln(pn.Playbook,{sdkInput:true}),Lf=Ln(pn.Playbook,{inConfig:false,sdkInput:true}),tI=z$1.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Hl,"x-revturbine-schema-exposure":ai}),Wd=z$1.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Hl,"x-revturbine-schema-exposure":ai}),Nf=z$1.object({name:Ci.meta(Xe),handle:ur.meta(Xe),plan_id:z$1.string().nullable().optional().meta(Xe),segment_id:z$1.string().nullable().optional().meta(Xe),trial_limit_type:Wd.default("time").meta(Xe),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(Xe),grace_period_days:z$1.number().int().min(0).default(0).meta(Xe),usage_entitlement_handle:z$1.string().min(1).optional().meta(Xe),usage_limit_value:z$1.number().int().min(1).optional().meta(Xe),require_payment_method:z$1.boolean().default(false).meta(Xe),auto_convert:z$1.boolean().default(true).meta(Xe),convert_to_plan_id:z$1.string().optional().meta(Xe),fallback_plan_id:z$1.string().optional().meta(Xe),limit_per_customer:z$1.number().int().min(1).default(1).meta(Xe),is_active:z$1.boolean().default(true).meta(Xe),metadata:_a.meta(Xe)}),Zs=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...Xe,readOnly:true})}).merge(Nf).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":$l,"x-revturbine-schema-exposure":ai,...Ff,...Ba()}),nI=Mr("FreeTrialRuleAnchor"),rI=z$1.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Hl,"x-revturbine-schema-exposure":ai}),Vf=z$1.object({name:Ci.meta(Xe),handle:ur.meta(Xe),premium_plan_id:z$1.string().min(1).meta(Xe),fallback_plan_id:z$1.string().min(1).meta(Xe),segment_id:z$1.string().nullable().optional().meta(Xe),trial_limit_type:Wd.default("time").meta(Xe),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(Xe),usage_entitlement_handle:z$1.string().min(1).optional().meta(Xe),usage_limit_value:z$1.number().int().min(1).optional().meta(Xe),start_policy:rI.default("signup").meta(Xe),show_upgrade_prompt_at_day:z$1.number().int().min(0).optional().meta(Xe),entitlements_during_trial:z$1.array(z$1.string()).default([]).meta(Xe),is_active:z$1.boolean().default(true).meta(Xe),metadata:_a.meta(Xe)}),Qs=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...Xe,readOnly:true})}).merge(Vf).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":$l,"x-revturbine-schema-exposure":ai,...Ff,...Ba()}),aI=Mr("ReverseTrialRuleAnchor"),Bf=z$1.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Hl,"x-revturbine-schema-exposure":ai}),zf=z$1.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Hl,"x-revturbine-schema-exposure":ai}),Js=En.merge(jn).merge(On).extend({trial_limit_policy:Bf.default("1_per_lifetime").meta(Xe),eligibility_scope:zf.default("per_customer").meta(Xe)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":$l,"x-revturbine-schema-exposure":ai,...Lf}),Xs=En.merge(jn).merge(On).extend({trial_limit_policy:Bf.default("1_per_lifetime").meta(Xe),eligibility_scope:zf.default("per_customer").meta(Xe)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":$l,"x-revturbine-schema-exposure":ai,...Lf}),Rm=En.merge(jn).merge(On).extend({customer_id:z$1.string().min(1).meta(Xe),rule_id:z$1.string().min(1).meta(Xe),rule_type:z$1.enum(["free_trial","reverse_trial"]).meta(Xe),plan_id:z$1.string().min(1).meta(Xe),status:tI.default("active").meta(Xe),started_at:z$1.string().datetime().meta({...Xe,readOnly:true}),expires_at:z$1.string().datetime().nullable().optional().meta(Xe),trial_limit_type:Wd.default("time").meta(Xe),usage_entitlement_handle:z$1.string().min(1).optional().meta(Xe),usage_limit_value:z$1.number().int().min(1).optional().meta(Xe),converted_at:fm.meta(Xe),cancelled_at:fm.meta(Xe),metadata:_a.meta(Xe)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":$l,"x-revturbine-schema-exposure":ai});({"/api/free-trial-rule-anchors":{get:O({operationId:"listFreeTrialRuleAnchors",requestParams:{query:en},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:Xt(nI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:O({operationId:"listFreeTrialRules",requestParams:{query:en},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:Xt(Zs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:O({operationId:"getFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:O({operationId:"updateFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Zs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zs}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:O({operationId:"deleteFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.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:O({operationId:"listReverseTrialRuleAnchors",requestParams:{query:en},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:Xt(aI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:O({operationId:"listReverseTrialRules",requestParams:{query:en},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:Xt(Qs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:O({operationId:"getReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:O({operationId:"updateReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Qs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Qs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:O({operationId:"deleteReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.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:O({operationId:"listFreeTrialSettings",requestParams:{query:en},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:Xt(Js)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:O({operationId:"getFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Js}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:O({operationId:"updateFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Js.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Js}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:O({operationId:"listReverseTrialSettings",requestParams:{query:en},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:Xt(Xs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:O({operationId:"getReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:O({operationId:"updateReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Xs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:O({operationId:"listTrialInstances",requestParams:{query:en},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:Xt(Rm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:O({operationId:"getTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.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:O({operationId:"cancelTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.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:O({operationId:"convertTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({plan_id:z$1.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:zt,Financial:km}=Va,{Persisted:Gl,Transient:wm}=zi,{External:Ei}=ni,iI=Ln(pn.Playbook,{sdkInput:true}),sI=Ln(pn.Playbook,{sdkInput:false}),Zd=Ln(pn.Billing,{sdkInput:false}),Hi=z$1.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":wm,"x-revturbine-schema-exposure":Ei}),Yl=z$1.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":wm,"x-revturbine-schema-exposure":Ei}),jm=z$1.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":wm,"x-revturbine-schema-exposure":Ei}),no=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...zt,readOnly:true}),name:Ci.meta(zt),handle:ur.meta(zt),tier_position:z$1.number().int().min(0).default(0).meta(zt),sort_order:z$1.number().int().default(0).meta(zt),visibility:Hi.default("public").meta(zt),metadata:_a.meta(zt)}).meta({id:"Plan","x-revturbine-schema-persistence":Gl,"x-revturbine-schema-exposure":Ei,...iI,...Ba()}),oI=Mr("PlanAnchor"),ro=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...zt,readOnly:true}),handle:ur.meta({...zt,readOnly:true}),plan_id:z$1.string().min(1).meta(zt),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z$1.string().nullable().default(null).meta(zt),price_amount:z$1.number().min(0).meta(km),pricing_model:Yl.meta(zt),visibility:Hi.default("public").meta(zt),stripe_price_id:z$1.string().optional().meta(zt),price_source:jm.default("static").meta(zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Gl,"x-revturbine-schema-exposure":Ei,...Zd,...za()}),lI=Mr("PlanVariationAnchor"),ao=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...zt,readOnly:true}),name:Ci.meta(zt),handle:ur.meta(zt),sort_order:z$1.number().int().default(0).meta(zt),visibility:Hi.default("public").meta(zt),metadata:_a.meta(zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Gl,"x-revturbine-schema-exposure":Ei,...sI,...Ba()}),cI=Mr("AddOnAnchor"),io=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...zt,readOnly:true}),handle:ur.meta({...zt,readOnly:true}),addon_id:z$1.string().min(1).meta(zt),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z$1.string().nullable().default(null).meta(zt),price_amount:z$1.number().min(0).meta(km),pricing_model:Yl.meta(zt),visibility:Hi.default("public").meta(zt),stripe_price_id:z$1.string().optional().meta(zt),price_source:jm.default("static").meta(zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Gl,"x-revturbine-schema-exposure":Ei,...Zd,...za()}),mI=Mr("AddOnVariationAnchor"),uI=z$1.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":wm,"x-revturbine-schema-exposure":Ei}),so=En.merge(jn).merge(On).extend({stripe_price_id:z$1.string().min(1).meta(zt),stripe_product_id:z$1.string().min(1).meta(zt),billing_period:uI.meta(zt),unit_amount_cents:z$1.number().int().min(0).nullable().default(null).meta(km),currency:Gh.meta(km),pricing_model:Yl.meta(zt),nickname:z$1.string().nullable().default(null).meta(zt),is_mock:z$1.boolean().default(false).meta(zt),last_updated_from_stripe:fm.meta(zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Gl,"x-revturbine-schema-exposure":Ei,...Zd}),dI=la(no),pI=la(ro),gI=la(ao),hI=la(io),fI=la(so);({"/api/plan-anchors":{get:O({operationId:"listPlanAnchors",requestParams:{query:en},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:Xt(oI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:O({operationId:"listPlans",requestParams:{query:en},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:Xt(no)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:O({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(no)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:no}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:O({operationId:"getPlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:no}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:O({operationId:"updatePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:dI}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:no}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:O({operationId:"deletePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:O({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:O({operationId:"listPlanVariationAnchors",requestParams:{query:en},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:Xt(lI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:O({operationId:"listPlanVariations",requestParams:{path:z$1.object({planId:z$1.string()}),query:en},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:Xt(ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:O({operationId:"createPlanVariation",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(ro)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:O({operationId:"getPlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:O({operationId:"updatePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:pI}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:O({operationId:"deletePlanVariation",requestParams:{path:z$1.object({variationId:z$1.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:O({operationId:"listAddOnAnchors",requestParams:{query:en},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:Xt(cI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:O({operationId:"listAddOns",requestParams:{query:en},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:Xt(ao)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:O({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(ao)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:O({operationId:"getAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:O({operationId:"updateAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:gI}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:O({operationId:"deleteAddOn",requestParams:{path:z$1.object({addonId:z$1.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:O({operationId:"listAddOnVariationAnchors",requestParams:{query:en},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:Xt(mI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:O({operationId:"listAddOnVariations",requestParams:{path:z$1.object({addonId:z$1.string()}),query:en},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:Xt(io)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:O({operationId:"createAddOnVariation",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(io)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:O({operationId:"getAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:O({operationId:"updateAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:hI}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:O({operationId:"deleteAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.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:O({operationId:"listStripePrices",requestParams:{query:en},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:Xt(so)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:O({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ur(so)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:O({operationId:"getStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:O({operationId:"updateStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:fI}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:so}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:O({operationId:"deleteStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:d}=Va,{Persisted:co,Transient:at}=zi,{Internal:Ia,External:Et}=ni,bt=Ln(pn.Playbook,{sdkInput:true}),oo=Ln(pn.Playbook,{sdkInput:false}),$i=Ln(pn.Playbook,{inConfig:false,sdkInput:false}),Kf=Ln(pn.Playbook,{inConfig:false,sdkInput:true}),eo=Ln(pn.Playbook,{inConfig:false,sdkInput:true,source:Sa.CodeConstant}),Kd=Ln(pn.Playbook,{inConfig:false,sdkInput:true,source:Sa.Runtime}),$d=Ln(pn.Playbook,{inConfig:false,sdkInput:false,source:Sa.Runtime}),_I=Ln(pn.Billing,{sdkInput:false}),yI=Ln(pn.Metering,{sdkInput:false}),vI=Ln(pn.Branding,{inConfig:true,sdkInput:true}),bI=Ln(pn.Branding,{sdkInput:false}),xI="1.0.0",Vl=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...d,readOnly:true}),name:Ci.meta(d),handle:ur.meta(d),description:hm.meta(d),is_default:z$1.boolean().default(false).meta(d),entitlement_ids:z$1.array(z$1.string()).default([]).meta(d),metadata:_a.meta(d)}).meta({id:"SeatType","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,...$i,...Ba()}),SI=Mr("SeatTypeAnchor"),Bl=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...d,readOnly:true}),handle:ur.meta(d),label:z$1.string().min(1).meta(d),description:z$1.string().nullable().default(null).meta(d),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z$1.string().nullable().default(null).meta(d),example_value:z$1.string().nullable().default(null).meta(d),value_map:z$1.record(z$1.string(),z$1.string()).default({}).meta(d),format:z$1.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(d),metadata:_a.meta(d)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,...$i,...Ba()}),PI=Mr("PersonalizationTokenAnchor"),TI=z$1.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),Hd=En.merge(jn).merge(On).merge(ar).merge(dr).extend({handle:ur.meta({...d,readOnly:true}),stripe_account_id:z$1.string().min(1).meta(d),live_mode:z$1.boolean().default(false).meta(d),onboarding_state:TI.default("not_started").meta({...d,readOnly:true}),onboarding_complete:z$1.boolean().default(false).meta({...d,readOnly:true}),charges_enabled:z$1.boolean().default(false).meta({...d,readOnly:true}),details_submitted:z$1.boolean().default(false).meta({...d,readOnly:true}),payouts_enabled:z$1.boolean().default(false).meta({...d,readOnly:true}),webhook_secret_set:z$1.boolean().default(false).meta({...d,readOnly:true}),sync_products:z$1.boolean().default(true).meta(d),sync_prices:z$1.boolean().default(true).meta(d),sync_subscriptions:z$1.boolean().default(true).meta(d),sync_invoices:z$1.boolean().default(false).meta(d),default_currency:z$1.string().length(3).default("USD").meta(d),tax_behavior:z$1.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(d),last_sync_at:z$1.string().optional().meta({...d,readOnly:true}),metadata:_a.meta(d)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,..._I,...za()});z$1.object({theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(d),workspace_name:z$1.string().optional().meta(d),logo_url:z$1.string().optional().meta(d),support_email:z$1.string().optional().meta(d)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bI});var zl=En.merge(jn).merge(On).merge(ar).merge(dr).extend({handle:ur.meta({...d,readOnly:true}),entitlement_id:z$1.string().min(1).meta(d),meter_key:z$1.string().min(1).max(100).meta(d),aggregation_type:z$1.enum(["sum","count","max","last_value"]).default("sum").meta(d),reset_period:z$1.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(d),stripe_meter_id:z$1.string().nullable().default(null).meta(d),is_active:z$1.boolean().default(true).meta(d),metadata:_a.meta(d)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,...yI,...za()}),wf=z$1.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),Kl=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...d,readOnly:true}),handle:ur.meta({...d,readOnly:true}),entitlement_id:z$1.string().min(1).meta(d),soft_limit_percent:z$1.number().min(0).max(100).default(80).meta(d),hard_limit_percent:z$1.number().min(0).max(100).default(100).meta(d),soft_limit_action:wf.default("warn").meta(d),hard_limit_action:wf.default("block").meta(d),grace_period_hours:z$1.number().int().min(0).default(0).meta(d),notification_channels:z$1.array(z$1.enum(["email","in_app","webhook"])).default(["in_app"]).meta(d),is_active:z$1.boolean().default(true).meta(d)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,...Kf,...za()}),II=Mr("UsageEnforcementSettingsAnchor"),CI=z$1.object({kind:z$1.enum(["template","slot"]).meta(d),id:z$1.string().min(1).meta(d),label:z$1.string().min(1).optional().meta(d)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),EI=z$1.object({id:z$1.string().min(1).meta(d),group:z$1.array(CI).min(1).meta(d),cap:z$1.object({count:z$1.number().int().min(1).meta(d),period:z$1.enum(["session","day","week","month"]).meta(d)}).meta(d)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),RI=z$1.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),$f=z$1.object({capRules:z$1.array(EI).default([]).meta(d),sessionCooldownMinutes:z$1.number().int().min(0).default(30).meta(d),remindLaterMinutes:z$1.number().int().min(0).default(60).meta(d),testMode:RI.default("off").meta(d)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Ia}),Gd=En.merge(jn).merge(On).merge(ar).merge(dr).extend({anchor_id:z$1.string().min(1).meta({...d,readOnly:true}),handle:ur.meta({...d,readOnly:true}),global_frequency_cap:$f.nullable().default(null).meta(d),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z$1.boolean().default(false).meta(d),suppress_for_trial:z$1.boolean().default(false).meta(d),allow_stacking:z$1.boolean().default(false).meta(d),priority_collision_strategy:z$1.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(d)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":co,"x-revturbine-schema-exposure":Ia,...Kf,...za()}),kI=Mr("PlacementSettingsAnchor"),AI=z$1.object({field:z$1.string().min(1).meta(d),operator:z$1.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(d),value:z$1.string().meta(d)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),wI=z$1.object({name:z$1.string().min(1).meta(d),handle:z$1.string().min(1).meta(d),predicates:z$1.array(AI).optional().meta(d),dimension_id:z$1.string().optional().meta(d),experiment_id:z$1.string().min(1).optional().meta(d)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),jI=z$1.object({unique_handle:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),tier_position:z$1.number().int().min(0).default(0).meta(d),sort_order:z$1.number().int().min(0).default(0).meta(d),visibility:Hi.default("public").meta(d)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),OI=z$1.object({unique_handle:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),sort_order:z$1.number().int().min(0).default(0).meta(d),visibility:Hi.default("public").meta(d)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...oo}),qI=z$1.object({handle:z$1.string().min(1).meta(d),plan_handle:z$1.string().min(1).meta(d),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z$1.string().nullable().default(null).meta(d),price_amount:z$1.number().min(0).meta(d),pricing_model:Yl.meta(d),visibility:Hi.default("public").meta(d),stripe_price_id:z$1.string().nullable().default(null).meta(d),price_source:jm.meta(d)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...$i}),DI=z$1.object({handle:z$1.string().min(1).meta(d),addon_handle:z$1.string().min(1).meta(d),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(d),segment_handle:z$1.string().nullable().default(null).meta(d),price_amount:z$1.number().min(0).meta(d),pricing_model:Yl.meta(d),visibility:Hi.default("public").meta(d),stripe_price_id:z$1.string().nullable().default(null).meta(d),price_source:jm.meta(d)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...$i}),UI=z$1.object({handle:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),description:z$1.string().nullable().default(null).meta(d),is_default:z$1.boolean().default(false).meta(d),entitlement_handles:z$1.array(z$1.string()).default([]).meta(d)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),MI=z$1.object({handle:z$1.string().min(1).meta(d),entitlement_handle:z$1.string().nullable().default(null).meta(d),soft_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(d),hard_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(d),soft_limit_action:z$1.string().meta(d),hard_limit_action:z$1.string().meta(d),grace_period_hours:z$1.number().int().min(0).nullable().default(null).meta(d),notification_channels:z$1.array(z$1.string()).default([]).meta(d),is_active:z$1.boolean().default(true).meta(d)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),FI=z$1.object({handle:z$1.string().min(1).meta(d),global_frequency_cap:$f.nullable().default(null).meta(d),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(d),suppress_for_paid:z$1.boolean().default(false).meta(d),suppress_for_trial:z$1.boolean().default(false).meta(d),allow_stacking:z$1.boolean().default(false).meta(d),priority_collision_strategy:z$1.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),LI=z$1.object({handle:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),category:z$1.string().nullable().default(null).meta(d),visibility_toggle:z$1.boolean().default(true).meta(d),source_type:z$1.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),NI=z$1.object({handle:z$1.string().min(1).meta(d),entitlement_handle:z$1.string().min(1).meta(d),meter_handle:z$1.string().min(1).meta(d),limit:z$1.number().int().min(0).nullable().default(null).meta(d),reset_period:z$1.string().nullable().default(null).meta(d)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),VI=z$1.object({unique_handle:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),type:gm.meta(d),unit:z$1.string().optional().meta(d),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),BI=z$1.object({id:z$1.string().min(1).meta(d),entitlement_id:z$1.string().min(1).meta(d),targets:z$1.array(Mf).min(1).meta(d),segment_ids:z$1.array(z$1.string()).default([]).meta(d),kind:gm.optional().meta({...d,readOnly:true}),unit:z$1.string().optional().meta({...d,readOnly:true}),tier_name:z$1.string().optional().meta({...d,readOnly:true}),tier_description:z$1.string().optional().meta({...d,readOnly:true}),...lo.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z$1.number().default(0).meta(d),allocation:Am.optional().meta(d)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),zI=z$1.object({slot_id:z$1.string().min(1).meta(d),active:z$1.boolean().meta(d),triggers:z$1.array(z$1.string()).meta(d)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),KI=z$1.object({id:z$1.string().min(1).meta(d),label:z$1.string().min(1).meta(d),description:z$1.string().meta(d),surface_type:z$1.string().meta(d),placement_handle:z$1.string().min(1).meta(d),template:z$1.string().optional().meta(d)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),$I=z$1.object({name:z$1.string().min(1).meta(d),type:z$1.string().optional().meta(d),required:z$1.boolean().optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),HI=z$1.object({id:z$1.string().min(1).meta(d),surface_type:z$1.string().meta(d),fields:z$1.array($I).optional().meta(d)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),GI=z$1.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":at,"x-revturbine-schema-exposure":Et}),YI=z$1.object({name:z$1.string().min(1).meta(d),action_type:GI.meta(d),plan_handle:z$1.string().optional().meta(d),promotion_id:z$1.string().optional().meta(d),placement_handle:z$1.string().optional().meta(d),url:z$1.string().optional().meta(d),tour_id:z$1.string().optional().meta(d),target_billing_period:z$1.enum(["monthly","annual"]).optional().meta(d),description:z$1.string().optional().meta(d)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),WI=z$1.object({id:z$1.string().meta(d),name:z$1.string().meta(d),discount:z$1.string().meta(d),type:z$1.string().meta(d),status:z$1.string().meta(d)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),ZI=z$1.object({token:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(d),label:z$1.string().min(1).meta(d),description:z$1.string().optional().meta(d),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(d),data_source:z$1.string().optional().meta(d),example_value:z$1.string().optional().meta(d),value_map:z$1.record(z$1.string(),z$1.string()).optional().meta(d),format:z$1.enum(["string","number","currency","percentage","date"]).optional().meta(d)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),jf=z$1.object({header:z$1.string().optional().meta(d),body:z$1.string().optional().meta(d),cta_label:z$1.string().optional().meta(d),secondary_cta_label:z$1.string().optional().meta(d)}).catchall(z$1.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),QI=z$1.object({block_id:z$1.string().min(1).meta(d),tenant_id:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),surface_template_id:z$1.string().optional().meta(d),default_content:jf.meta(d),segment_overrides:z$1.array(z$1.object({segment_value_id:z$1.string(),content:jf})).optional().meta(d),child_blocks:z$1.array(z$1.object({slot:z$1.string(),block_id:z$1.string()})).optional().meta(d),tokens_used:z$1.array(z$1.string()).optional().meta(d),status:z$1.enum(["draft","active","archived"]).meta(d),created_at:z$1.string().datetime().meta({...d,readOnly:true}),updated_at:z$1.string().datetime().meta({...d,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),JI=z$1.object({label:z$1.string().meta(d),path:Yh.meta(d),config:z$1.record(z$1.string(),z$1.string()).optional().meta(d)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),Hf=z$1.object({template_id:z$1.string().min(1).meta(d),fields:z$1.record(z$1.string(),z$1.string()).meta(d),ctas:z$1.array(JI).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),Gf=z$1.object({plan_ids:z$1.array(z$1.string()).meta(d),billing_cadences:z$1.array(z$1.string()).optional().meta(d),segment_chips:z$1.array(z$1.string()).meta(d)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),XI=z$1.object({count:z$1.number().int().min(1).meta(d),period:z$1.enum(["session","day","week","month","lifetime"]).meta(d)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),Yf=z$1.object({max_per_period:XI.optional().meta(d),cooldown_days:z$1.number().int().min(0).optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),eC=z$1.object({id:z$1.string().min(1).meta(d),target:Gf.meta(d),surfaces:z$1.array(Hf).meta(d),caps:Yf.optional().meta(d),surface_slot_ids:z$1.array(z$1.string()).optional().meta(d),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(d),created_at:z$1.string().optional().meta({...d,readOnly:true}),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(d),recommendation_plan_override:z$1.string().optional().meta(d)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),tC=z$1.discriminatedUnion("type",[z$1.object({type:z$1.literal("surface_render"),slot_id:z$1.string().min(1)}),z$1.object({type:z$1.literal("entitlement_gate"),entitlement_handle:z$1.string().min(1),tier_threshold:z$1.string().optional()}),z$1.object({type:z$1.literal("usage_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:_s}),z$1.object({type:z$1.literal("credit_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:_s}),z$1.object({type:z$1.literal("seat_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:_s}),z$1.object({type:z$1.literal("trial_started"),trial_type:z$1.enum(["free","reverse"]).optional()}),z$1.object({type:z$1.literal("trial_progress"),progress_percent:z$1.number().min(1).max(100)}),z$1.object({type:z$1.literal("trial_ending"),days_before_end:z$1.number().int().min(0)}),z$1.object({type:z$1.literal("trial_ended")}),z$1.object({type:z$1.literal("trial_converted")}),z$1.object({type:z$1.literal("qualifier"),qualifier:z$1.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),nC=z$1.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et}),rC=z$1.object({id:z$1.string().min(1).meta(d),name:z$1.string().min(1).meta(d),category:nC.meta(d),trigger:tC.meta(d),payloads:z$1.array(eC).meta(d),order:z$1.number().int().min(0).meta(d)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),aC=z$1.object({payload_id:z$1.string().min(1).meta(d),placement_id:z$1.string().min(1).meta(d),target:Gf.meta(d),caps:Yf.optional().meta(d),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(d),created_at:z$1.string().meta({...d,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...d,readOnly:true}),source_mode:z$1.enum(["inline","content_linked"]).meta(d),surfaces:z$1.array(Hf).optional().meta(d),surface_slot_ids:z$1.array(z$1.string()).optional().meta(d),content_link:z$1.object({message_block_id:z$1.string().optional(),ui_path_id:z$1.string().optional(),promotion_id:z$1.string().optional(),content_payload_id:z$1.string().optional()}).optional().meta(d)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),iC=z$1.object({kind:z$1.string().min(1).meta(d),schema_version:z$1.number().int().nonnegative().meta(d),config:z$1.unknown().meta(d)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),sC=En.merge(Nf).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...$i}),oC=En.merge(Vf).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...$i}),lC=z$1.object({plans:z$1.array(jI).meta({...d,...bt}),addons:z$1.array(OI).optional().meta({...d,...oo}),entitlements:z$1.array(VI).meta({...d,...bt}),entitlement_rules:z$1.array(BI).meta({...d,...bt}),segments:z$1.array(wI).meta({...d,...bt}),content_ui_paths:z$1.array(YI).meta({...d,...bt}),slot_configs:z$1.array(zI).optional().meta({...d,...bt,...bm({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$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())).optional().meta({...d,...bt,...bm({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$1.record(z$1.string(),z$1.unknown()).optional().meta({...d,...vI,...bm({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$1.array(KI).optional().meta({...d,...bt}),message_blocks:z$1.array(QI).optional().meta({...d,...bt}),placement_payloads:z$1.array(aC).optional().meta({...d,...bt}),placements:z$1.array(rC).optional().meta({...d,...bt}),content_promotions:z$1.array(WI).optional().meta({...d,...bt}),personalization_tokens:z$1.array(ZI).optional().meta({...d,...bt}),surface_templates:z$1.array(HI).optional().meta({...d,...bt}),free_trial_rules:z$1.array(sC).optional().meta({...d,...oo}),reverse_trial_rules:z$1.array(oC).optional().meta({...d,...oo}),plan_variations:z$1.array(qI).optional().meta({...d,...oo}),addon_variations:z$1.array(DI).optional().meta({...d,...oo}),extension_rules:z$1.array(iC).optional().meta({...d,...bt}),seat_types:z$1.array(UI).optional().meta({...d,...bt}),enforcement_defaults:z$1.array(MI).optional().meta({...d,...bt}),placement_settings:z$1.array(FI).optional().meta({...d,...bt}),segment_dimensions:z$1.array(LI).optional().meta({...d,...bt}),meter_bindings:z$1.array(NI).optional().meta({...d,...bt}),experiments:z$1.array(z$1.unknown()).max(0).optional().meta({...d,...$i}),signal_catalog:z$1.object({}).strict().optional().meta({...d,...$i})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt}),cC=z$1.object({artifact_type:z$1.literal("playbook").meta({...d,...eo,readOnly:true}),format_version:z$1.literal(xI).meta({...d,...eo,readOnly:true}),playbook_handle:z$1.string().min(1).default("default").meta({...d,...eo}),playbook_version_id:z$1.string().nullable().default(null).meta({...d,...Kd,readOnly:true}),tenant_id:z$1.string().min(1).optional().meta({...d,...$d,readOnly:true}),environment_id:z$1.string().min(1).optional().meta({...d,...$d,readOnly:true}),project_id:z$1.string().min(1).optional().meta({...d,...$d,readOnly:true}),exported_at:z$1.string().datetime().optional().meta({...d,...Kd,readOnly:true}),schema_version:z$1.string().min(1).optional().meta({...d,...eo,readOnly:true}),bundle_schema_version:z$1.number().int().nonnegative().optional().meta({...d,...eo,readOnly:true}),bundle_min_readable_schema_version:z$1.number().int().nonnegative().optional().meta({...d,...eo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...Kd}),Wf=cC.extend(lC.shape).meta({"x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});function mC(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Zf(t){if(!mC(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$1.preprocess(Zf,Wf).meta({id:"Playbook","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});z$1.preprocess(Zf,Wf.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":at,"x-revturbine-schema-exposure":Et,...bt});({"/api/seat-type-anchors":{get:O({operationId:"listSeatTypeAnchors",requestParams:{query:en},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:Xt(SI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:O({operationId:"listSeatTypes",requestParams:{query:en},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:Xt(Vl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:O({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Vl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:O({operationId:"updateSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Vl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:O({operationId:"deleteSeatType",requestParams:{path:z$1.object({id:z$1.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:O({operationId:"listPersonalizationTokenAnchors",requestParams:{query:en},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:Xt(PI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:O({operationId:"listPersonalizationTokens",requestParams:{query:en},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:Xt(Bl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:O({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Bl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Bl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:O({operationId:"updatePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Bl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:O({operationId:"deletePersonalizationToken",requestParams:{path:z$1.object({id:z$1.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:O({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:la(Hd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Hd}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:O({operationId:"listMeteringConfigs",requestParams:{query:en},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:Xt(zl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:O({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(zl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:O({operationId:"updateMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:zl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:O({operationId:"deleteMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.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:O({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:en},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:Xt(II)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:O({operationId:"listUsageEnforcementSettings",requestParams:{query:en},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:Xt(Kl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:O({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ur(Kl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:O({operationId:"updateUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Kl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Kl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:O({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.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:O({operationId:"listPlacementSettingsAnchors",requestParams:{query:en},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:Xt(kI)}}},default:{description:"Error response",content:{"application/json":{schema:Yn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:O({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:la(Gd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Gd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});function uo(){return typeof window>"u"||typeof document>"u"}function Fr(){return !uo()}var Wl=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(t){let e=this.providers.get(t.domain);if(e&&this.unregister(e.domain),this.providers.set(t.domain,t),t.subscribe){let n=t.subscribe(r=>{this.cache.set(t.domain,{value:r,resolvedAt:Date.now(),ttlMs:t.cacheTtlMs??0});});this.unsubscribers.set(t.domain,n);}}unregister(t){this.providers.delete(t),this.cache.delete(t);let e=this.unsubscribers.get(t);e&&(e(),this.unsubscribers.delete(t));}clear(){for(let t of this.unsubscribers.values())t();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let t=Array.from(this.providers.entries()),e=await Promise.all(t.map(async([i,s])=>{let u=this.cache.get(i),_=Date.now();if(u&&u.ttlMs>0&&_-u.resolvedAt<u.ttlMs)return [i,u.value];let T=await s.resolve();return this.cache.set(i,{value:T,resolvedAt:_,ttlMs:s.cacheTtlMs??0}),[i,T]})),n={},r={},a=false;for(let[i,s]of e)if(i==="traits"||i.startsWith("traits:")){let u=s;u?.traits&&(Object.assign(r,u.traits),a=true);}else n[i]=s;return a&&(n.traits={traits:r}),n}async get(t){let e=this.providers.get(t);if(!e)return;let n=this.cache.get(t),r=Date.now();if(n&&n.ttlMs>0&&r-n.resolvedAt<n.ttlMs)return n.value;let a=await e.resolve();return this.cache.set(t,{value:a,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),a}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},dC=new Set(["cta_completed"]),pC=1440*60*1e3,Qf=10080*60*1e3,gC="revturbine:interaction-state",Jf=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??Qf,this.defaultRemindLaterMs=t.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(t){let e=this.stateKey(t.placementId,t.userId,t.treatmentId),n=Date.now(),r=t.metadata??{},i={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let s=Number(r.remind_after_seconds);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let s=Number(r.cooldown_ms);i.suppressedUntil=n+(Number.isFinite(s)&&s>0?s:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(i.suppressedUntil=n+300*1e3),this.state.set(e,i),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),a=this.state.get(r);return a?.suppressedUntil?a.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:a.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(t,e,n){let r=this.stateKey(t,e,n);this.state.delete(r),this.persist();}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(n,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${gC}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},hC="revturbine:presentation-caps";function mo(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function fC(t){if(!mo(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 Xf=class{constructor(t){this.capsByKey=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.hydrate();}enforce(t){let e=this.extractPolicies(t);if(e.length===0)return {allowed:true};let n=this.capKey(t),r=Date.now(),a=this.capsByKey.get(n)??{seenAt:[]},i={...a,seenAt:a.seenAt.filter(_=>Number.isFinite(_)&&_>0)},s=Ul({perPayload:{policies:e,seenAt:i.seenAt,cooldownUntil:i.cooldownUntil},now:r});if(!s.allowed)return this.capsByKey.set(n,i),{allowed:false,reason:s.reason};i.seenAt.push(r);let u=e.map(_=>_.cooldownMs).filter(_=>typeof _=="number"&&Number.isFinite(_)&&_>0);return u.length>0?i.cooldownUntil=r+Math.max(...u):delete i.cooldownUntil,this.capsByKey.set(n,i),this.persist(),{allowed:true}}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let a=Array.isArray(r.seenAt)?r.seenAt.filter(s=>Number.isFinite(s)&&s>0):[],i=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:a,cooldownUntil:i});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${hC}:${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,mo(t.content)?t.content.payload:void 0,mo(t.content)?t.content.placement:void 0,mo(t.content)?t.content.surface:void 0];for(let r of n){if(!mo(r))continue;let a=mo(r.caps)?r.caps:void 0;if(!a)continue;let i=[],s=fC(a.max_per_period);s&&i.push(s);let u=Number(a.cooldown_days),_=Number.isFinite(u)&&u>0?u*24*60*60*1e3:void 0;e.push({rules:i,..._!==void 0?{cooldownMs:_}:{}});}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 e_(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function t_(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 Qd=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??pC,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??Qf;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordClickThru(t,e,n,r,a){let i=a??this.defaultDismissCooldownMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async recordConversion(t,e,n,r){await this.appendRecord(t,"cta_completed",e,n,r),this.retireInCache(t);}async recordSuppression(t,e,n,r,a){let i=a??this.defaultSuppressionMs,s=new Date(Date.now()+i).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:s}),this.suppressInCache(t,s);}async isRetired(t){return (await this.getRetiredIds()).has(t)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let t=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=t,t}isRetiredSync(t){return this.retiredCache?.has(t)??false}isSuppressedSync(t){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(t);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(t),false):false}isHiddenSync(t){return this.isRetiredSync(t)||this.isSuppressedSync(t)}async queryHistory(t){return this.store.query(this.userId,t)}async hydrate(){this.retiredCache=await this.store.getRetiredPlacementIds(this.userId),this.suppressedCache=await this.store.getSuppressedPlacements(this.userId);}async reset(){await this.store.clear(this.userId),this.retiredCache=new Set,this.suppressedCache=new Map;}setUserId(t){this.userId=t,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(t,e,n,r,a){let i={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...a?{metadata:a}:{}};await this.store.append(this.userId,i);}retireInCache(t){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(t);}suppressInCache(t,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(t,e);}},_C=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=n_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return r_(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return a_(e)}clear(t){this.records.delete(t);}},yC="revturbine:impression-history",Om=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=n_(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return r_(e)}getSuppressedPlacements(t){let e=this.load(t);return a_(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${yC}:${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 n_(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(a=>r.has(a.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(a=>r.has(a.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(a=>new Date(a.occurredAt).getTime()>=r);}return n}function r_(t){let e=new Set;for(let n of t)dC.has(n.outcome)&&e.add(n.placementId);return e}function a_(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let a=t[r];if(e.has(a.placementId))continue;let i=a.metadata?.suppressUntil;typeof i=="string"&&new Date(i).getTime()>n&&e.set(a.placementId,i);}return e}function vC(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let a={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:t.planHandle,currentPlanName:t.planName??t.planHandle,...t.paymentFailed!==void 0?{paymentFailed:t.paymentFailed}:{},...t.paymentAtRisk!==void 0?{paymentAtRisk:t.paymentAtRisk}:{}})};r.push(a);}if(e.entitlements?.length){let a=t.defaultEntitlementPolicy??"allow",i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={},u={};for(let _ of e.entitlements??[]){s[_.unique_handle]={status:a==="allow"?"allowed":"denied",allowed:a==="allow",reason:`static_config_default_${a}`};let T=t.usage?.[_.unique_handle];T&&(u[_.unique_handle]={used:T.used,limit:T.limit,remaining:Math.max(0,T.limit-T.used),unit:_.unit});}return {entries:s,usage:u,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(i);}if(e.segments?.length){let a={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(i=>i.handle),segmentSlugs:(e.segments??[]).map(i=>i.handle)})};r.push(a);}if(e.entitlement_rules?.length){let a={domain:"rules",cacheTtlMs:n,resolve:()=>{let i={},s=new Map;for(let _ of e.entitlements??[]){let T=_;typeof T.unique_handle=="string"&&typeof T.type=="string"&&s.set(T.unique_handle,T.type);}for(let _ of e.entitlement_rules??[]){let T=_.entitlement_id;i[T]||(i[T]=[]);let P=_,E=Array.isArray(P.segment_ids)?P.segment_ids.filter(C=>typeof C=="string"):typeof P.segment_id=="string"&&P.segment_id!=="all"?[P.segment_id]:[],R=Array.isArray(P.plan_ids)?P.plan_ids.filter(C=>typeof C=="string"):[],I={ruleId:_.id,entitlementId:T,planIds:(_.targets??[]).length>0?(_.targets??[]).filter(C=>C.kind==="plan").map(C=>C.id):R,segmentIds:E,kind:(()=>{let C=typeof P.type_fields=="object"&&P.type_fields!==null?P.type_fields:{};return (typeof P.kind=="string"?P.kind:void 0)??(typeof C.kind=="string"?C.kind:void 0)??s.get(T)??"feature"})(),fields:{...typeof P.type_fields=="object"&&P.type_fields!==null?P.type_fields:{},...P}};i[T].push(I);}let u={};for(let _ of e.segments??[])typeof _.dimension_id=="string"&&typeof _.handle=="string"&&(u[_.handle]=_.dimension_id);return {entitlementRules:i,segmentDimensions:u,configVersion:dm(e)}}};r.push(a);}if(e.message_blocks?.length||e.personalization_tokens?.length){let a={domain:"content",cacheTtlMs:n,resolve:()=>{let i={};for(let s of e.message_blocks??[])i[s.block_id]={blockId:s.block_id,name:s.name,defaultContent:s.default_content,segmentOverrides:s.segment_overrides?.map(u=>({segmentId:u.segment_value_id,content:u.content})),status:s.status};return {messageBlocks:i,personalization:{}}}};r.push(a);}if(e.theme&&Object.keys(e.theme).length>0){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}function bC(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let a=e.user_context,i={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:a.plan_handle??"unknown",currentPlanName:a.plan_name,billingPeriod:a.billing_period,trialActive:a.trial_active,trialLimitType:a.trial_limit_type,trialProgressPercent:a.trial_progress_percent,trialDaysRemaining:a.trial_days_remaining,trialDaysTotal:a.trial_days_total,trialState:a.trial_state,trialUsageEntitlementHandle:a.trial_usage_entitlement_handle,trialUsageConsumed:a.trial_usage_consumed,trialUsageLimit:a.trial_usage_limit})};r.push(i);}if(e.entitlements){let a=e.entitlements,i={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let s={};for(let[u,_]of Object.entries(a))s[u]=_;return {entries:s}}};r.push(i);}if(e.user_context){let a=e.user_context;if(Array.isArray(a.segment_ids)){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:a.segment_ids})};r.push(i);}}if(e.user_context){let a=e.user_context;if(a.traits&&typeof a.traits=="object"){let i={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:a.traits})};r.push(i);}}if(e.theme){let a={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(a);}return r}var i_=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 Wl;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new Jf({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new Xf({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new Qd({store:t.impressionStore??new _C,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new vd({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:t.engineOptions,placements:this.registeredPlacements,placementResolver:n});}registerPlacement(t){this.registeredPlacements.set(t.id,t);}async getPlacementDecision(t){return this.engine.evaluate(t)}async getPlacementDecisions(t){return this.engine.evaluateBatch(t)}async getPlacement(t){let e=this.slotRecordForConfig(t);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(t,e){let n=await this.engine.checkEntitlement(t,e);if(n.reason==="no_entitlement_provider"){let r=await this.engine.resolveProviders();return this.deriveEntitlementFromConfig(t,e,r.plan?.currentPlanHandle??"")}return n}trackInteraction(t){this.engine.trackInteraction(t);}clearSuppression(t,e){this.interactionTracker.clearSuppression(t,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(t){let e=this.exportedConfig.segments??[];return ql(e,t)}buildTargetingState(t,e){return Em(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return Rf({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 Ws({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e,n){return jl({handle:t,context:e,currentPlanHandle:n,segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"denied",allowed:false,reason:"entitlement_not_in_playbook"}}},xC=["web-client"],SC=z$1.enum(xC),PC=["method","meta","component"],TC=z$1.enum(PC),IC=["ts","python","java","csharp","rust"];z$1.enum(IC);var CC=z$1.object({ts:z$1.string().min(1).optional(),python:z$1.string().min(1).optional(),java:z$1.string().min(1).optional(),csharp:z$1.string().min(1).optional(),rust:z$1.string().min(1).optional()}).strict(),EC=z$1.object({canonical:z$1.string().min(1),aliases:z$1.array(z$1.string().min(1)),kind:TC,appliesTo:z$1.array(SC).min(1),composes:z$1.string().min(1).optional(),perLanguage:CC.optional(),description:z$1.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),RC=z$1.object({version:z$1.number().int().positive(),functions:z$1.array(EC).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});RC.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var kC=[{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 AC(){let t=[];for(let[e,n]of Object.entries(Ld))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function wC(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(wC([...AC(),...kC]));var s_="traits:server",Zl=class{constructor(){k(this,"domain",s_);k(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 Jd={workspace_name:"Your workspace",theme:{}};function o_(t){return !!t&&Object.keys(t).length>0}var l_=false;function Xd(t={}){let e=(n,r)=>({branding:{...Jd,...n,theme:{...Jd.theme,...n?.theme}},source:r});return o_(t.explicit)?e(t.explicit,"explicit"):o_(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!l_&&gs()&&(l_=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 c_="[REDACTED]",jC=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,OC=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,qC=/\d(?:[ -]?\d){12,18}/g;function DC(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let a=t.charCodeAt(r)-48;if(a<0||a>9)return false;if(n){let i=a*2;i>9&&(i-=9),e+=i;}else e+=a;n=!n;}return e%10===0}function UC(t){let e=0,n=t.replace(jC,()=>(e+=1,c_));return n=n.replace(qC,r=>{let a=r.replace(/[ -]/g,"");return a.length>=13&&a.length<=19&&DC(a)?(e+=1,c_):r}),{value:n,count:e}}function ep(t){let e=0,n=r=>{if(typeof r=="string"){let a=UC(r);return e+=a.count,a.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let a={};for(let[i,s]of Object.entries(r))a[i]=n(s);return a}return r};return {value:n(t),redactions:e}}function MC(t){return OC.test(t.trim())}function FC(t){let e=t.trim().toLowerCase();return `eml_${VC(e).slice(0,16)}`}function tp(t){return MC(t)?{value:FC(t),redacted:true}:{value:t,redacted:false}}function m_(t){let e=tp(t.user_id??""),n=ep({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 LC=[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 NC(t){let e=[];for(let n=0;n<t.length;n+=1){let r=t.charCodeAt(n);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6,128|r&63);else if(r>=55296&&r<=56319){let a=r,i=t.charCodeAt(n+1);n+=1,r=65536+((a&1023)<<10)+(i&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function ii(t,e){return t>>>e|t<<32-e}function VC(t){let e=NC(t),n=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let R=0;R<4;R+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,a=3144134277,i=1013904242,s=2773480762,u=1359893119,_=2600822924,T=528734635,P=1541459225,E=new Array(64);for(let R=0;R<e.length;R+=64){for(let K=0;K<16;K+=1){let We=R+K*4;E[K]=(e[We]<<24|e[We+1]<<16|e[We+2]<<8|e[We+3])>>>0;}for(let K=16;K<64;K+=1){let We=ii(E[K-15],7)^ii(E[K-15],18)^E[K-15]>>>3,Gt=ii(E[K-2],17)^ii(E[K-2],19)^E[K-2]>>>10;E[K]=E[K-16]+We+E[K-7]+Gt>>>0;}let I=r,C=a,j=i,te=s,G=u,de=_,Re=T,J=P;for(let K=0;K<64;K+=1){let We=ii(G,6)^ii(G,11)^ii(G,25),Gt=G&de^~G&Re,cr=J+We+Gt+LC[K]+E[K]>>>0,ae=ii(I,2)^ii(I,13)^ii(I,22),Yt=I&C^I&j^C&j,ln=ae+Yt>>>0;J=Re,Re=de,de=G,G=te+cr>>>0,te=j,j=C,C=I,I=cr+ln>>>0;}r=r+I>>>0,a=a+C>>>0,i=i+j>>>0,s=s+te>>>0,u=u+G>>>0,_=_+de>>>0,T=T+Re>>>0,P=P+J>>>0;}return [r,a,i,s,u,_,T,P].map(R=>R.toString(16).padStart(8,"0")).join("")}var u_={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"},d_="control_plane_source";function np(t,e={}){return {eventName:t,properties:{[d_]:u_[t],...e}}}var Ql=class{constructor(e){k(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 Gi(t){if(t)return t;if(Fr())try{return new Ql(window.localStorage)}catch{}return new po}function rp(t){if(t)return t;if(Fr())try{return new Ql(window.sessionStorage)}catch{}return new po}var BC=/^[a-z0-9._]{1,100}$/,wn={Persisted:"persisted",Transient:"transient"},Tn={Internal:"internal",External:"external"},_n={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 E_="x-revturbine-schema-exposure",KC="readOnly",$C="x-revturbine-decision-only",p_={[$C]:true},ma={[E_]:Tn.External},HC={[E_]:Tn.Internal};function jr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[KC]===true||(e[n]=r);}return z$1.object(e)}function wr(t){let e=jr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(BC)}):e}var {Unrestricted:pr}=_n,{Transient:Vr,Persisted:GC}=wn,{Internal:bs,External:li}=Tn;z$1.object({page:z$1.coerce.number().int().min(1).default(1).meta(pr),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(pr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li});var YC=t=>z$1.object({items:z$1.array(t).meta(pr),total:z$1.number().int().min(0).meta(pr),page:z$1.number().int().min(1).meta(pr),per_page:z$1.number().int().min(1).meta(pr),has_more:z$1.boolean().meta(pr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li}),Me=z$1.object({created_at:z$1.string().datetime().meta({...pr,readOnly:true}),updated_at:z$1.string().datetime().meta({...pr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li}),Ee=z$1.object({id:z$1.string().min(1).meta({...pr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li}),tt=z$1.object({tenant_id:z$1.string().min(1,"tenant_id is required").meta({...pr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":bs});z$1.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li});var Vm=z$1.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":Vr,"x-revturbine-schema-exposure":li}),R_=["allowed","limited","denied"];z$1.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li});var Sp=z$1.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li}),WC=z$1.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":li});z$1.union([z$1.boolean(),z$1.number(),z$1.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":bs});var Bn=z$1.string().min(1).max(200),gn=z$1.string().min(1).max(100),xs=z$1.string().max(500).optional(),zn=z$1.record(z$1.string(),z$1.unknown()).default({}),ic=z$1.number().int().min(10).max(100).multipleOf(10),Vn=z$1.string().datetime().nullable().default(null),yn=z$1.object({environment_id:z$1.string().min(1).default("production").meta({...pr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":bs}),xn=z$1.object({playbook_version_id:z$1.string().nullable().default(null).meta(pr),is_current:z$1.boolean().default(true).meta({...pr,readOnly:true}),is_deleted:z$1.boolean().default(false).meta({...pr,readOnly:true}),delete_date:z$1.string().datetime().nullable().default(null).meta({...pr,readOnly:true}),sequence:z$1.number().int().min(1).default(1).meta({...pr,readOnly:true}),base_sequence:z$1.number().int().nullable().default(null).meta({...pr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":bs}),ZC=Ee.merge(Me).merge(tt).merge(yn).extend({handle:gn.meta({...pr,readOnly:true}),active:z$1.boolean().default(true).meta({...pr,readOnly:true})});function sr(t){return ZC.meta({id:t,"x-revturbine-schema-persistence":GC,"x-revturbine-schema-exposure":bs})}var Pp=z$1.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":bs}),QC=z$1.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":Vr,"x-revturbine-schema-exposure":bs}),k_=z$1.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":Vr,"x-revturbine-schema-exposure":li}),Vt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ka={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},JC="x-revturbine-context",XC="x-revturbine-in-config",e0="x-revturbine-sdk-input",t0="x-revturbine-source",n0="x-revturbine-deprecation",r0={[Vt.Playbook]:Ka.Customer,[Vt.Branding]:Ka.Customer,[Vt.Billing]:Ka.Stripe,[Vt.Metering]:Ka.Customer,[Vt.CustomerOperations]:Ka.Runtime,[Vt.EventIngestion]:Ka.Runtime};function dn(t,e){return {[JC]:t,[XC]:e.inConfig??t===Vt.Playbook,[e0]:e.sdkInput,[t0]:e.source??r0[t]}}function ap(t){return {deprecated:true,[n0]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var A_={Named:"named",Minted:"minted"},w_="x-revturbine-schema-identity";function Or(t="handle"){return {[w_]:{kind:A_.Named,handleField:t}}}function ka(t="handle"){return {[w_]:{kind:A_.Minted,handleField:t}}}var se=t=>z$1.object({items:z$1.array(t)}),yt=z$1.object({error:z$1.string(),code:z$1.string(),request_id:z$1.string()}),y=t=>t,le=z$1.object({page:z$1.number().int().min(1).default(1).optional(),per_page:z$1.number().int().min(1).max(100).default(25).optional(),sort:z$1.string().optional(),order:z$1.enum(["asc","desc"]).default("asc").optional(),include_deleted:z$1.boolean().default(false).optional()}),{Unrestricted:Kt,Financial:Nm}=_n,{Persisted:cc,Transient:Bm}=wn,{External:wi}=Tn,a0=dn(Vt.Playbook,{sdkInput:true}),i0=dn(Vt.Playbook,{sdkInput:false}),Tp=dn(Vt.Billing,{sdkInput:false}),Ji=z$1.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":wi}),mc=z$1.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":wi}),zm=z$1.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":wi}),xo=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Kt,readOnly:true}),name:Bn.meta(Kt),handle:gn.meta(Kt),tier_position:z$1.number().int().min(0).default(0).meta(Kt),sort_order:z$1.number().int().default(0).meta(Kt),visibility:Ji.default("public").meta(Kt),metadata:zn.meta(Kt)}).meta({id:"Plan","x-revturbine-schema-persistence":cc,"x-revturbine-schema-exposure":wi,...a0,...Or()}),s0=sr("PlanAnchor"),So=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Kt,readOnly:true}),handle:gn.meta({...Kt,readOnly:true}),plan_id:z$1.string().min(1).meta(Kt),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(Kt),segment_id:z$1.string().nullable().default(null).meta(Kt),price_amount:z$1.number().min(0).meta(Nm),pricing_model:mc.meta(Kt),visibility:Ji.default("public").meta(Kt),stripe_price_id:z$1.string().optional().meta(Kt),price_source:zm.default("static").meta(Kt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":cc,"x-revturbine-schema-exposure":wi,...Tp,...ka()}),o0=sr("PlanVariationAnchor"),Po=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Kt,readOnly:true}),name:Bn.meta(Kt),handle:gn.meta(Kt),sort_order:z$1.number().int().default(0).meta(Kt),visibility:Ji.default("public").meta(Kt),metadata:zn.meta(Kt)}).meta({id:"AddOn","x-revturbine-schema-persistence":cc,"x-revturbine-schema-exposure":wi,...i0,...Or()}),l0=sr("AddOnAnchor"),To=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Kt,readOnly:true}),handle:gn.meta({...Kt,readOnly:true}),addon_id:z$1.string().min(1).meta(Kt),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(Kt),segment_id:z$1.string().nullable().default(null).meta(Kt),price_amount:z$1.number().min(0).meta(Nm),pricing_model:mc.meta(Kt),visibility:Ji.default("public").meta(Kt),stripe_price_id:z$1.string().optional().meta(Kt),price_source:zm.default("static").meta(Kt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":cc,"x-revturbine-schema-exposure":wi,...Tp,...ka()}),c0=sr("AddOnVariationAnchor"),m0=z$1.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Bm,"x-revturbine-schema-exposure":wi}),Io=Ee.merge(Me).merge(tt).extend({stripe_price_id:z$1.string().min(1).meta(Kt),stripe_product_id:z$1.string().min(1).meta(Kt),billing_period:m0.meta(Kt),unit_amount_cents:z$1.number().int().min(0).nullable().default(null).meta(Nm),currency:WC.meta(Nm),pricing_model:mc.meta(Kt),nickname:z$1.string().nullable().default(null).meta(Kt),is_mock:z$1.boolean().default(false).meta(Kt),last_updated_from_stripe:Vn.meta(Kt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":cc,"x-revturbine-schema-exposure":wi,...Tp});var u0=jr(xo),d0=jr(So),p0=jr(Po),g0=jr(To),h0=jr(Io);({"/api/plan-anchors":{get:y({operationId:"listPlanAnchors",requestParams:{query:le},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:se(s0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:y({operationId:"listPlans",requestParams:{query:le},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:se(xo)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:y({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wr(xo)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:xo}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:y({operationId:"getPlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:xo}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:y({operationId:"updatePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:u0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:xo}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:y({operationId:"deletePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:y({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:y({operationId:"listPlanVariationAnchors",requestParams:{query:le},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:se(o0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:y({operationId:"listPlanVariations",requestParams:{path:z$1.object({planId:z$1.string()}),query:le},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:se(So)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:y({operationId:"createPlanVariation",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wr(So)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:y({operationId:"getPlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:y({operationId:"updatePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:d0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:So}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:y({operationId:"deletePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:y({operationId:"listAddOnAnchors",requestParams:{query:le},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:se(l0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:y({operationId:"listAddOns",requestParams:{query:le},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:se(Po)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:y({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wr(Po)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:y({operationId:"getAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:y({operationId:"updateAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:p0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Po}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:y({operationId:"deleteAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:y({operationId:"listAddOnVariationAnchors",requestParams:{query:le},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:se(c0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:y({operationId:"listAddOnVariations",requestParams:{path:z$1.object({addonId:z$1.string()}),query:le},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:se(To)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:y({operationId:"createAddOnVariation",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wr(To)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:y({operationId:"getAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:y({operationId:"updateAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:g0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:To}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:y({operationId:"deleteAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:y({operationId:"listStripePrices",requestParams:{query:le},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:se(Io)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:y({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wr(Io)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:y({operationId:"getStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:y({operationId:"updateStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:h0}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Io}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:y({operationId:"deleteStripePrice",requestParams:{path:z$1.object({id:z$1.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:ye}=_n,{Persisted:Ip,Transient:ua}=wn,{Internal:j_,External:Jr}=Tn,O_=dn(Vt.Playbook,{sdkInput:true}),f0=dn(Vt.Playbook,{inConfig:false,sdkInput:false}),q_=z$1.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":ua,"x-revturbine-schema-exposure":Jr}),Km=z$1.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),_0=z$1.enum(R_).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),y0=z$1.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),D_=z$1.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),sc=z$1.object({entitlement_id:z$1.string().min(1).meta(ye),entitlement_handle:z$1.string().min(1).meta(ye),status:_0.meta(ye),limit:z$1.number().optional().meta(ye),used:z$1.number().optional().meta(ye),allocation:Km.optional().meta(ye),enforcement:D_.optional().meta(ye),source:y0.optional().meta(ye),plan_id:z$1.string().optional().meta(ye),segment_id:z$1.string().optional().meta(ye),seat_type_id:z$1.string().optional().meta(ye),rule_id:z$1.string().optional().meta(ye)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr,..._n.Operational});z$1.object({account:z$1.record(z$1.string(),sc).optional().meta(ye),instance:z$1.record(z$1.string(),sc).optional().meta(ye),user:z$1.record(z$1.string(),sc).optional().meta(ye)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr,..._n.Operational});var v0=z$1.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),b0=z$1.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),U_=z$1.object({kind:b0.meta(ye),id:z$1.string().min(1).meta(ye)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),x0=z$1.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),Co=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...ye,readOnly:true}),name:Bn.meta(ye),handle:gn.meta(ye),customer_facing_description:z$1.string().max(500).optional().meta(ye),type:Sp.meta(ye),unit:z$1.string().max(100).optional().meta(ye),period_scope:q_.optional().meta(ye),allocation:Km.optional().meta(ye),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(ye),sort_order:z$1.number().int().default(0).meta(ye),metadata:zn.meta(ye)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":Jr,...O_,...Or()}),S0=sr("EntitlementAnchor"),Ao=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...ye,readOnly:true}),handle:gn.meta({...ye,readOnly:true}),entitlement_id:z$1.string().min(1).meta(ye),targets:z$1.array(U_).min(1).meta(ye),segment_ids:z$1.array(z$1.string()).default([]).meta(ye),visibility:v0.default("public").meta(ye),period_scope:q_.optional().meta(ye),instance:z$1.string().max(100).optional().meta(ye),reset_period:x0.optional().meta(ye),limit_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(ye),enforcement:D_.optional().meta(ye),warning_threshold_percent:ic.optional().meta(ye),overage_price_ref:z$1.string().optional().meta(ye),grace_period_hours:z$1.number().int().min(0).optional().meta(ye),tier_value:z$1.string().optional().meta(ye),rate_value:z$1.number().optional().meta(ye),initial_grant:z$1.number().optional().meta(ye),allowance_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(ye),rollover_enabled:z$1.boolean().optional().meta(ye),max_balance:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().default(null).meta(ye),seat_type_id:z$1.string().optional().meta(ye),included_count:z$1.union([z$1.number().int(),z$1.literal("unlimited")]).optional().meta(ye),at_limit_behavior:z$1.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ye),stripe_metered_price_id:z$1.string().optional().meta(ye),enabled:z$1.boolean().optional().meta(ye),allocation:Km.optional().meta(ye),max_seats:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().optional().meta(ye),amount_cents:z$1.number().int().optional().meta(ye),currency:z$1.string().optional().meta(ye)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":j_,...O_,...ka()}),P0=sr("EntitlementRuleAnchor");Ao.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var T0=z$1.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),I0=z$1.object({code:T0.meta(ye),message:z$1.string().min(1).meta(ye),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(ye)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr}),ip=Ao.extend({warnings:z$1.array(I0).optional().meta(ye)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ua,"x-revturbine-schema-exposure":Jr});var sp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({handle:gn.meta({...ye,readOnly:true}),rule_id:z$1.string().min(1).meta(ye),experiment_id:z$1.string().min(1).meta(ye),variant_name:z$1.string().min(1).max(200).meta(ye),is_control:z$1.boolean().default(false).meta(ye),override_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(ye)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":j_,...f0,...ka()}),C0=jr(Co),E0=jr(Ao);({"/api/entitlement-anchors":{get:y({operationId:"listEntitlementAnchors",requestParams:{query:le},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:se(S0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:y({operationId:"listEntitlementRuleAnchors",requestParams:{query:le},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:se(P0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:y({operationId:"listEntitlements",requestParams:{query:le},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:se(Co)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:y({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:wr(Co)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:y({operationId:"getEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:y({operationId:"updateEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:C0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Co}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:y({operationId:"deleteEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:y({operationId:"listEntitlementRules",requestParams:{path:z$1.object({entitlementId:z$1.string()}),query:le},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:se(Ao)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:y({operationId:"createEntitlementRule",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:wr(Ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ip}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:y({operationId:"updateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:E0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ip}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:y({operationId:"duplicateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ip}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:y({operationId:"listEntitlementRuleVariants",requestParams:{path:z$1.object({ruleId:z$1.string()}),query:le},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:se(sp)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:y({operationId:"createEntitlementRuleVariant",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:wr(sp)}}},responses:{201:{description:"Created",content:{"application/json":{schema:sp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Ue}=_n,{Persisted:$m,Transient:Xi}=wn,{External:Aa}=Tn,M_=dn(Vt.Playbook,{sdkInput:true});dn(Vt.Playbook,{inConfig:false,sdkInput:false});var R0=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),k0=dn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ka.Runtime}),A0=z$1.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var F_=z$1.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa}),L_=z$1.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa}),w0=z$1.object({count:z$1.number().int().positive().meta(Ue),period:L_.meta(Ue)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa});z$1.object({surface_type:z$1.string().min(1).meta(Ue),rules:z$1.array(w0).meta(Ue),cooldown_ms:z$1.number().int().nonnegative().optional().meta(Ue)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":$m,"x-revturbine-schema-exposure":Aa,..._n.Operational,...R0});var j0=z$1.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":Xi,"x-revturbine-schema-exposure":Aa}),Ro=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Ue,readOnly:true}),name:Bn.meta(Ue),handle:gn.meta(Ue),description:xs.meta(Ue),category:F_.meta(Ue),drag_order_in_category:z$1.number().int().default(0).meta(Ue),surface_slot_id:z$1.string().optional().meta(Ue),entitlement_id:z$1.string().optional().meta(Ue),tier_threshold:z$1.string().optional().meta(Ue),threshold_percent:ic.optional().meta(Ue),trial_type:z$1.enum(["free","reverse"]).optional().meta(Ue),trigger_type:z$1.string().optional().meta(Ue),trial_progress_percent:z$1.number().min(0).max(100).optional().meta(Ue),days_before_end:z$1.number().int().min(0).optional().meta(Ue),qualifier:A0.optional().meta(Ue),activation_window_start:z$1.string().datetime().optional().meta(Ue),activation_window_end:z$1.string().datetime().optional().meta(Ue),metadata:zn.meta(Ue)}).meta({id:"Placement","x-revturbine-schema-persistence":$m,"x-revturbine-schema-exposure":Aa,...M_,...Or()}),O0=sr("PlacementAnchor"),q0=z$1.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa}),D0=z$1.object({code:q0.meta(Ue),message:z$1.string().min(1).meta(Ue),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(Ue)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa}),g_=Ro.extend({warnings:z$1.array(D0).optional().meta(Ue)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa});var U0=z$1.object({label:z$1.string().min(1).max(200).meta(Ue),cta_path_type:j0.meta(Ue),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ue)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Xi,"x-revturbine-schema-exposure":Aa}),rc=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Ue,readOnly:true}),handle:gn.meta({...Ue,readOnly:true}),placement_id:z$1.string().min(1).meta(Ue),drag_order:z$1.number().int().default(0).meta(Ue),target_plan_ids:z$1.array(z$1.string()).default([]).meta(Ue),target_plan_billing_cadences:z$1.array(z$1.string()).default([]).meta(Ue),target_segments:z$1.array(z$1.string()).default([]).meta(Ue),surface_slot_ids:z$1.array(z$1.string()).default([]).meta(Ue),surface_template_id:z$1.string().min(1).meta(Ue),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ue),cta_list:z$1.array(U0).default([]).meta(Ue),max_per_period:z$1.number().int().min(0).nullable().default(null).meta(Ue),max_period_unit:L_.default("session").meta(Ue),cooldown_after_dismiss_days:z$1.number().int().min(0).default(7).meta(Ue),remind_later_minutes:z$1.number().int().min(0).nullable().default(null).meta(Ue),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ue),recommendation_plan_override:z$1.string().optional().meta(Ue)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":$m,"x-revturbine-schema-exposure":Aa,...M_,...ka()}),M0=sr("PlacementPayloadAnchor"),F0=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({surface_slot_handle:z$1.string().min(1).max(200).meta(Ue),surface_type:Vm.meta(Ue),surface_template_ids:z$1.array(z$1.string()).default([]).meta(Ue),surface_slot_category:z$1.enum(["fixed","gated","triggered"]).default("fixed").meta(Ue),first_seen:z$1.string().datetime().meta({...Ue,readOnly:true}),last_seen:z$1.string().datetime().meta({...Ue,readOnly:true}),status:z$1.enum(["active","inactive","new"]).default("new").meta(Ue),placement_count:z$1.number().int().min(0).default(0).meta({...Ue,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":$m,"x-revturbine-schema-exposure":Aa,...k0,...Or("surface_slot_handle")}),L0=jr(Ro),N0=jr(rc);({"/api/placement-anchors":{get:y({operationId:"listPlacementAnchors",requestParams:{query:le},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:se(O0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:y({operationId:"listPlacements",requestParams:{query:le},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:se(Ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:y({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:wr(Ro)}}},responses:{201:{description:"Created",content:{"application/json":{schema:g_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:y({operationId:"getPlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:y({operationId:"updatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:L0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:g_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:y({operationId:"deletePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:y({operationId:"duplicatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ro}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:y({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({category:F_,ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:y({operationId:"listPlacementPayloadAnchors",requestParams:{query:le},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:se(M0)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:y({operationId:"listPlacementPayloads",requestParams:{path:z$1.object({placementId:z$1.string()}),query:le},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:se(rc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:y({operationId:"createPlacementPayload",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:wr(rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:y({operationId:"updatePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:N0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:y({operationId:"deletePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:y({operationId:"listSurfaceSlots",requestParams:{query:le},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:se(F0)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Ar,Pii:wo}=_n,{Persisted:Cp,Transient:Ep}=wn,{Internal:Oo}=Tn,V0=dn(Vt.CustomerOperations,{sdkInput:false}),B0=z$1.object({external_id:z$1.string().min(1).meta(wo),traits:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(wo),plan_id:z$1.string().optional().meta(Ar)}).meta({id:"Identity","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":Oo}),N_=z$1.enum(["payment_failed","payment_method_missing"]),h_=Ee.merge(Me).merge(tt).extend({external_id:z$1.string().min(1).meta(wo),identity:B0.meta(wo),stripe_customer_id:z$1.string().optional().meta(Ar),current_plan_id:z$1.string().optional().meta(Ar),subscription_status:z$1.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Ar),status:z$1.enum(["active","churned","trial","suspended"]).default("active").meta(Ar),billing_health_issues:z$1.array(N_).default([]).meta(Ar),metadata:zn.meta(Ar)}).meta({id:"Customer","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":Oo}),z0=z$1.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Ep,"x-revturbine-schema-exposure":Oo}),K0=z$1.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Ep,"x-revturbine-schema-exposure":Oo}),$0=z$1.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Ep,"x-revturbine-schema-exposure":Oo}),Yi=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({handle:gn.meta({...Ar,readOnly:true}),customer_id:z$1.string().min(1).meta(wo),customer_id_list:z$1.array(z$1.string()).optional().meta(wo),override_type:K0.meta(Ar),target_id:z$1.string().min(1).meta(Ar),value:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ar),duration_type:z0.default("permanent").meta(Ar),duration_value:z$1.string().optional().meta(Ar),expiry_date:Vn.meta(Ar),status:$0.default("active").meta(Ar),reason:z$1.string().max(500).optional().meta(Ar),created_by:z$1.string().optional().meta(Ar)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":Oo,...V0,...ka()});({"/api/customers":{get:y({operationId:"listCustomers",requestParams:{query:le},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:se(h_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:y({operationId:"getCustomer",requestParams:{path:z$1.object({customerId:z$1.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:h_}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:y({operationId:"listCustomerOverrides",requestParams:{query:le},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:se(Yi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:y({operationId:"getCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:y({operationId:"updateCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Yi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:y({operationId:"deleteCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:y({operationId:"revokeCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:Yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:y({operationId:"duplicateCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({customer_id:z$1.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:Yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:ke,Pii:ac,Financial:op}=_n,{Persisted:V_,Transient:ci}=wn,{External:qo,Internal:uc}=Tn,Rp=z$1.object({in_trial:z$1.boolean().meta(ke),trial_type:z$1.string().optional().meta(ke),plan_handle:z$1.string().optional().meta(ke),state:z$1.enum(["active","running_out","expired","converted","none"]).optional().meta(ke),trial_limit_type:z$1.enum(["time","usage"]).optional().meta(ke),progress_percent:z$1.number().min(0).max(100).optional().meta(ke),day_number:z$1.number().int().min(0).optional().meta(ke),days_remaining:z$1.number().int().min(0).optional().meta(ke),usage_entitlement_handle:z$1.string().optional().meta(ke),usage_consumed:z$1.number().int().min(0).optional().meta(ke),usage_remaining:z$1.number().int().min(0).optional().meta(ke),usage_limit:z$1.number().int().min(0).optional().meta(ke)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":qo}),B_=z$1.object({entitlement_handle:z$1.string().min(1).meta(ke),unit:z$1.string().min(1).meta(ke),amount:z$1.number().min(0).meta(ke),limit:z$1.number().min(0).optional().meta(ke),reset_date:z$1.string().optional().meta(ke)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":qo});z$1.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":qo});var z_=z$1.object({handle:z$1.string().min(1).meta(ke),name:z$1.string().min(1).meta(ke),price:z$1.string().optional().meta(ke),billing_period:z$1.enum(["monthly","annual","none"]).optional().meta(ke)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":qo}),H0=z$1.object({product_instance_id:z$1.string().min(1).meta(ke),user_id:z$1.string().min(1).meta(ac),plan:z_.optional().meta(ke),usage:z$1.record(z$1.string(),B_).default({}).meta(ke),trial:Rp.optional().meta(ke),entitlements:z$1.record(z$1.string(),z$1.union([z$1.boolean(),sc])).default({}).meta(ke)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":V_,"x-revturbine-schema-exposure":qo}),go=Ee.merge(tt).merge(Me).extend({user_id:z$1.string().min(1).meta(ac),account_id:z$1.string().min(1).nullable().optional().meta(ac),email:z$1.string().email().nullable().optional().meta(ac),email_type:z$1.string().optional().meta(ke),plan_handle:z$1.string().min(1).optional().meta(ke),plan:z_.optional().meta(ke),usage:z$1.record(z$1.string(),B_).default({}).meta(ke),trial:Rp.optional().meta(ke),payment_failed:z$1.boolean().optional().meta(ke),payment_at_risk:z$1.boolean().optional().meta(ke),tiers:z$1.record(z$1.string(),z$1.string()).optional().meta(ke),entitlements:z$1.record(z$1.string(),z$1.union([z$1.boolean(),sc])).default({}).meta(ke),instances:z$1.array(H0).optional().meta(ke),custom:z$1.record(z$1.string(),z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.null()])).default({}).meta(ac),personalization:z$1.record(z$1.string(),z$1.union([z$1.string(),z$1.number()])).default({}).meta({...ke,"x-revturbine-schema-persistence":ci}),derived_config_version:z$1.string().nullable().optional().meta(ke),context_hash:z$1.string().nullable().optional().meta(ke),derived_computed_at:Vn.meta(ke),activity_score:z$1.number().int().min(0).nullable().optional().meta(ke),activity_score_computed_at:z$1.string().datetime().nullable().optional().meta(ke),experiments:z$1.record(z$1.string(),z$1.string()).optional().meta(ke)}).meta({id:"UserContext","x-revturbine-schema-persistence":V_,"x-revturbine-schema-exposure":qo}),G0=z$1.object({status:z$1.enum(["active","running_out","expired","converted","none"]).meta({...ke,...ma}),days_remaining:z$1.number().int().min(0).optional().meta({...ke,...ma}),ends_at:z$1.string().optional().meta({...ke,...ma})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":uc}),Y0=z$1.object({health:z$1.enum(["ok","attention_required"]).optional().meta({...ke,...ma}),failed_payment_reason:z$1.string().optional().meta({...op,...p_}),issues:z$1.array(N_).optional().meta({...op,...p_}),provider_subscription_id:z$1.string().optional().meta({...op,...HC})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":uc}),W0=z$1.object({can_upgrade:z$1.boolean().optional().meta({...ke,...ma}),can_manage_billing:z$1.boolean().optional().meta({...ke,...ma})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":uc}),Z0=z$1.object({handle:z$1.string().min(1).optional().meta({...ke,...ma}),name:z$1.string().min(1).optional().meta({...ke,...ma})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":uc});z$1.object({subject:z$1.string().min(1).meta({...ke,...ma}),context_version:z$1.string().optional().meta({...ke,...ma}),trial:G0.optional().meta({...ke,...ma}),billing:Y0.optional().meta({...ke,...ma}),plan:Z0.optional().meta({...ke,...ma}),capabilities:W0.optional().meta({...ke,...ma})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":uc});({"/api/user-contexts":{get:y({operationId:"listUserContexts",requestParams:{query:le},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:se(go)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:y({operationId:"getUserContext",requestParams:{path:z$1.object({userContextId:z$1.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:go}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:y({operationId:"updateUserContext",requestParams:{path:z$1.object({userContextId:z$1.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:go.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:go}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:y({operationId:"deleteUserContext",requestParams:{path:z$1.object({userContextId:z$1.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:Wn}=_n,{Persisted:kp,Transient:K_}=wn,{Internal:dc}=Tn,Q0=dn(Vt.Playbook,{sdkInput:true}),$_=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),J0=z$1.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":K_,"x-revturbine-schema-exposure":dc}),X0=z$1.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":K_,"x-revturbine-schema-exposure":dc}),lp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Wn,readOnly:true}),name:Bn.meta(Wn),handle:gn.optional().meta(Wn),category:J0.default("custom").meta(Wn),visibility_toggle:z$1.boolean().default(true).meta(Wn),source_type:X0.default("system").meta(Wn),estimated_size:z$1.number().int().min(0).optional().meta(Wn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":kp,"x-revturbine-schema-exposure":dc,...$_,...Or()}),eE=sr("SegmentDimensionAnchor"),cp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Wn,readOnly:true}),dimension_id:z$1.string().min(1).meta(Wn),name:Bn.meta(Wn),handle:gn.meta(Wn),description:xs.meta(Wn),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Wn),used_in_count:z$1.number().int().min(0).default(0).meta({...Wn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":kp,"x-revturbine-schema-exposure":dc,...$_,...Or()}),tE=sr("SegmentValueAnchor");Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Wn,readOnly:true}),name:Bn.meta(Wn),handle:gn.meta(Wn),description:xs.meta(Wn),rules:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Wn),experiment_id:z$1.string().min(1).optional().meta(Wn),is_active:z$1.boolean().default(true).meta(Wn),estimated_size:z$1.number().int().min(0).nullable().default(null).meta(Wn),metadata:zn.meta(Wn)}).meta({id:"Segment","x-revturbine-schema-persistence":kp,"x-revturbine-schema-exposure":dc,...Q0,...Or()});({"/api/segment-dimension-anchors":{get:y({operationId:"listSegmentDimensionAnchors",requestParams:{query:le},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:se(eE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:y({operationId:"listSegmentValueAnchors",requestParams:{query:le},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:se(tE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:y({operationId:"listSegmentDimensions",requestParams:{query:le},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:se(lp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:y({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string(),description:z$1.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:lp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:y({operationId:"deleteCustomDimension",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:y({operationId:"toggleDimensionVisibility",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({visible:z$1.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:y({operationId:"listSegmentValues",requestParams:{path:z$1.object({dimensionId:z$1.string()}),query:le},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:se(cp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:y({operationId:"createSegmentValue",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string(),handle:z$1.string(),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:cp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:y({operationId:"updateSegmentValue",requestParams:{path:z$1.object({valueId:z$1.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().optional(),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:cp}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:y({operationId:"deleteSegmentValue",requestParams:{path:z$1.object({valueId:z$1.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:gt}=_n,{Persisted:Do,Transient:H_}=wn,{External:es}=Tn,Ap=dn(Vt.Playbook,{sdkInput:true}),nE=dn(Vt.Playbook,{inConfig:false,sdkInput:false}),rE=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),aE=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ka.CodeConstant});Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...gt,readOnly:true}),handle:gn.meta({...gt,readOnly:true}),name:Bn.meta(gt),channel:z$1.enum(["in_app","email","push","sms","webhook"]).meta(gt),subject:z$1.string().max(500).optional().meta(gt),body:z$1.string().meta(gt),template_variables:z$1.array(z$1.string()).default([]).meta(gt),metadata:zn.meta(gt)}).meta({id:"Message","x-revturbine-schema-persistence":Do,"x-revturbine-schema-exposure":es,...nE,...ka()});var mp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...gt,readOnly:true}),name:Bn.meta(gt),handle:gn.meta(gt),action_type:k_.meta(gt),target_url:z$1.string().optional().meta(gt),target_plan_id:z$1.string().optional().meta(gt),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(gt),metadata:zn.meta(gt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Do,"x-revturbine-schema-exposure":es,...Ap,...Or()}),iE=sr("CtaPathAnchor"),sE=z$1.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":Do,"x-revturbine-schema-exposure":es,...aE}),oE=z$1.object({name:z$1.string().min(1),field_type:sE,required:z$1.boolean().default(false),default_value:z$1.unknown().optional(),order:z$1.number().int().min(0).optional(),help_text:z$1.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":Do,"x-revturbine-schema-exposure":es,...rE}),up=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...gt,readOnly:true}),name:Bn.meta(gt),handle:gn.meta(gt),surface_type:QC.meta(gt),field_definitions:z$1.array(oE).default([]).meta(gt),description:xs.meta(gt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Do,"x-revturbine-schema-exposure":es,...Ap,...Or()}),lE=sr("SurfaceTemplateAnchor"),dp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...gt,readOnly:true}),name:Bn.meta(gt),handle:gn.meta(gt),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(gt),variation_dimension_id:z$1.string().optional().meta(gt),variation_values:z$1.array(z$1.object({segment_value_id:z$1.string(),content_fields_override:z$1.record(z$1.string(),z$1.unknown())})).optional().meta(gt),notes:z$1.string().max(1e3).optional().meta(gt),used_in_count:z$1.number().int().min(0).default(0).meta({...gt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Do,"x-revturbine-schema-exposure":es,...Ap,...Or()}),cE=sr("MessageBlockRecordAnchor"),mE=z$1.object({segment_id:z$1.string().min(1).meta(gt),message_block_id:z$1.string().min(1).meta(gt),ui_path_id:z$1.string().optional().meta(gt),promotion_id:z$1.string().optional().meta(gt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":H_,"x-revturbine-schema-exposure":es});z$1.object({payload_id:z$1.string().min(1).meta(gt),tenant_id:z$1.string().min(1).meta(gt),name:Bn.meta(gt),surface_template_id:z$1.string().min(1).meta(gt),default_message_block_id:z$1.string().min(1).meta(gt),segment_content_map:z$1.array(mE).optional().meta(gt),ui_path_id:z$1.string().optional().meta(gt),promotion_id:z$1.string().optional().meta(gt),status:z$1.enum(["draft","active","inactive"]).meta(gt),created_at:z$1.string().datetime().optional().meta({...gt,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...gt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":H_,"x-revturbine-schema-exposure":es});({"/api/surface-template-anchors":{get:y({operationId:"listSurfaceTemplateAnchors",requestParams:{query:le},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:se(lE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:y({operationId:"listSurfaceTemplates",requestParams:{query:le},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:se(up)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:y({operationId:"listMessageBlockRecordAnchors",requestParams:{query:le},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:se(cE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:y({operationId:"listMessageBlocks",requestParams:{query:le},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:se(dp)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:y({operationId:"listCtaPathAnchors",requestParams:{query:le},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:se(iE)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:y({operationId:"listCtaPaths",requestParams:{query:le},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:se(mp)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:ko,Pii:uE}=_n,{Persisted:G_}=wn,{Internal:dE,External:pE}=Tn,gE=dn(Vt.Branding,{sdkInput:false});z$1.object({id:z$1.string().min(1).meta({...ko,readOnly:true}),name:z$1.string().min(1).max(120).meta(ko),mode:z$1.enum(["light","dark","system"]).default("system").meta(ko),tokens:z$1.record(z$1.string(),z$1.string()).default({}).meta(ko)}).meta({id:"Theme","x-revturbine-schema-persistence":G_,"x-revturbine-schema-exposure":pE,...gE});var f_=Ee.merge(Me).extend({user_id:z$1.string().min(1).meta(uE),scope:z$1.string().min(1).meta(ko),preferences:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(ko)}).meta({id:"UiPreference","x-revturbine-schema-persistence":G_,"x-revturbine-schema-exposure":dE});({"/api/ui-preferences":{get:y({operationId:"listUiPreferences",requestParams:{query:le},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:se(f_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:y({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z$1.array(jr(f_))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z$1.object({updated:z$1.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:St,Financial:si}=_n,{Persisted:Y_,Transient:pc}=wn,{External:gc,Internal:W_}=Tn,hE=z$1.object({month:z$1.string().meta(St),cohort_size:z$1.number().int().min(0).meta(St),retained:z$1.number().int().min(0).meta(St),retention_rate:z$1.number().min(0).max(1).meta(St),revenue_cents:z$1.number().int().min(0).meta(si)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":pc,"x-revturbine-schema-exposure":gc}),fE=z$1.object({step:z$1.string().meta(St),label:z$1.string().meta(St),count:z$1.number().int().min(0).meta(St),conversion_rate:z$1.number().min(0).max(1).meta(St),drop_off_rate:z$1.number().min(0).max(1).meta(St)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":pc,"x-revturbine-schema-exposure":gc}),_E=z$1.object({placement_id:z$1.string().meta(St),placement_name:z$1.string().meta(St),impressions:z$1.number().int().min(0).meta(St),clicks:z$1.number().int().min(0).meta(St),conversions:z$1.number().int().min(0).meta(St),ctr:z$1.number().min(0).meta(St),conversion_rate:z$1.number().min(0).meta(St),revenue_cents:z$1.number().int().min(0).meta(si)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":pc,"x-revturbine-schema-exposure":gc}),yE=z$1.object({date:z$1.string().meta(St),mrr_cents:z$1.number().int().min(0).meta(si),arr_cents:z$1.number().int().min(0).meta(si),new_mrr_cents:z$1.number().int().min(0).meta(si),churned_mrr_cents:z$1.number().int().min(0).meta(si),expansion_mrr_cents:z$1.number().int().min(0).meta(si),net_new_mrr_cents:z$1.number().int().meta(si)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":pc,"x-revturbine-schema-exposure":gc}),vE=z$1.object({metric_key:z$1.string().min(1).meta(St),label:z$1.string().meta(St),current_value:z$1.number().meta(si),previous_value:z$1.number().nullable().default(null).meta(si),change_percent:z$1.number().nullable().default(null).meta(St),period:z$1.string().meta(St),unit:z$1.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(St)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":pc,"x-revturbine-schema-exposure":gc}),__=Ee.merge(Me).merge(tt).extend({report_type:z$1.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(St),severity:Pp.meta(St),resource_type:z$1.string().min(1).meta(St),resource_id:z$1.string().min(1).meta(St),summary:z$1.string().max(1e3).meta(St),expected_value:z$1.unknown().optional().meta(St),actual_value:z$1.unknown().optional().meta(St),affected_customer_count:z$1.number().int().min(0).default(0).meta(St),is_resolved:z$1.boolean().default(false).meta(St),resolved_at:Vn.meta(St),metadata:zn.meta(St)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Y_,"x-revturbine-schema-exposure":W_}),y_=Ee.merge(Me).merge(tt).extend({alert_type:z$1.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(St),severity:Pp.meta(St),title:z$1.string().min(1).max(300).meta(St),description:z$1.string().max(2e3).meta(St),resource_type:z$1.string().optional().meta(St),resource_id:z$1.string().optional().meta(St),is_acknowledged:z$1.boolean().default(false).meta(St),acknowledged_at:Vn.meta(St),acknowledged_by:z$1.string().nullable().default(null).meta(St),metadata:zn.meta(St)}).meta({id:"Alert","x-revturbine-schema-persistence":Y_,"x-revturbine-schema-exposure":W_});({"/api/analytics/kpis":{get:y({operationId:"listKpiAggregates",requestParams:{query:le},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:se(vE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:y({operationId:"listPlacementPerformance",requestParams:{query:le},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:se(_E)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:y({operationId:"listRevenueMetrics",requestParams:{query:le},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:se(yE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:y({operationId:"listCohortMetrics",requestParams:{query:le},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:se(hE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:y({operationId:"listFunnelSteps",requestParams:{query:le},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:se(fE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:y({operationId:"listDriftReports",requestParams:{query:le},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:se(__)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:y({operationId:"resolveDriftReport",requestParams:{path:z$1.object({reportId:z$1.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:__}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:y({operationId:"listAlerts",requestParams:{query:le},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:se(y_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:y({operationId:"acknowledgeAlert",requestParams:{path:z$1.object({alertId:z$1.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:y_}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:v}=_n,{Transient:bE}=wn,{Internal:xE}=Tn,$e=t=>({id:t,"x-revturbine-schema-persistence":bE,"x-revturbine-schema-exposure":xE}),SE=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,Z_=/^[a-z][a-z0-9_-]{0,99}$/,Zt=z$1.string().regex(SE).max(120),ya=z$1.string().regex(Z_),v_=Zt.meta($e("AnalyticsSemanticId")),hc=z$1.enum(["account","user","billing_unit","organization"]).meta($e("AnalyticsAnalyticalUnit")),Hm=z$1.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta($e("AnalyticsQueryFamily")),Gm=z$1.enum(["total","revturbine_tracked","revturbine_influenced"]).meta($e("AnalyticsSourceScope")),Q_=z$1.enum(["as_of_event","current"]).meta($e("AnalyticsHistoricalMode")),PE=z$1.enum(["hour","day","week","month","quarter"]).meta($e("AnalyticsTimeGrain")),wp=z$1.enum(["none","previous_period","previous_year"]).meta($e("AnalyticsCompareMode")),Ym=z$1.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta($e("AnalyticsFilterOperator")),jp=z$1.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta($e("AnalyticsFilterControl")),TE=z$1.enum(["low","medium","high"]).meta($e("AnalyticsCardinalityClass")),Op=z$1.enum(["string","number","currency","percent","date","datetime","boolean"]).meta($e("AnalyticsFieldType")),IE=z$1.enum(["string","number","boolean","date","datetime","id","enum"]).meta($e("AnalyticsDimensionType")),J_=z$1.enum(["filter","group","split","sort"]).meta($e("AnalyticsDimensionCapability")),CE=z$1.enum(["private","team","tenant"]).meta($e("AnalyticsViewVisibility")),b_=z$1.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta($e("AnalyticsCustomizationCapability")),EE=z$1.enum(["unrestricted","pii","financial","operational"]).meta($e("AnalyticsClassification")),va=z$1.strictObject({value:z$1.string().min(1).max(300).meta(v),key:z$1.string().max(120).optional().meta(v)}).meta($e("LocalizedText")),xp=z$1.union([z$1.string().max(200),z$1.number(),z$1.boolean(),z$1.null()]),Wm=z$1.union([xp,z$1.array(xp).max(100),z$1.strictObject({preset:z$1.string().regex(/^[a-z0-9_]{1,20}$/).meta(v),compare:wp.optional().meta(v)}),z$1.strictObject({min:z$1.number().optional().meta(v),max:z$1.number().optional().meta(v)})]).meta($e("AnalyticsFilterValue")),qp=z$1.strictObject({dimension:Zt.meta(v),operator:Ym.meta(v),value:Wm.optional().meta(v)}).meta($e("AnalyticsSemanticFilter")),oc=z$1.strictObject({type:z$1.enum(["number","currency","percent","duration"]).meta(v),decimals:z$1.number().int().min(0).max(6).optional().meta(v),compact:z$1.boolean().optional().meta(v)}).meta($e("AnalyticsFormatSpec")),RE=z$1.strictObject({legend:z$1.enum(["none","top","right","bottom","left"]).optional().meta(v),value_labels:z$1.boolean().optional().meta(v),reference_lines:z$1.array(z$1.strictObject({value:z$1.number().meta(v),label:va.optional().meta(v)})).max(5).optional().meta(v),x_axis_format:oc.optional().meta(v),y_axis_format:oc.optional().meta(v),empty_state:z$1.enum(["blank","message"]).optional().meta(v)}).meta($e("AnalyticsSafeChartOptions")),Zm=z$1.object({deprecated:z$1.boolean().meta(v),replaced_by:Zt.optional().meta(v)}).meta($e("AnalyticsCatalogDeprecation")),kE=Zm,AE=z$1.object({id:Zt.meta(v),label:z$1.string().min(1).max(120).meta(v),description:z$1.string().max(500).optional().meta(v),when_to_use:z$1.string().max(500).optional().meta(v),do_not_use_for:z$1.string().max(500).optional().meta(v),type:IE.meta(v),operators:z$1.array(Ym).min(1).meta(v),control:jp.meta(v),capabilities:z$1.array(J_).min(1).meta(v),cardinality:TE.meta(v),classification:EE.default("unrestricted").meta(v),historical_mode:Q_.optional().meta(v),allowed_concepts:z$1.array(Zt).optional().meta(v),exclude_from_segment_picker:z$1.boolean().default(false).meta(v),deprecation:Zm.optional().meta(v)}).meta($e("AnalyticsCatalogDimension")),wE=z$1.object({id:Zt.meta(v),label:z$1.string().min(1).max(120).meta(v),description:z$1.string().max(500).optional().meta(v),when_to_use:z$1.string().max(500).optional().meta(v),do_not_use_for:z$1.string().max(500).optional().meta(v),value_type:Op.meta(v),format:oc.optional().meta(v),source_scope:Gm.optional().meta(v),deprecation:Zm.optional().meta(v)}).meta($e("AnalyticsCatalogMetric")),jE=z$1.object({id:Zt.meta(v),version:z$1.number().int().min(1).meta(v),label:z$1.string().min(1).max(120).meta(v),description:z$1.string().max(500).optional().meta(v),when_to_use:z$1.string().max(500).optional().meta(v),do_not_use_for:z$1.string().max(500).optional().meta(v),grain:z$1.array(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(v),analytical_units:z$1.array(hc).min(1).meta(v),primary_time_dimension:Zt.meta(v),historical_mode:Q_.meta(v),dimensions:z$1.array(Zt).min(1).meta(v),metrics:z$1.array(Zt).min(1).meta(v),query_families:z$1.array(Hm).min(1).meta(v),source_scope:Gm.meta(v),coverage_metric:Zt.optional().meta(v),deprecation:Zm.optional().meta(v)}).meta($e("AnalyticsCatalogConcept")),X_=z$1.strictObject({field:Zt.meta(v),direction:z$1.enum(["asc","desc"]).meta(v)}),ey=z$1.strictObject({dimension:Zt.meta(v),grain:PE.meta(v)}),OE=z$1.strictObject({concept:Zt.meta(v),family:Hm.meta(v),metrics:z$1.array(Zt).min(1).max(10).meta(v),group_by:z$1.array(Zt).max(3).optional().meta(v),time:ey.optional().meta(v),filters_from:z$1.array(ya).max(20).optional().meta(v),fixed_filters:z$1.array(qp).max(20).optional().meta(v),compare:wp.optional().meta(v),order_by:z$1.array(X_).max(3).optional().meta(v),limit:z$1.number().int().min(1).max(1e3).optional().meta(v)}).meta($e("AnalyticsViewQuery")),qE=z$1.strictObject({type:z$1.literal("metric").meta(v),value:Zt.meta(v),comparison:Zt.optional().meta(v),format:oc.optional().meta(v)}).meta($e("AnalyticsRenderMetric")),DE=z$1.strictObject({type:z$1.literal("cartesian").meta(v),mark:z$1.enum(["line","area","bar","stacked_bar","scatter"]).meta(v),encoding:z$1.strictObject({x:Zt.meta(v),y:z$1.union([Zt,z$1.array(Zt).min(1).max(5)]).meta(v),color:Zt.optional().meta(v),facet:Zt.optional().meta(v)}).meta(v),options:RE.optional().meta(v)}).meta($e("AnalyticsRenderCartesian")),UE=z$1.strictObject({type:z$1.literal("funnel").meta(v),stages:z$1.array(Zt).min(2).max(10).meta(v),split_by:Zt.optional().meta(v)}).meta($e("AnalyticsRenderFunnel")),ME=z$1.strictObject({type:z$1.literal("table").meta(v),columns:z$1.array(Zt).min(1).max(20).meta(v)}).meta($e("AnalyticsRenderTable")),FE=z$1.strictObject({type:z$1.literal("timeline").meta(v),timestamp:Zt.meta(v),event_type:Zt.meta(v)}).meta($e("AnalyticsRenderTimeline")),LE=z$1.strictObject({type:z$1.literal("recommendations").meta(v),presentation:z$1.enum(["list","ranked_cards"]).meta(v)}).meta($e("AnalyticsRenderRecommendations")),ty=z$1.discriminatedUnion("type",[qE,DE,UE,ME,FE,LE]).meta($e("AnalyticsRenderSpec")),NE=z$1.strictObject({id:ya.meta(v),dimension:Zt.meta(v),control:jp.meta(v),label:va.optional().meta(v),operators:z$1.array(Ym).min(1).meta(v),default_value:Wm.optional().meta(v),required:z$1.boolean().default(false).meta(v),pinned:z$1.boolean().default(false).meta(v),applies_to:z$1.union([z$1.literal("all"),z$1.array(ya).min(1).max(24)]).default("all").meta(v)}).meta($e("AnalyticsViewFilter")),ny=z$1.strictObject({type:z$1.literal("grid").meta(v),columns:z$1.number().int().min(1).max(24).default(12).meta(v),items:z$1.array(z$1.strictObject({block_id:ya.meta(v),x:z$1.number().int().min(0).meta(v),y:z$1.number().int().min(0).meta(v),w:z$1.number().int().min(1).max(24).meta(v),h:z$1.number().int().min(1).max(24).meta(v)})).max(24).meta(v)}).meta($e("AnalyticsViewLayout")),VE=z$1.strictObject({id:ya.meta(v),title:va.optional().meta(v),description:va.optional().meta(v),query:OE.meta(v),render:ty.meta(v)}).meta($e("AnalyticsViewBlock")),BE=z$1.strictObject({id:ya.meta(v),label:va.meta(v),target:Zt.meta(v),bindings:z$1.record(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z$1.string().min(1).max(200)).default({}).meta(v)}).meta($e("AnalyticsViewHandoff")),zE=z$1.strictObject({allow:z$1.array(b_).default([]).meta(v),deny:z$1.array(b_).default([]).meta(v)}).meta($e("AnalyticsCustomizationPolicy"));var ry=z$1.string().regex(/^\d+\.\d+$/),KE=z$1.strictObject({kind:z$1.literal("revturbine.analytics-view").meta(v),schema_version:ry.meta(v),id:ya.meta(v),revision:z$1.number().int().min(1).meta(v),title:va.meta(v),description:va.optional().meta(v),analytical_unit:hc.meta(v),base_template:z$1.strictObject({id:ya.meta(v),version:z$1.number().int().min(1).meta(v)}).optional().meta(v),catalog_version:z$1.string().min(1).max(64).meta(v),filters:z$1.array(NE).max(20).meta(v),layout:ny.meta(v),blocks:z$1.array(VE).min(1).max(24).meta(v),handoffs:z$1.array(BE).max(10).optional().meta(v),customization_policy:zE.meta(v)}).meta($e("AnalyticsView")),$E=z$1.strictObject({id:ya.optional().meta(v),dimension:Zt.meta(v),control:jp.optional().meta(v),label:va.optional().meta(v),operators:z$1.array(Ym).min(1).optional().meta(v),default_value:Wm.optional().meta(v),required:z$1.boolean().optional().meta(v),pinned:z$1.boolean().optional().meta(v),applies_to:z$1.union([z$1.literal("all"),z$1.array(ya).min(1).max(24)]).optional().meta(v)}).meta($e("AnalyticsViewFilterDraft")),HE=z$1.strictObject({id:ya.optional().meta(v),title:va.optional().meta(v),concept:Zt.meta(v),family:Hm.meta(v),metrics:z$1.array(Zt).min(1).max(10).meta(v),group_by:z$1.array(Zt).max(3).optional().meta(v),time:ey.optional().meta(v),filters_from:z$1.array(ya).max(20).optional().meta(v),fixed_filters:z$1.array(qp).max(20).optional().meta(v),compare:wp.optional().meta(v),order_by:z$1.array(X_).max(3).optional().meta(v),limit:z$1.number().int().min(1).max(1e3).optional().meta(v),render:z$1.union([z$1.literal("auto"),ty]).optional().meta(v)}).meta($e("AnalyticsViewBlockDraft")),GE=z$1.strictObject({id:ya.optional().meta(v),label:va.optional().meta(v),target:Zt.meta(v),bindings:z$1.record(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z$1.string().min(1).max(200)).optional().meta(v)}).meta($e("AnalyticsViewHandoffDraft"));z$1.strictObject({kind:z$1.literal("revturbine.analytics-view-draft").meta(v),schema_version:ry.meta(v),title:va.meta(v),analytical_unit:hc.optional().meta(v),filters:z$1.union([z$1.literal("recommended"),z$1.array($E).max(20)]).optional().meta(v),layout:z$1.union([z$1.literal("auto"),ny]).optional().meta(v),blocks:z$1.array(HE).min(1).max(24).meta(v),handoffs:z$1.union([z$1.literal("recommended"),z$1.array(GE).max(10)]).optional().meta(v),visibility:CE.optional().meta(v)}).meta($e("AnalyticsViewDraft"));var Dp=z$1.string().regex(/^(\/[^/]*)*$/).max(300),YE=z$1.strictObject({op:z$1.enum(["add","replace","remove"]).meta(v),path:Dp.meta(v),value:z$1.unknown().optional().meta(v)}).meta($e("AnalyticsSuggestedPatchOp")),ay=z$1.object({code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),message:z$1.string().min(1).max(500).meta(v)}).meta($e("AnalyticsWarning")),WE=z$1.object({code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(v),path:Dp.meta(v),message:z$1.string().min(1).max(500).meta(v),actual:z$1.unknown().optional().meta(v),allowed:z$1.array(xp).max(50).optional().meta(v),suggested_patch:z$1.array(YE).max(10).optional().meta(v)}).meta($e("AnalyticsValidationIssue"));z$1.object({path:Dp.meta(v),rule:z$1.string().min(1).max(120).meta(v),value:z$1.unknown().optional().meta(v)}).meta($e("AnalyticsCompileResolution"));z$1.object({valid:z$1.boolean().meta(v),errors:z$1.array(WE).default([]).meta(v),warnings:z$1.array(ay).default([]).meta(v),catalog_version:z$1.string().min(1).max(64).meta(v)}).meta($e("AnalyticsValidationResult"));var ZE=z$1.object({id:Zt.meta(v),type:Op.meta(v),nullable:z$1.boolean().meta(v)}).meta($e("AnalyticsResultField")),QE=z$1.object({numerator:z$1.number().int().min(0).meta(v),denominator:z$1.number().int().min(0).meta(v),rate:z$1.number().min(0).max(1).meta(v)}).meta($e("AnalyticsCoverage")),JE=z$1.object({query_hash:z$1.string().min(1).max(128).meta(v),concept:Zt.meta(v),analytical_unit:hc.meta(v),source_scope:Gm.meta(v),coverage:QE.optional().meta(v),as_of:z$1.string().datetime().meta(v),freshness_seconds:z$1.number().int().min(0).meta(v),applied_filters:z$1.array(qp).default([]).meta(v),next_cursor:z$1.string().max(500).optional().meta(v),warnings:z$1.array(ay).default([]).meta(v)}).meta($e("AnalyticsResultMeta")),XE=z$1.object({data:z$1.array(z$1.record(z$1.string(),z$1.unknown())).meta(v),fields:z$1.array(ZE).meta(v),meta:JE.meta(v)}).meta($e("AnalyticsResult")),{Unrestricted:Nn}=_n,{Transient:eR}=wn,{Internal:tR}=Tn,fc=t=>({id:t,"x-revturbine-schema-persistence":eR,"x-revturbine-schema-exposure":tR}),nR=z$1.enum(["fixture","generated"]).meta(fc("AnalyticsCatalogSource"));z$1.object({catalog_version:z$1.string().min(1).max(64).meta(Nn),source:nR.meta(Nn),generated_at:z$1.string().datetime().optional().meta(Nn),concepts:z$1.array(jE).min(1).meta(Nn),dimensions:z$1.array(AE).min(1).meta(Nn),metrics:z$1.array(wE).min(1).meta(Nn)}).meta(fc("AnalyticsCatalog"));var aR=z$1.enum(["concept","dimension","metric","query_family"]).meta(fc("AnalyticsAgentCatalogEntryKind")),iR=z$1.object({id:v_.meta(Nn),kind:aR.meta(Nn),label:z$1.string().min(1).max(120).meta(Nn),description:z$1.string().min(1).max(500).meta(Nn),when_to_use:z$1.string().max(500).optional().meta(Nn),do_not_use_for:z$1.string().max(500).optional().meta(Nn),value_type:Op.optional().meta(Nn),format:oc.optional().meta(Nn),capabilities:z$1.array(J_).optional().meta(Nn),compatible_concepts:z$1.array(v_).optional().meta(Nn),compatible_families:z$1.array(Hm).optional().meta(Nn),analytical_units:z$1.array(hc).optional().meta(Nn),source_scope:Gm.optional().meta(Nn),example:z$1.string().max(2e3).optional().meta(Nn),deprecation:kE.optional().meta(Nn)}).meta(fc("AnalyticsAgentCatalogEntry"));z$1.object({catalog_version:z$1.string().min(1).max(64).meta(Nn),query:z$1.string().min(1).max(200).meta(Nn),entries:z$1.array(iR).max(50).meta(Nn)}).meta(fc("AnalyticsCatalogSearchResult"));var {Unrestricted:ir}=_n,{Transient:oR}=wn,{Internal:lR}=Tn,Uo=t=>({id:t,"x-revturbine-schema-persistence":oR,"x-revturbine-schema-exposure":lR}),vs=z$1.string().regex(Z_),cR=z$1.strictObject({filter_id:vs.meta(ir),value:Wm.nullable().meta(ir)}).meta(Uo("AnalyticsFilterState"));z$1.strictObject({view_id:vs.meta(ir),revision:z$1.number().int().min(1).optional().meta(ir),block_ids:z$1.array(vs).min(1).max(24).optional().meta(ir),filter_state:z$1.array(cR).max(20).optional().meta(ir)}).meta(Uo("AnalyticsQueryRequest"));var uR=z$1.object({block_id:vs.meta(ir),code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(ir),message:z$1.string().min(1).max(500).meta(ir)}).meta(Uo("AnalyticsBlockError")),dR=z$1.object({block_id:vs.meta(ir),result:XE.meta(ir)}).meta(Uo("AnalyticsBlockResult"));z$1.object({view_id:vs.meta(ir),revision:z$1.number().int().min(1).meta(ir),catalog_version:z$1.string().min(1).max(64).meta(ir),results:z$1.array(dR).meta(ir),errors:z$1.array(uR).default([]).meta(ir)}).meta(Uo("AnalyticsQueryResponse"));var gR=z$1.object({id:vs.meta(ir),version:z$1.number().int().min(1).meta(ir),title:va.meta(ir),description:va.optional().meta(ir),block_count:z$1.number().int().min(1).meta(ir)}).meta(Uo("AnalyticsTemplateSummary"));z$1.object({q:z$1.string().min(1).max(200),limit:z$1.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:y({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:se(gR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:y({operationId:"getAnalyticsView",requestParams:{path:z$1.object({viewId:z$1.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:KE}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:oi}=_n,{Transient:_c}=wn,{External:yc}=Tn,iy=z$1.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":_c,"x-revturbine-schema-exposure":yc}),fR=z$1.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":_c,"x-revturbine-schema-exposure":yc}),_R=z$1.object({name:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(oi),surface:iy.meta(oi),purpose:z$1.string().min(1).max(300).meta(oi),stability:fR.meta(oi)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":_c,"x-revturbine-schema-exposure":yc}),yR=z$1.object({prefix:z$1.string().regex(/^[a-z][a-z0-9_]*_$/).meta(oi),surface:iy.meta(oi),purpose:z$1.string().min(1).max(300).meta(oi)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":_c,"x-revturbine-schema-exposure":yc});z$1.object({version:z$1.number().int().min(1).meta(oi),events:z$1.array(_R).min(1).meta(oi),prefix_families:z$1.array(yR).meta(oi)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":_c,"x-revturbine-schema-exposure":yc});var sy=["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"],Up=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],vR=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],bR=["area_viewed","feature_gated"],x_={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function qm(t,e){return t.map(n=>({name:n,surface:e,purpose:x_[n].purpose,stability:x_[n].stability}))}var oy=["impression"],Mp=[{prefix:"engagement_",surface:"sdk_client",purpose:"Organic product-signal events under customer-declared engagement scopes."}],ly={events:[...qm(sy,"control_plane"),...qm(bR,"control_plane"),...qm(Up,"sdk_client"),...qm(vR,"sdk_client")]};ly.events.map(t=>t.name);ly.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:D,Pii:jo}=_n,{Persisted:cy,Transient:qn}=wn,{Internal:ts,External:br}=Tn,my=z$1.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br}),xR=Ee.extend({event_type:z$1.string().min(1).meta(D),source:my.default("sdk").meta(D),tenant_id:z$1.string().min(1).optional().meta(D),user_id:z$1.string().min(1).optional().meta(jo),session_id:z$1.string().min(1).optional().meta(jo),occurred_at:z$1.string().datetime().meta(D),request_id:z$1.string().min(1).meta(D),attributes:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(D),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(D)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts}),SR=xR.extend({ingested_at:z$1.string().datetime().meta(D)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":cy,"x-revturbine-schema-exposure":ts});z$1.array(z$1.object({id:z$1.string().min(1).optional().meta(D),event_type:z$1.string().min(1).meta(D),occurred_at:z$1.string().datetime().optional().meta(D),tenant_id:z$1.string().min(1).optional().meta(D),user_id:z$1.string().min(1).optional().meta(jo),session_id:z$1.string().min(1).optional().meta(jo),attributes:z$1.record(z$1.string(),z$1.unknown()).optional().meta(D),payload:z$1.record(z$1.string(),z$1.unknown()).optional().meta(D),message:z$1.string().optional().meta(D),level:z$1.string().optional().meta(D),path:z$1.string().optional().meta(D)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts});var PR=z$1.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({user_id:z$1.string().min(1).meta(jo),placement_id:z$1.string().min(1).meta(D),treatment_id:z$1.string().min(1).optional().meta(D),surface_slot_id:z$1.string().min(1).optional().meta(D),surface_template_id:z$1.string().min(1).optional().meta(D),payload_id:z$1.string().min(1).optional().meta(D),interaction_type:PR.meta(D),interaction_at:z$1.string().datetime().optional().meta(D),message_block_handle:z$1.string().min(1).optional().meta(D),message_block_id:z$1.string().min(1).optional().meta(D),experiment_id:z$1.string().min(1).optional().meta(D),variant_key:z$1.string().min(1).optional().meta(D),test:z$1.boolean().optional().meta(D),metadata:z$1.record(z$1.string(),z$1.unknown()).optional().meta(D)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.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":qn,"x-revturbine-schema-exposure":br});z$1.object({days_remaining:z$1.number().int().min(0).optional().meta(D)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({entitlement_handle:z$1.string().optional().meta(D),current_usage:z$1.number().min(0).optional().meta(D),usage_limit:z$1.number().min(0).optional().meta(D),usage_percent:z$1.number().min(0).max(100).optional().meta(D),threshold:z$1.number().min(0).optional().meta(D),balance:z$1.number().min(0).optional().meta(D),allocation:z$1.number().min(0).optional().meta(D),seats_used:z$1.number().int().min(0).optional().meta(D),seats_allowed:z$1.number().int().min(0).optional().meta(D)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({feature:z$1.string().min(1).meta(D)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({retry_count:z$1.number().int().min(0).optional().meta(D),renewal_date:z$1.string().optional().meta(D)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({event_type:z$1.string().min(1).meta(D),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(D)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});var IR=z$1.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br}),CR=z$1.enum(sy).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({event_type:CR.meta(D),source:IR.meta(D),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(D)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({q:z$1.string().optional().meta(D),source:my.optional().meta(D),event_type:z$1.string().optional().meta(D),from:z$1.string().datetime().optional().meta(D),to:z$1.string().datetime().optional().meta(D),page:z$1.coerce.number().int().min(1).default(1).meta(D),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(D)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts});var ER=z$1.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts}),RR=z$1.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts}),pp=Ee.merge(Me).merge(tt).extend({event_id:z$1.string().min(1).meta(D),event_type:z$1.string().min(1).meta(D),source:ER.meta(D),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(D),status:RR.default("processed").meta(D),processed_at:z$1.string().datetime().optional().meta(D),error_message:z$1.string().optional().meta(D)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":cy,"x-revturbine-schema-exposure":ts});z$1.object({accepted:z$1.number().int().min(0).meta(D)}).meta({id:"null","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ts});var kR=500,AR=z$1.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br}),wR=z$1.object({environment_id:z$1.string().min(1).meta(D),user_id:z$1.string().min(1).meta(jo),account_id:z$1.string().min(1).meta(D),event_name:z$1.string().min(1).max(120).meta(D),event_ts:z$1.string().datetime().meta(D),properties:z$1.string().optional().meta(D),surface_slot_id:z$1.string().nullable().optional().meta(D),placement_id:z$1.string().nullable().optional().meta(D),payload_id:z$1.string().nullable().optional().meta(D),request_id:z$1.string().optional().meta(D),experiment_id:z$1.string().nullable().optional().meta(D),variant_key:z$1.string().nullable().optional().meta(D),tenant_id:z$1.string().optional().meta(D),event_id:z$1.string().nullable().optional().meta(D),origin:AR.nullable().optional().meta(D),playbook_version:z$1.string().nullable().optional().meta(D),decision_id:z$1.string().nullable().optional().meta(D),test:z$1.boolean().optional().meta(D)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({events:z$1.array(wR).min(1).max(kR).meta(D)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});var OR=10,qR=z$1.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br}),DR=z$1.object({plans:z$1.number().int().min(0).meta(D),entitlements:z$1.number().int().min(0).meta(D),entitlement_rules:z$1.number().int().min(0).meta(D),segments:z$1.number().int().min(0).meta(D),placements:z$1.number().int().min(0).meta(D),placement_payloads:z$1.number().int().min(0).meta(D),content_ui_paths:z$1.number().int().min(0).meta(D),surface_templates:z$1.number().int().min(0).meta(D)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br}),UR=z$1.object({event_type:qR.meta(D),occurred_at:z$1.string().datetime().meta(D),request_id:z$1.string().min(1).optional().meta(D),config_hash_id:z$1.string().min(1).max(64).optional().meta(D),sdk_version:z$1.string().min(1).max(64).optional().meta(D),runtime_mode:z$1.string().min(1).max(64).optional().meta(D),schema_version:z$1.string().min(1).max(64).optional().meta(D),bundle_version:z$1.string().min(1).max(64).optional().meta(D),config_shape:DR.optional().meta(D),message:z$1.string().max(500).optional().meta(D),reason:z$1.string().min(1).max(64).optional().meta(D),placement_handle:z$1.string().min(1).max(64).optional().meta(D),slot_handle:z$1.string().min(1).max(64).optional().meta(D),surface:z$1.string().min(1).max(64).optional().meta(D),plan_handle:z$1.string().min(1).max(64).optional().meta(D),entitlement_handle:z$1.string().min(1).max(64).optional().meta(D)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});z$1.object({events:z$1.array(UR).min(1).max(OR).meta(D)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":br});({"/api/events/search":{get:y({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:YC(SR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:y({operationId:"listWebhookEvents",requestParams:{query:le},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:se(pp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:et}=_n,{Persisted:vc,Transient:bc}=wn,{Internal:mi}=Tn,uy=dn(Vt.Playbook,{sdkInput:true}),dy=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),FR=z$1.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":bc,"x-revturbine-schema-exposure":mi}),Fp=z$1.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":bc,"x-revturbine-schema-exposure":mi}),py=z$1.object({name:Bn.meta(et),handle:gn.meta(et),plan_id:z$1.string().nullable().optional().meta(et),segment_id:z$1.string().nullable().optional().meta(et),trial_limit_type:Fp.default("time").meta(et),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(et),grace_period_days:z$1.number().int().min(0).default(0).meta(et),usage_entitlement_handle:z$1.string().min(1).optional().meta(et),usage_limit_value:z$1.number().int().min(1).optional().meta(et),require_payment_method:z$1.boolean().default(false).meta(et),auto_convert:z$1.boolean().default(true).meta(et),convert_to_plan_id:z$1.string().optional().meta(et),fallback_plan_id:z$1.string().optional().meta(et),limit_per_customer:z$1.number().int().min(1).default(1).meta(et),is_active:z$1.boolean().default(true).meta(et),metadata:zn.meta(et)}),ho=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...et,readOnly:true})}).merge(py).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":mi,...uy,...Or()}),LR=sr("FreeTrialRuleAnchor"),NR=z$1.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":bc,"x-revturbine-schema-exposure":mi}),gy=z$1.object({name:Bn.meta(et),handle:gn.meta(et),premium_plan_id:z$1.string().min(1).meta(et),fallback_plan_id:z$1.string().min(1).meta(et),segment_id:z$1.string().nullable().optional().meta(et),trial_limit_type:Fp.default("time").meta(et),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(et),usage_entitlement_handle:z$1.string().min(1).optional().meta(et),usage_limit_value:z$1.number().int().min(1).optional().meta(et),start_policy:NR.default("signup").meta(et),show_upgrade_prompt_at_day:z$1.number().int().min(0).optional().meta(et),entitlements_during_trial:z$1.array(z$1.string()).default([]).meta(et),is_active:z$1.boolean().default(true).meta(et),metadata:zn.meta(et)}),fo=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...et,readOnly:true})}).merge(gy).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":mi,...uy,...Or()}),VR=sr("ReverseTrialRuleAnchor"),hy=z$1.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":bc,"x-revturbine-schema-exposure":mi}),fy=z$1.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":bc,"x-revturbine-schema-exposure":mi}),_o=Ee.merge(Me).merge(tt).extend({trial_limit_policy:hy.default("1_per_lifetime").meta(et),eligibility_scope:fy.default("per_customer").meta(et)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":mi,...dy}),yo=Ee.merge(Me).merge(tt).extend({trial_limit_policy:hy.default("1_per_lifetime").meta(et),eligibility_scope:fy.default("per_customer").meta(et)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":mi,...dy}),Dm=Ee.merge(Me).merge(tt).extend({customer_id:z$1.string().min(1).meta(et),rule_id:z$1.string().min(1).meta(et),rule_type:z$1.enum(["free_trial","reverse_trial"]).meta(et),plan_id:z$1.string().min(1).meta(et),status:FR.default("active").meta(et),started_at:z$1.string().datetime().meta({...et,readOnly:true}),expires_at:z$1.string().datetime().nullable().optional().meta(et),trial_limit_type:Fp.default("time").meta(et),usage_entitlement_handle:z$1.string().min(1).optional().meta(et),usage_limit_value:z$1.number().int().min(1).optional().meta(et),converted_at:Vn.meta(et),cancelled_at:Vn.meta(et),metadata:zn.meta(et)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":mi});({"/api/free-trial-rule-anchors":{get:y({operationId:"listFreeTrialRuleAnchors",requestParams:{query:le},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:se(LR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:y({operationId:"listFreeTrialRules",requestParams:{query:le},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:se(ho)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:y({operationId:"getFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:y({operationId:"listReverseTrialRuleAnchors",requestParams:{query:le},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:se(VR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:y({operationId:"listReverseTrialRules",requestParams:{query:le},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:se(fo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:y({operationId:"getReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:y({operationId:"updateReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:fo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:y({operationId:"deleteReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:y({operationId:"listFreeTrialSettings",requestParams:{query:le},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:se(_o)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:y({operationId:"getFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:y({operationId:"updateFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:_o.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:y({operationId:"listReverseTrialSettings",requestParams:{query:le},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:se(yo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:y({operationId:"getReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:y({operationId:"updateReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:yo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:y({operationId:"listTrialInstances",requestParams:{query:le},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:se(Dm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:y({operationId:"getTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Dm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:y({operationId:"cancelTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Dm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:y({operationId:"convertTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({plan_id:z$1.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Dm}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Sn}=_n,{Persisted:Lp,Transient:_y}=wn,{Internal:xc}=Tn,yy=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),BR=z$1.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":_y,"x-revturbine-schema-exposure":xc}),zR=z$1.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":_y,"x-revturbine-schema-exposure":xc}),KR=z$1.object({variant_id:z$1.string().min(1),name:Bn,weight:z$1.number().min(0).max(1).default(.5),is_control:z$1.boolean().default(false),config:z$1.record(z$1.string(),z$1.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Lp,"x-revturbine-schema-exposure":xc,...yy}),Ri=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Sn,readOnly:true}),name:Bn.meta(Sn),handle:gn.meta(Sn),description:z$1.string().max(1e3).optional().meta(Sn),experiment_type:zR.meta(Sn),status:BR.default("draft").meta(Sn),target_resource_id:z$1.string().optional().meta(Sn),target_segment_ids:z$1.array(z$1.string()).default([]).meta(Sn),variants:z$1.array(KR).min(2).meta(Sn),primary_metric:z$1.string().min(1).meta(Sn),metric_threshold:z$1.number().default(.05).meta(Sn),secondary_metrics:z$1.array(z$1.string()).default([]).meta(Sn),traffic_allocation:z$1.number().min(0).max(1).default(1).meta(Sn),started_at:Vn.meta(Sn),ended_at:Vn.meta(Sn),confidence_threshold:z$1.number().min(0).max(1).default(.95).meta(Sn),winning_variant_id:z$1.string().nullable().default(null).meta(Sn),metadata:zn.meta(Sn)}).meta({id:"Experiment","x-revturbine-schema-persistence":Lp,"x-revturbine-schema-exposure":xc,...yy,...Or()}),$R=sr("ExperimentAnchor"),HR=Pp,S_=Ee.merge(Me).merge(tt).extend({experiment_id:z$1.string().optional().meta(Sn),resource_type:z$1.string().min(1).meta(Sn),resource_id:z$1.string().min(1).meta(Sn),severity:HR.default("info").meta(Sn),title:z$1.string().min(1).max(300).meta(Sn),description:z$1.string().max(2e3).meta(Sn),suggested_action:z$1.string().max(1e3).optional().meta(Sn),estimated_impact:z$1.number().optional().meta(Sn),is_dismissed:z$1.boolean().default(false).meta(Sn),metadata:zn.meta(Sn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Lp,"x-revturbine-schema-exposure":xc});({"/api/experiment-anchors":{get:y({operationId:"listExperimentAnchors",requestParams:{query:le},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:se($R)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:y({operationId:"listExperiments",requestParams:{query:le},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:se(Ri)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:y({operationId:"getExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Ri}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:y({operationId:"updateExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Ri.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ri}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:y({operationId:"deleteExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:y({operationId:"startExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Ri}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:y({operationId:"pauseExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Ri}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:y({operationId:"completeExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({winning_variant_id:z$1.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Ri}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:y({operationId:"listOptimizationSuggestions",requestParams:{query:le},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:se(S_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:y({operationId:"dismissOptimizationSuggestion",requestParams:{path:z$1.object({suggestionId:z$1.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:S_}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Pr,Financial:P_}=_n,{Persisted:GR,Transient:vy}=wn,{Internal:Np}=Tn,YR=dn(Vt.Playbook,{sdkInput:true}),WR=z$1.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":vy,"x-revturbine-schema-exposure":Np}),ZR=z$1.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":vy,"x-revturbine-schema-exposure":Np}),Wi=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...Pr,readOnly:true}),name:Bn.meta(Pr),handle:gn.meta(Pr),description:z$1.string().max(1e3).optional().meta(Pr),rt_status:WR.default("draft").meta(Pr),discount_type:ZR.meta(Pr),discount_value:z$1.number().min(0).meta(P_),currency:z$1.string().length(3).default("USD").meta(P_),applicable_plan_ids:z$1.array(z$1.string()).default([]).meta(Pr),applicable_addon_ids:z$1.array(z$1.string()).default([]).meta(Pr),target_segment_ids:z$1.array(z$1.string()).default([]).meta(Pr),max_redemptions:z$1.number().int().min(0).nullable().default(null).meta(Pr),current_redemptions:z$1.number().int().min(0).default(0).meta({...Pr,readOnly:true}),coupon_code:z$1.string().max(100).optional().meta(Pr),starts_at:Vn.meta(Pr),ends_at:Vn.meta(Pr),stripe_coupon_id:z$1.string().nullable().default(null).meta(Pr),stripe_promotion_code_id:z$1.string().nullable().default(null).meta(Pr),auto_sync_stripe:z$1.boolean().default(false).meta(Pr),metadata:zn.meta(Pr)}).meta({id:"Promotion","x-revturbine-schema-persistence":GR,"x-revturbine-schema-exposure":Np,...YR,...Or()}),QR=sr("PromotionAnchor");({"/api/promotion-anchors":{get:y({operationId:"listPromotionAnchors",requestParams:{query:le},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:se(QR)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:y({operationId:"listPromotions",requestParams:{query:le},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:se(Wi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:y({operationId:"getPromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Wi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:y({operationId:"updatePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Wi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:y({operationId:"deletePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:y({operationId:"syncPromotionToStripe",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:Wi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:y({operationId:"duplicatePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Wi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:p}=_n,{Persisted:Mo,Transient:it}=wn,{Internal:wa,External:kt}=Tn,xt=dn(Vt.Playbook,{sdkInput:true}),Eo=dn(Vt.Playbook,{sdkInput:false}),Qi=dn(Vt.Playbook,{inConfig:false,sdkInput:false}),by=dn(Vt.Playbook,{inConfig:false,sdkInput:true}),vo=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ka.CodeConstant}),hp=dn(Vt.Playbook,{inConfig:false,sdkInput:true,source:Ka.Runtime}),fp=dn(Vt.Playbook,{inConfig:false,sdkInput:false,source:Ka.Runtime}),JR=dn(Vt.Billing,{sdkInput:false}),XR=dn(Vt.Metering,{sdkInput:false}),ek=dn(Vt.Branding,{inConfig:true,sdkInput:true}),tk=dn(Vt.Branding,{sdkInput:false}),nk="1.0.0",Jl=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...p,readOnly:true}),name:Bn.meta(p),handle:gn.meta(p),description:xs.meta(p),is_default:z$1.boolean().default(false).meta(p),entitlement_ids:z$1.array(z$1.string()).default([]).meta(p),metadata:zn.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...Qi,...Or()}),rk=sr("SeatTypeAnchor"),Xl=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...p,readOnly:true}),handle:gn.meta(p),label:z$1.string().min(1).meta(p),description:z$1.string().nullable().default(null).meta(p),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z$1.string().nullable().default(null).meta(p),example_value:z$1.string().nullable().default(null).meta(p),value_map:z$1.record(z$1.string(),z$1.string()).default({}).meta(p),format:z$1.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(p),metadata:zn.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...Qi,...Or()}),ak=sr("PersonalizationTokenAnchor"),ik=z$1.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),_p=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({handle:gn.meta({...p,readOnly:true}),stripe_account_id:z$1.string().min(1).meta(p),live_mode:z$1.boolean().default(false).meta(p),onboarding_state:ik.default("not_started").meta({...p,readOnly:true}),onboarding_complete:z$1.boolean().default(false).meta({...p,readOnly:true}),charges_enabled:z$1.boolean().default(false).meta({...p,readOnly:true}),details_submitted:z$1.boolean().default(false).meta({...p,readOnly:true}),payouts_enabled:z$1.boolean().default(false).meta({...p,readOnly:true}),webhook_secret_set:z$1.boolean().default(false).meta({...p,readOnly:true}),sync_products:z$1.boolean().default(true).meta(p),sync_prices:z$1.boolean().default(true).meta(p),sync_subscriptions:z$1.boolean().default(true).meta(p),sync_invoices:z$1.boolean().default(false).meta(p),default_currency:z$1.string().length(3).default("USD").meta(p),tax_behavior:z$1.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(p),last_sync_at:z$1.string().optional().meta({...p,readOnly:true}),metadata:zn.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...JR,...ka()});z$1.object({theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(p),workspace_name:z$1.string().optional().meta(p),logo_url:z$1.string().optional().meta(p),support_email:z$1.string().optional().meta(p)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...tk});var ec=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({handle:gn.meta({...p,readOnly:true}),entitlement_id:z$1.string().min(1).meta(p),meter_key:z$1.string().min(1).max(100).meta(p),aggregation_type:z$1.enum(["sum","count","max","last_value"]).default("sum").meta(p),reset_period:z$1.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(p),stripe_meter_id:z$1.string().nullable().default(null).meta(p),is_active:z$1.boolean().default(true).meta(p),metadata:zn.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...XR,...ka()}),T_=z$1.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),tc=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...p,readOnly:true}),handle:gn.meta({...p,readOnly:true}),entitlement_id:z$1.string().min(1).meta(p),soft_limit_percent:z$1.number().min(0).max(100).default(80).meta(p),hard_limit_percent:z$1.number().min(0).max(100).default(100).meta(p),soft_limit_action:T_.default("warn").meta(p),hard_limit_action:T_.default("block").meta(p),grace_period_hours:z$1.number().int().min(0).default(0).meta(p),notification_channels:z$1.array(z$1.enum(["email","in_app","webhook"])).default(["in_app"]).meta(p),is_active:z$1.boolean().default(true).meta(p)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...by,...ka()}),sk=sr("UsageEnforcementSettingsAnchor"),ok=z$1.object({kind:z$1.enum(["template","slot"]).meta(p),id:z$1.string().min(1).meta(p),label:z$1.string().min(1).optional().meta(p)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),lk=z$1.object({id:z$1.string().min(1).meta(p),group:z$1.array(ok).min(1).meta(p),cap:z$1.object({count:z$1.number().int().min(1).meta(p),period:z$1.enum(["session","day","week","month"]).meta(p)}).meta(p)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),ck=z$1.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),xy=z$1.object({capRules:z$1.array(lk).default([]).meta(p),sessionCooldownMinutes:z$1.number().int().min(0).default(30).meta(p),remindLaterMinutes:z$1.number().int().min(0).default(60).meta(p),testMode:ck.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":wa}),yp=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({anchor_id:z$1.string().min(1).meta({...p,readOnly:true}),handle:gn.meta({...p,readOnly:true}),global_frequency_cap:xy.nullable().default(null).meta(p),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z$1.boolean().default(false).meta(p),suppress_for_trial:z$1.boolean().default(false).meta(p),allow_stacking:z$1.boolean().default(false).meta(p),priority_collision_strategy:z$1.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(p)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Mo,"x-revturbine-schema-exposure":wa,...by,...ka()}),mk=sr("PlacementSettingsAnchor"),uk=z$1.object({field:z$1.string().min(1).meta(p),operator:z$1.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(p),value:z$1.string().meta(p)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),dk=z$1.object({name:z$1.string().min(1).meta(p),handle:z$1.string().min(1).meta(p),predicates:z$1.array(uk).optional().meta(p),dimension_id:z$1.string().optional().meta(p),experiment_id:z$1.string().min(1).optional().meta(p)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),pk=z$1.object({unique_handle:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),tier_position:z$1.number().int().min(0).default(0).meta(p),sort_order:z$1.number().int().min(0).default(0).meta(p),visibility:Ji.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),gk=z$1.object({unique_handle:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),sort_order:z$1.number().int().min(0).default(0).meta(p),visibility:Ji.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...Eo}),hk=z$1.object({handle:z$1.string().min(1).meta(p),plan_handle:z$1.string().min(1).meta(p),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z$1.string().nullable().default(null).meta(p),price_amount:z$1.number().min(0).meta(p),pricing_model:mc.meta(p),visibility:Ji.default("public").meta(p),stripe_price_id:z$1.string().nullable().default(null).meta(p),price_source:zm.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...Qi}),fk=z$1.object({handle:z$1.string().min(1).meta(p),addon_handle:z$1.string().min(1).meta(p),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(p),segment_handle:z$1.string().nullable().default(null).meta(p),price_amount:z$1.number().min(0).meta(p),pricing_model:mc.meta(p),visibility:Ji.default("public").meta(p),stripe_price_id:z$1.string().nullable().default(null).meta(p),price_source:zm.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...Qi}),_k=z$1.object({handle:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),description:z$1.string().nullable().default(null).meta(p),is_default:z$1.boolean().default(false).meta(p),entitlement_handles:z$1.array(z$1.string()).default([]).meta(p)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),yk=z$1.object({handle:z$1.string().min(1).meta(p),entitlement_handle:z$1.string().nullable().default(null).meta(p),soft_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(p),hard_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(p),soft_limit_action:z$1.string().meta(p),hard_limit_action:z$1.string().meta(p),grace_period_hours:z$1.number().int().min(0).nullable().default(null).meta(p),notification_channels:z$1.array(z$1.string()).default([]).meta(p),is_active:z$1.boolean().default(true).meta(p)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),vk=z$1.object({handle:z$1.string().min(1).meta(p),global_frequency_cap:xy.nullable().default(null).meta(p),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(p),suppress_for_paid:z$1.boolean().default(false).meta(p),suppress_for_trial:z$1.boolean().default(false).meta(p),allow_stacking:z$1.boolean().default(false).meta(p),priority_collision_strategy:z$1.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),bk=z$1.object({handle:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),category:z$1.string().nullable().default(null).meta(p),visibility_toggle:z$1.boolean().default(true).meta(p),source_type:z$1.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),xk=z$1.object({handle:z$1.string().min(1).meta(p),entitlement_handle:z$1.string().min(1).meta(p),meter_handle:z$1.string().min(1).meta(p),limit:z$1.number().int().min(0).nullable().default(null).meta(p),reset_period:z$1.string().nullable().default(null).meta(p)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Sk=z$1.object({unique_handle:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),type:Sp.meta(p),unit:z$1.string().optional().meta(p),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Pk=z$1.object({id:z$1.string().min(1).meta(p),entitlement_id:z$1.string().min(1).meta(p),targets:z$1.array(U_).min(1).meta(p),segment_ids:z$1.array(z$1.string()).default([]).meta(p),kind:Sp.optional().meta({...p,readOnly:true}),unit:z$1.string().optional().meta({...p,readOnly:true}),tier_name:z$1.string().optional().meta({...p,readOnly:true}),tier_description:z$1.string().optional().meta({...p,readOnly:true}),...Ao.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$1.number().default(0).meta(p),allocation:Km.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Tk=z$1.object({slot_id:z$1.string().min(1).meta(p),active:z$1.boolean().meta(p),triggers:z$1.array(z$1.string()).meta(p)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Ik=z$1.object({id:z$1.string().min(1).meta(p),label:z$1.string().min(1).meta(p),description:z$1.string().meta(p),surface_type:z$1.string().meta(p),placement_handle:z$1.string().min(1).meta(p),template:z$1.string().optional().meta(p)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Ck=z$1.object({name:z$1.string().min(1).meta(p),type:z$1.string().optional().meta(p),required:z$1.boolean().optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Ek=z$1.object({id:z$1.string().min(1).meta(p),surface_type:z$1.string().meta(p),fields:z$1.array(Ck).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Rk=z$1.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":it,"x-revturbine-schema-exposure":kt}),kk=z$1.object({name:z$1.string().min(1).meta(p),action_type:Rk.meta(p),plan_handle:z$1.string().optional().meta(p),promotion_id:z$1.string().optional().meta(p),placement_handle:z$1.string().optional().meta(p),url:z$1.string().optional().meta(p),tour_id:z$1.string().optional().meta(p),target_billing_period:z$1.enum(["monthly","annual"]).optional().meta(p),description:z$1.string().optional().meta(p)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Ak=z$1.object({id:z$1.string().meta(p),name:z$1.string().meta(p),discount:z$1.string().meta(p),type:z$1.string().meta(p),status:z$1.string().meta(p)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),wk=z$1.object({token:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(p),label:z$1.string().min(1).meta(p),description:z$1.string().optional().meta(p),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(p),data_source:z$1.string().optional().meta(p),example_value:z$1.string().optional().meta(p),value_map:z$1.record(z$1.string(),z$1.string()).optional().meta(p),format:z$1.enum(["string","number","currency","percentage","date"]).optional().meta(p)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),I_=z$1.object({header:z$1.string().optional().meta(p),body:z$1.string().optional().meta(p),cta_label:z$1.string().optional().meta(p),secondary_cta_label:z$1.string().optional().meta(p)}).catchall(z$1.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),jk=z$1.object({block_id:z$1.string().min(1).meta(p),tenant_id:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),surface_template_id:z$1.string().optional().meta(p),default_content:I_.meta(p),segment_overrides:z$1.array(z$1.object({segment_value_id:z$1.string(),content:I_})).optional().meta(p),child_blocks:z$1.array(z$1.object({slot:z$1.string(),block_id:z$1.string()})).optional().meta(p),tokens_used:z$1.array(z$1.string()).optional().meta(p),status:z$1.enum(["draft","active","archived"]).meta(p),created_at:z$1.string().datetime().meta({...p,readOnly:true}),updated_at:z$1.string().datetime().meta({...p,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Ok=z$1.object({label:z$1.string().meta(p),path:k_.meta(p),config:z$1.record(z$1.string(),z$1.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Sy=z$1.object({template_id:z$1.string().min(1).meta(p),fields:z$1.record(z$1.string(),z$1.string()).meta(p),ctas:z$1.array(Ok).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Py=z$1.object({plan_ids:z$1.array(z$1.string()).meta(p),billing_cadences:z$1.array(z$1.string()).optional().meta(p),segment_chips:z$1.array(z$1.string()).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),qk=z$1.object({count:z$1.number().int().min(1).meta(p),period:z$1.enum(["session","day","week","month","lifetime"]).meta(p)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Ty=z$1.object({max_per_period:qk.optional().meta(p),cooldown_days:z$1.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Dk=z$1.object({id:z$1.string().min(1).meta(p),target:Py.meta(p),surfaces:z$1.array(Sy).meta(p),caps:Ty.optional().meta(p),surface_slot_ids:z$1.array(z$1.string()).optional().meta(p),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(p),created_at:z$1.string().optional().meta({...p,readOnly:true}),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(p),recommendation_plan_override:z$1.string().optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Uk=z$1.discriminatedUnion("type",[z$1.object({type:z$1.literal("surface_render"),slot_id:z$1.string().min(1)}),z$1.object({type:z$1.literal("entitlement_gate"),entitlement_handle:z$1.string().min(1),tier_threshold:z$1.string().optional()}),z$1.object({type:z$1.literal("usage_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ic}),z$1.object({type:z$1.literal("credit_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ic}),z$1.object({type:z$1.literal("seat_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ic}),z$1.object({type:z$1.literal("trial_started"),trial_type:z$1.enum(["free","reverse"]).optional()}),z$1.object({type:z$1.literal("trial_progress"),progress_percent:z$1.number().min(1).max(100)}),z$1.object({type:z$1.literal("trial_ending"),days_before_end:z$1.number().int().min(0)}),z$1.object({type:z$1.literal("trial_ended")}),z$1.object({type:z$1.literal("trial_converted")}),z$1.object({type:z$1.literal("qualifier"),qualifier:z$1.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Mk=z$1.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt}),Fk=z$1.object({id:z$1.string().min(1).meta(p),name:z$1.string().min(1).meta(p),category:Mk.meta(p),trigger:Uk.meta(p),payloads:z$1.array(Dk).meta(p),order:z$1.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Lk=z$1.object({payload_id:z$1.string().min(1).meta(p),placement_id:z$1.string().min(1).meta(p),target:Py.meta(p),caps:Ty.optional().meta(p),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(p),created_at:z$1.string().meta({...p,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...p,readOnly:true}),source_mode:z$1.enum(["inline","content_linked"]).meta(p),surfaces:z$1.array(Sy).optional().meta(p),surface_slot_ids:z$1.array(z$1.string()).optional().meta(p),content_link:z$1.object({message_block_id:z$1.string().optional(),ui_path_id:z$1.string().optional(),promotion_id:z$1.string().optional(),content_payload_id:z$1.string().optional()}).optional().meta(p)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Nk=z$1.object({kind:z$1.string().min(1).meta(p),schema_version:z$1.number().int().nonnegative().meta(p),config:z$1.unknown().meta(p)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Vk=Ee.merge(py).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...Qi}),Bk=Ee.merge(gy).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...Qi}),zk=z$1.object({plans:z$1.array(pk).meta({...p,...xt}),addons:z$1.array(gk).optional().meta({...p,...Eo}),entitlements:z$1.array(Sk).meta({...p,...xt}),entitlement_rules:z$1.array(Pk).meta({...p,...xt}),segments:z$1.array(dk).meta({...p,...xt}),content_ui_paths:z$1.array(kk).meta({...p,...xt}),slot_configs:z$1.array(Tk).optional().meta({...p,...xt,...ap({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$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())).optional().meta({...p,...xt,...ap({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$1.record(z$1.string(),z$1.unknown()).optional().meta({...p,...ek,...ap({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$1.array(Ik).optional().meta({...p,...xt}),message_blocks:z$1.array(jk).optional().meta({...p,...xt}),placement_payloads:z$1.array(Lk).optional().meta({...p,...xt}),placements:z$1.array(Fk).optional().meta({...p,...xt}),content_promotions:z$1.array(Ak).optional().meta({...p,...xt}),personalization_tokens:z$1.array(wk).optional().meta({...p,...xt}),surface_templates:z$1.array(Ek).optional().meta({...p,...xt}),free_trial_rules:z$1.array(Vk).optional().meta({...p,...Eo}),reverse_trial_rules:z$1.array(Bk).optional().meta({...p,...Eo}),plan_variations:z$1.array(hk).optional().meta({...p,...Eo}),addon_variations:z$1.array(fk).optional().meta({...p,...Eo}),extension_rules:z$1.array(Nk).optional().meta({...p,...xt}),seat_types:z$1.array(_k).optional().meta({...p,...xt}),enforcement_defaults:z$1.array(yk).optional().meta({...p,...xt}),placement_settings:z$1.array(vk).optional().meta({...p,...xt}),segment_dimensions:z$1.array(bk).optional().meta({...p,...xt}),meter_bindings:z$1.array(xk).optional().meta({...p,...xt}),experiments:z$1.array(z$1.unknown()).max(0).optional().meta({...p,...Qi}),signal_catalog:z$1.object({}).strict().optional().meta({...p,...Qi})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt}),Kk=z$1.object({artifact_type:z$1.literal("playbook").meta({...p,...vo,readOnly:true}),format_version:z$1.literal(nk).meta({...p,...vo,readOnly:true}),playbook_handle:z$1.string().min(1).default("default").meta({...p,...vo}),playbook_version_id:z$1.string().nullable().default(null).meta({...p,...hp,readOnly:true}),tenant_id:z$1.string().min(1).optional().meta({...p,...fp,readOnly:true}),environment_id:z$1.string().min(1).optional().meta({...p,...fp,readOnly:true}),project_id:z$1.string().min(1).optional().meta({...p,...fp,readOnly:true}),exported_at:z$1.string().datetime().optional().meta({...p,...hp,readOnly:true}),schema_version:z$1.string().min(1).optional().meta({...p,...vo,readOnly:true}),bundle_schema_version:z$1.number().int().nonnegative().optional().meta({...p,...vo,readOnly:true}),bundle_min_readable_schema_version:z$1.number().int().nonnegative().optional().meta({...p,...vo,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...hp}),Iy=Kk.extend(zk.shape).meta({"x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});function $k(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Cy(t){if(!$k(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$1.preprocess(Cy,Iy).meta({id:"Playbook","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});z$1.preprocess(Cy,Iy.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":it,"x-revturbine-schema-exposure":kt,...xt});({"/api/seat-type-anchors":{get:y({operationId:"listSeatTypeAnchors",requestParams:{query:le},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:se(rk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:y({operationId:"listSeatTypes",requestParams:{query:le},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:se(Jl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:y({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wr(Jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:y({operationId:"updateSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Jl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:y({operationId:"deleteSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:y({operationId:"listPersonalizationTokenAnchors",requestParams:{query:le},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:se(ak)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:y({operationId:"listPersonalizationTokens",requestParams:{query:le},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:se(Xl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:y({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wr(Xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:y({operationId:"updatePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update personalization token",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:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:y({operationId:"deletePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:y({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jr(_p)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:_p}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:y({operationId:"listMeteringConfigs",requestParams:{query:le},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:se(ec)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:y({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wr(ec)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:y({operationId:"updateMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ec.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:y({operationId:"deleteMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:y({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:le},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:se(sk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:y({operationId:"listUsageEnforcementSettings",requestParams:{query:le},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:se(tc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:y({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wr(tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:y({operationId:"updateUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:y({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:y({operationId:"listPlacementSettingsAnchors",requestParams:{query:le},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:se(mk)}}},default:{description:"Error response",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:y({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jr(yp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:yp}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:ki}=_n,{Persisted:Ey}=wn,{Internal:Ry}=Tn,Hk=z$1.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ey,"x-revturbine-schema-exposure":Ry}),C_=Ee.merge(Me).merge(tt).extend({action:Hk.meta(ki),resource_type:z$1.string().min(1).max(100).meta(ki),resource_id:z$1.string().min(1).meta(ki),resource_name:z$1.string().max(200).optional().meta(ki),actor_id:z$1.string().min(1).meta(ki),actor_email:z$1.string().email().optional().meta(ki),diff:z$1.object({before:z$1.record(z$1.string(),z$1.unknown()).optional(),after:z$1.record(z$1.string(),z$1.unknown()).optional()}).optional().meta(ki),summary:z$1.string().max(1e3).optional().meta(ki),metadata:zn.meta(ki)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ey,"x-revturbine-schema-exposure":Ry});({"/api/changelog":{get:y({operationId:"listChangeLogEntries",requestParams:{query:le},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:se(C_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:y({operationId:"getChangeLogEntry",requestParams:{path:z$1.object({entryId:z$1.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:C_}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Um}=_n,{Persisted:Gk,Transient:Yk}=wn,{Internal:ky}=Tn,Wk=z$1.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":Yk,"x-revturbine-schema-exposure":ky}),Zi=Ee.merge(Me).extend({name:Bn.meta(Um),handle:gn.meta(Um),status:Wk.default("active").meta(Um),metadata:zn.meta(Um)}).meta({id:"Tenant","x-revturbine-schema-persistence":Gk,"x-revturbine-schema-exposure":ky});({"/api/tenants":{get:y({operationId:"listTenants",requestParams:{query:le},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:se(Zi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:y({operationId:"getTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:y({operationId:"updateTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Zi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:y({operationId:"suspendTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:Zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:y({operationId:"reactivateTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Zi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Ca}=_n,{Persisted:Zk,Transient:Ay}=wn,{Internal:Vp}=Tn,Qk=z$1.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":Vp}),bo=Ee.merge(Me).merge(tt).extend({name:Bn.meta(Ca),handle:gn.meta(Ca),description:xs.meta(Ca),is_production:z$1.boolean().default(false).meta({...Ca,readOnly:true}),status:Qk.default("active").meta(Ca),cloned_from_environment_id:z$1.string().nullable().default(null).meta({...Ca,readOnly:true}),cloned_at:Vn.meta({...Ca,readOnly:true}),cloned_at_sequence:z$1.number().int().min(0).nullable().default(null).meta({...Ca,readOnly:true}),requires_approval:z$1.boolean().default(false).meta(Ca),auto_deploy_on_approval:z$1.boolean().default(false).meta(Ca),created_by:z$1.string().optional().meta(Ca),metadata:zn.meta(Ca)}).meta({id:"Environment","x-revturbine-schema-persistence":Zk,"x-revturbine-schema-exposure":Vp}),Jk=z$1.object({source_environment_id:z$1.string().min(1),target_environment_id:z$1.string().min(1),playbook_version_ids:z$1.array(z$1.string()).optional(),strategy:z$1.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":Vp});({"/api/environments":{get:y({operationId:"listEnvironments",requestParams:{query:le},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:se(bo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:y({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().min(1).max(200),handle:z$1.string().min(1).max(100),description:z$1.string().max(500).optional(),clone_from_environment_id:z$1.string().optional(),requires_approval:z$1.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:bo}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:y({operationId:"getEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:y({operationId:"updateEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:bo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:y({operationId:"archiveEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:bo}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:y({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Jk}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z$1.object({promoted_count:z$1.number().int(),conflict_count:z$1.number().int(),conflicts:z$1.array(z$1.object({handle:z$1.string(),resource_type:z$1.string(),source_sequence:z$1.number().int(),target_sequence:z$1.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ke,Pii:lc}=_n,{Transient:ui,Persisted:Xk}=wn,{External:$a}=Tn,eA=z$1.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a});z$1.object({superseded_output_id:z$1.string().min(1).meta(Ke),superseded_by:z$1.string().min(1).meta(Ke),reason:eA.meta(Ke)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Xk,"x-revturbine-schema-exposure":$a,..._n.Operational});var tA=z$1.enum(R_).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a}),wy=z$1.object({output_id:z$1.string().meta(Ke),category:z$1.string().meta(Ke),surface:z$1.object({template:z$1.string().optional().meta(Ke),type:Vm.meta(Ke),slot_id:z$1.string().optional().meta(Ke)}).meta(Ke),content:z$1.record(z$1.string(),z$1.unknown()).meta(Ke),promotion:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ke),cta_path:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ke),ui_path:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ke),rule_id:z$1.string().meta(Ke),decision_id:z$1.string().meta(Ke),config_version:z$1.string().meta(Ke),present_upsell:z$1.boolean().meta(Ke),experiment_id:z$1.string().optional().meta(Ke),variant_key:z$1.string().optional().meta(Ke),experiment_version_id:z$1.string().optional().meta(Ke)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a}),nA=z$1.object({status:tA.meta(Ke),allowed:z$1.boolean().meta(Ke),reason:z$1.string().optional().meta(Ke),current_tier:z$1.string().optional().meta(Ke),limit:z$1.number().optional().meta(Ke),used:z$1.number().optional().meta(Ke),remaining:z$1.number().optional().meta(Ke),placement:wy.optional().meta(Ke)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a});z$1.object({id:z$1.string().meta(Ke),name:z$1.string().optional().meta(Ke),discount:z$1.string().optional().meta(Ke),type:z$1.string().optional().meta(Ke),status:z$1.string().optional().meta(Ke)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a});var rA=z$1.object({id:z$1.string().meta(lc),anonymous_id:z$1.string().optional().meta(Ke),traits:z$1.record(z$1.string(),z$1.unknown()).optional().meta(lc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a}),aA=z$1.object({slot_id:z$1.string().optional().meta(Ke),entitlement_handle:z$1.string().optional().meta(Ke),plan_handle:z$1.string().optional().meta(Ke),placement_handle:z$1.string().optional().meta(Ke),visible:z$1.boolean().meta(Ke),output:wy.optional().meta(Ke),reason_codes:z$1.array(z$1.string()).optional().meta(Ke)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a}),iA=nA,sA=Rp.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a}),oA=z$1.object({segments:z$1.array(z$1.string()).optional().meta(Ke),traits:z$1.record(z$1.string(),z$1.unknown()).optional().meta(lc),usage_balances:z$1.record(z$1.string(),z$1.number()).optional().meta(Ke)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a});z$1.object({version:z$1.literal("1.0.0").meta(Ke),request_id:z$1.string().meta(Ke),tenant_id:z$1.string().meta(Ke),evaluated_at:z$1.string().datetime().meta(Ke),ttl_seconds:z$1.number().int().min(0).max(86400).meta(Ke),user:rA.meta(lc),decisions:z$1.array(aA).meta(Ke),entitlements:z$1.record(z$1.string(),iA).optional().meta(Ke),theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ke),trial_status:sA.optional().meta(Ke),user_context:oA.optional().meta(lc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":$a});var {Unrestricted:Wt}=_n,{Persisted:lA,Transient:Qm}=wn,{Internal:Sc}=Tn,cA=z$1.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Qm,"x-revturbine-schema-exposure":Sc}),nc=Ee.merge(Me).merge(tt).extend({environment_id:z$1.string().min(1).meta(Wt),name:Bn.meta(Wt),description:z$1.string().max(2e3).optional().meta(Wt),status:cA.default("draft").meta(Wt),labels:z$1.array(z$1.string()).default([]).meta(Wt),created_by:z$1.string().min(1).meta(Wt),submitted_by:z$1.string().nullable().default(null).meta({...Wt,readOnly:true}),reviewed_by:z$1.string().nullable().default(null).meta({...Wt,readOnly:true}),deployed_by:z$1.string().nullable().default(null).meta({...Wt,readOnly:true}),submitted_at:Vn.meta({...Wt,readOnly:true}),reviewed_at:Vn.meta({...Wt,readOnly:true}),deployed_at:Vn.meta({...Wt,readOnly:true}),base_snapshot_sequence:z$1.number().int().min(0).default(0).meta({...Wt,readOnly:true}),entry_count:z$1.number().int().min(0).default(0).meta({...Wt,readOnly:true}),conflict_count:z$1.number().int().min(0).default(0).meta({...Wt,readOnly:true}),rollback_of_playbook_version_id:z$1.string().nullable().default(null).meta(Wt),cherry_picked_from_playbook_version_id:z$1.string().nullable().default(null).meta(Wt),review_notes:z$1.string().max(2e3).optional().meta(Wt),rejection_reason:z$1.string().max(2e3).optional().meta(Wt),snapshot:z$1.record(z$1.string(),z$1.unknown()).nullable().default(null).meta({...Wt,readOnly:true}),bundle:z$1.string().nullable().default(null).meta({...Wt,readOnly:true}),metadata:zn.meta(Wt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":lA,"x-revturbine-schema-exposure":Sc}),jy=z$1.object({handle:z$1.string().meta(Wt),resource_type:z$1.string().meta(Wt),resource_name:z$1.string().optional().meta(Wt),action:z$1.enum(["create","update","delete"]).meta(Wt),has_conflict:z$1.boolean().meta(Wt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":Qm,"x-revturbine-schema-exposure":Sc}),mA=z$1.object({playbook_version_id:z$1.string().meta(Wt),entries:z$1.array(jy).meta(Wt),total_entries:z$1.number().int().min(0).meta(Wt),total_conflicts:z$1.number().int().min(0).meta(Wt),deployable:z$1.boolean().meta(Wt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":Qm,"x-revturbine-schema-exposure":Sc}),uA=z$1.object({playbook_version_id:z$1.string().meta(Wt),deployed_count:z$1.number().int().min(0).meta(Wt),superseded_count:z$1.number().int().min(0).meta(Wt),skipped_conflicts:z$1.number().int().min(0).meta(Wt),deployed_at:z$1.string().datetime().meta(Wt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":Qm,"x-revturbine-schema-exposure":Sc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:y({operationId:"submitPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:nc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:y({operationId:"approvePlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({review_notes:z$1.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:nc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:y({operationId:"rejectPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({rejection_reason:z$1.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:nc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:y({operationId:"deployPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({force:z$1.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:uA}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:y({operationId:"archivePlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:y({operationId:"previewPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.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:mA}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:y({operationId:"listPlaybookVersionConflicts",requestParams:{path:z$1.object({playbookVersionId:z$1.string()}),query:le},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:se(jy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:y({operationId:"rollbackPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:nc}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:y({operationId:"cherryPickEntries",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({handles:z$1.array(z$1.string()).min(1),target_playbook_version_id:z$1.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z$1.object({copied_count:z$1.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:yt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Rt,Pii:dA}=_n,{Persisted:Ha}=wn,{Internal:Ga}=Tn,pA=z$1.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),Mm=Ee.merge(Me).merge(tt).extend({name:Bn.meta(Rt),key_hash:z$1.string().min(1).meta({...dA,readOnly:true}),key_prefix:z$1.string().min(1).max(20).meta({...Rt,readOnly:true}),key_last4:z$1.string().length(4).meta({...Rt,readOnly:true}),status:pA.default("active").meta(Rt),last_used_at:Vn.meta({...Rt,readOnly:true}),expires_at:Vn.meta(Rt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),gA=z$1.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),ys=Ee.merge(Me).merge(tt).extend({key:z$1.string().min(1).max(100).meta(Rt),value_type:gA.default("boolean").meta(Rt),value:z$1.string().max(4e3).default("false").meta(Rt),description:xs.meta(Rt),enabled:z$1.boolean().default(true).meta(Rt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),vp=Ee.merge(Me).merge(tt).extend({workspace_name:z$1.string().min(1).max(200).meta(Rt),support_email:z$1.string().email().nullable().default(null).meta(Rt),timezone:z$1.string().max(50).default("UTC").meta(Rt),default_currency:z$1.string().length(3).default("USD").meta(Rt),logo_url:z$1.string().url().nullable().default(null).meta(Rt),activity_window_days:z$1.number().int().min(1).default(30).meta(Rt),activity_high_min:z$1.number().int().min(1).default(10).meta(Rt),activity_medium_min:z$1.number().int().min(1).default(3).meta(Rt),activity_low_min:z$1.number().int().min(1).default(1).meta(Rt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),bp=Ee.merge(Me).merge(tt).extend({server_url:z$1.string().url().max(500).meta(Rt),api_token_hint:z$1.string().max(50).nullable().default(null).meta(Rt),allow_write_actions:z$1.boolean().default(false).meta(Rt),enabled_tools:z$1.array(z$1.string().max(100)).default([]).meta(Rt),enabled:z$1.boolean().default(false).meta(Rt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),Fm=Ee.merge(Me).merge(tt).extend({step_key:z$1.string().min(1).max(100).meta(Rt),label:z$1.string().min(1).max(200).meta(Rt),done:z$1.boolean().default(false).meta(Rt),completed_at:Vn.meta({...Rt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),hA=z$1.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),fA=Ee.merge(tt).extend({environment_id:z$1.string().min(1).default("production").meta(Rt),actor_type:hA.meta(Rt),actor_id:z$1.string().nullable().default(null).meta(Rt),action:z$1.string().min(1).max(120).meta(Rt),object_type:z$1.string().max(120).nullable().default(null).meta(Rt),object_id:z$1.string().max(200).nullable().default(null).meta(Rt),payload:z$1.record(z$1.string(),z$1.unknown()).nullable().default(null).meta(Rt),occurred_at:z$1.string().datetime().meta({...Rt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),_A=z$1.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga}),Lm=Ee.merge(Me).merge(tt).merge(yn).merge(xn).extend({handle:gn.meta({...Rt,readOnly:true}),identifier:z$1.string().min(1).max(200).meta(Rt),identifier_type:_A.default("user_id").meta(Rt),note:z$1.string().max(500).nullable().default(null).meta(Rt),added_by:z$1.string().meta(Rt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Ha,"x-revturbine-schema-exposure":Ga,...ka()});({"/api/settings/api-keys":{get:y({operationId:"listApiKeys",requestParams:{query:le},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:se(Mm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:y({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:wr(Mm)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Mm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:y({operationId:"revokeApiKey",requestParams:{path:z$1.object({keyId:z$1.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:Mm}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:y({operationId:"listFeatureFlags",requestParams:{query:le},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:se(ys)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:y({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:wr(ys)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:y({operationId:"getFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:y({operationId:"updateFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:jr(ys).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:y({operationId:"deleteFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:ys}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:y({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:jr(vp).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:vp}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:y({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:jr(bp).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:bp}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:y({operationId:"listOnboardingSteps",requestParams:{query:le},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:se(Fm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:y({operationId:"getOnboardingStep",requestParams:{path:z$1.object({stepId:z$1.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:Fm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:y({operationId:"updateOnboardingStep",requestParams:{path:z$1.object({stepId:z$1.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:jr(Fm).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Fm}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:y({operationId:"listAuditEvents",requestParams:{query:le},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:se(fA)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:y({operationId:"listPlacementTestUsers",requestParams:{query:le},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:se(Lm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:y({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:wr(Lm)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:y({operationId:"deletePlacementTestUser",requestParams:{path:z$1.object({testUserId:z$1.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:Lm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:me,Pii:Nr}=_n,{Persisted:Xr,Transient:Bp}=wn,{Internal:Tr}=Tn,yA=z$1.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.merge(Me).extend({name:Bn.meta(me),email:z$1.string().email().meta(Nr),email_verified:z$1.boolean().default(false).meta(me),image:z$1.string().url().nullable().default(null).meta(Nr),role:yA.default("user").meta(me),banned:z$1.boolean().default(false).meta({...me,readOnly:true}),ban_reason:z$1.string().nullable().default(null).meta({...me,readOnly:true}),ban_expires:Vn.meta({...me,readOnly:true}),two_factor_enabled:z$1.boolean().default(false).meta({...me,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.merge(Me).extend({expires_at:z$1.string().datetime().meta(me),token:z$1.string().min(1).meta({...Nr,readOnly:true}),ip_address:z$1.string().nullable().default(null).meta(Nr),user_agent:z$1.string().nullable().default(null).meta(Nr),user_id:z$1.string().min(1).meta({...me,readOnly:true}),active_organization_id:z$1.string().nullable().default(null).meta(me),impersonated_by:z$1.string().nullable().default(null).meta({...me,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.merge(Me).extend({account_id:z$1.string().min(1).meta(me),provider_id:z$1.string().min(1).meta(me),user_id:z$1.string().min(1).meta({...me,readOnly:true}),access_token:z$1.string().nullable().default(null).meta({...Nr,readOnly:true}),refresh_token:z$1.string().nullable().default(null).meta({...Nr,readOnly:true}),id_token:z$1.string().nullable().default(null).meta({...Nr,readOnly:true}),access_token_expires_at:Vn.meta({...me,readOnly:true}),refresh_token_expires_at:Vn.meta({...me,readOnly:true}),scope:z$1.string().nullable().default(null).meta(me),password:z$1.string().nullable().default(null).meta({...Nr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.merge(Me).extend({identifier:z$1.string().min(1).meta(Nr),value:z$1.string().min(1).meta({...Nr,readOnly:true}),expires_at:z$1.string().datetime().meta(me)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({secret:z$1.string().min(1).meta({...Nr,readOnly:true}),backup_codes:z$1.string().min(1).meta({...Nr,readOnly:true}),user_id:z$1.string().min(1).meta({...me,readOnly:true}),verified:z$1.boolean().default(false).meta({...me,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({name:Bn.meta(me),slug:z$1.string().min(1).max(100).nullable().default(null).meta(me),logo:z$1.string().url().nullable().default(null).meta(me),created_at:z$1.string().datetime().meta({...me,readOnly:true}),metadata:z$1.string().nullable().default(null).meta(me)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});var Oy=z$1.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});var qy=z$1.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Bp,"x-revturbine-schema-exposure":Tr}),Dy=z$1.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Bp,"x-revturbine-schema-exposure":Tr});z$1.object({resource:qy,action:Dy}).meta({id:"Permission","x-revturbine-schema-persistence":Bp,"x-revturbine-schema-exposure":Tr});var vA=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],bA=["plans","entitlements","placements","targeting","content","experiments"],xA=["plans","entitlements","placements","targeting","content","experiments"],SA=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],PA=["read","create","update","delete","publish","approve","invite","manage_roles"];function Jm(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var TA=Jm(vA,["read"]),IA=[...TA,...Jm(bA,["create","update"])];[...IA,...Jm(xA,["publish","approve","delete"])];Jm(SA,PA);var CA=qy.options.flatMap(t=>Dy.options.map(e=>`${t}:${e}`));z$1.enum(CA).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({organization_id:z$1.string().min(1).meta({...me,readOnly:true}),user_id:z$1.string().min(1).meta({...me,readOnly:true}),role:Oy.default("viewer").meta(me),created_at:z$1.string().datetime().meta({...me,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});var EA=z$1.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({organization_id:z$1.string().min(1).meta({...me,readOnly:true}),email:z$1.string().email().meta(Nr),role:Oy.nullable().default(null).meta(me),status:EA.default("pending").meta(me),expires_at:z$1.string().datetime().meta(me),created_at:z$1.string().datetime().meta({...me,readOnly:true}),inviter_id:z$1.string().min(1).meta({...me,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({name:z$1.string().max(200).nullable().default(null).meta(me),public_key:z$1.string().min(1).meta({...Nr,readOnly:true}),user_id:z$1.string().min(1).meta({...me,readOnly:true}),credential_id:z$1.string().min(1).meta({...me,readOnly:true}),counter:z$1.number().int().default(0).meta({...me,readOnly:true}),device_type:z$1.string().min(1).meta(me),backed_up:z$1.boolean().default(false).meta(me),transports:z$1.string().nullable().default(null).meta(me),created_at:z$1.string().datetime().meta({...me,readOnly:true}),aaguid:z$1.string().nullable().default(null).meta(me)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.merge(Me).extend({config_id:z$1.string().min(1).meta(me),name:z$1.string().max(200).nullable().default(null).meta(me),start:z$1.string().nullable().default(null).meta(me),reference_id:z$1.string().min(1).meta(me),prefix:z$1.string().nullable().default(null).meta(me),key:z$1.string().min(1).meta({...Nr,readOnly:true}),refill_interval:z$1.number().int().nullable().default(null).meta(me),refill_amount:z$1.number().int().nullable().default(null).meta(me),last_refill_at:Vn.meta({...me,readOnly:true}),enabled:z$1.boolean().default(true).meta(me),rate_limit_enabled:z$1.boolean().default(false).meta(me),rate_limit_time_window:z$1.number().int().nullable().default(null).meta(me),rate_limit_max:z$1.number().int().nullable().default(null).meta(me),request_count:z$1.number().int().default(0).meta({...me,readOnly:true}),remaining:z$1.number().int().nullable().default(null).meta({...me,readOnly:true}),last_request:Vn.meta({...me,readOnly:true}),expires_at:Vn.meta(me),permissions:z$1.string().nullable().default(null).meta(me),metadata:z$1.string().nullable().default(null).meta(me)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});Ee.extend({issuer:z$1.string().min(1).meta(me),oidc_config:z$1.string().nullable().default(null).meta(me),saml_config:z$1.string().nullable().default(null).meta(me),user_id:z$1.string().min(1).meta({...me,readOnly:true}),provider_id:z$1.string().min(1).meta(me),organization_id:z$1.string().nullable().default(null).meta(me),domain:z$1.string().min(1).meta(me)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":Xr,"x-revturbine-schema-exposure":Tr});var Uy="0.7.0";var Xm=/^[a-z0-9._]{1,100}$/;var ze={Persisted:"persisted",Transient:"transient"},Fe={Internal:"internal",External:"external"},Ae={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 My="x-revturbine-schema-exposure",AA="readOnly",wA="x-revturbine-decision-only",eu={[wA]:true},Br={[My]:Fe.External},zp={[My]:Fe.Internal};function Kn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[AA]===true||(e[n]=r);}return z$1.object(e)}function Qn(t){let e=Kn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(Xm)}):e}var {Unrestricted:gr}=Ae,{Transient:zr,Persisted:jA}=ze,{Internal:Ss,External:di}=Fe;z$1.object({page:z$1.coerce.number().int().min(1).default(1).meta(gr),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(gr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di});var Kp=t=>z$1.object({items:z$1.array(t).meta(gr),total:z$1.number().int().min(0).meta(gr),page:z$1.number().int().min(1).meta(gr),per_page:z$1.number().int().min(1).meta(gr),has_more:z$1.boolean().meta(gr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di}),ie=z$1.object({created_at:z$1.string().datetime().meta({...gr,readOnly:true}),updated_at:z$1.string().datetime().meta({...gr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di}),H=z$1.object({id:z$1.string().min(1).meta({...gr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di}),be=z$1.object({tenant_id:z$1.string().min(1,"tenant_id is required").meta({...gr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ss});z$1.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di});var Pc=z$1.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":zr,"x-revturbine-schema-exposure":di}),Tc=["allowed","limited","denied"];z$1.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di});var Fo=z$1.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di}),$p=z$1.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":di});z$1.union([z$1.boolean(),z$1.number(),z$1.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ss});var Bt=z$1.string().min(1).max(200),ht=z$1.string().min(1).max(100),da=z$1.string().max(500).optional(),Ft=z$1.record(z$1.string(),z$1.unknown()).default({}),ns=z$1.number().int().min(10).max(100).multipleOf(10),tn=z$1.string().datetime().nullable().default(null),At=z$1.object({environment_id:z$1.string().min(1).default("production").meta({...gr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ss}),Dt=z$1.object({playbook_version_id:z$1.string().nullable().default(null).meta(gr),is_current:z$1.boolean().default(true).meta({...gr,readOnly:true}),is_deleted:z$1.boolean().default(false).meta({...gr,readOnly:true}),delete_date:z$1.string().datetime().nullable().default(null).meta({...gr,readOnly:true}),sequence:z$1.number().int().min(1).default(1).meta({...gr,readOnly:true}),base_sequence:z$1.number().int().nullable().default(null).meta({...gr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ss}),MA=H.merge(ie).merge(be).merge(At).extend({handle:ht.meta({...gr,readOnly:true}),active:z$1.boolean().default(true).meta({...gr,readOnly:true})});function hn(t){return MA.meta({id:t,"x-revturbine-schema-persistence":jA,"x-revturbine-schema-exposure":Ss})}var Lo=z$1.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ss}),Hp=z$1.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":zr,"x-revturbine-schema-exposure":Ss}),No=z$1.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":zr,"x-revturbine-schema-exposure":di});var Ye={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},ea={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},FA="x-revturbine-context",LA="x-revturbine-in-config",NA="x-revturbine-sdk-input",VA="x-revturbine-source",BA="x-revturbine-deprecation",zA={[Ye.Playbook]:ea.Customer,[Ye.Branding]:ea.Customer,[Ye.Billing]:ea.Stripe,[Ye.Metering]:ea.Customer,[Ye.CustomerOperations]:ea.Runtime,[Ye.EventIngestion]:ea.Runtime};function vt(t,e){return {[FA]:t,[LA]:e.inConfig??t===Ye.Playbook,[NA]:e.sdkInput,[VA]:e.source??zA[t]}}function Ic(t){return {deprecated:true,[BA]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Gp={Named:"named",Minted:"minted"},Fy="x-revturbine-schema-identity";function Rn(t="handle"){return {[Fy]:{kind:Gp.Named,handleField:t}}}function hr(t="handle"){return {[Fy]:{kind:Gp.Minted,handleField:t}}}var z=t=>z$1.object({items:z$1.array(t)}),we=z$1.object({error:z$1.string(),code:z$1.string(),request_id:z$1.string()}),f=t=>t,$=z$1.object({page:z$1.number().int().min(1).default(1).optional(),per_page:z$1.number().int().min(1).max(100).default(25).optional(),sort:z$1.string().optional(),order:z$1.enum(["asc","desc"]).default("asc").optional(),include_deleted:z$1.boolean().default(false).optional()});var{Unrestricted:$t,Financial:tu}=Ae,{Persisted:Cc,Transient:nu}=ze,{External:ji}=Fe,KA=vt(Ye.Playbook,{sdkInput:true}),$A=vt(Ye.Playbook,{sdkInput:false}),Yp=vt(Ye.Billing,{sdkInput:false}),pi=z$1.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":ji}),Rs=z$1.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":ji}),Vo=z$1.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":ji}),Ps=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...$t,readOnly:true}),name:Bt.meta($t),handle:ht.meta($t),tier_position:z$1.number().int().min(0).default(0).meta($t),sort_order:z$1.number().int().default(0).meta($t),visibility:pi.default("public").meta($t),metadata:Ft.meta($t)}).meta({id:"Plan","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":ji,...KA,...Rn()}),HA=hn("PlanAnchor"),Ts=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...$t,readOnly:true}),handle:ht.meta({...$t,readOnly:true}),plan_id:z$1.string().min(1).meta($t),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta($t),segment_id:z$1.string().nullable().default(null).meta($t),price_amount:z$1.number().min(0).meta(tu),pricing_model:Rs.meta($t),visibility:pi.default("public").meta($t),stripe_price_id:z$1.string().optional().meta($t),price_source:Vo.default("static").meta($t)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":ji,...Yp,...hr()}),GA=hn("PlanVariationAnchor"),Is=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...$t,readOnly:true}),name:Bt.meta($t),handle:ht.meta($t),sort_order:z$1.number().int().default(0).meta($t),visibility:pi.default("public").meta($t),metadata:Ft.meta($t)}).meta({id:"AddOn","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":ji,...$A,...Rn()}),YA=hn("AddOnAnchor"),Cs=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...$t,readOnly:true}),handle:ht.meta({...$t,readOnly:true}),addon_id:z$1.string().min(1).meta($t),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta($t),segment_id:z$1.string().nullable().default(null).meta($t),price_amount:z$1.number().min(0).meta(tu),pricing_model:Rs.meta($t),visibility:pi.default("public").meta($t),stripe_price_id:z$1.string().optional().meta($t),price_source:Vo.default("static").meta($t)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":ji,...Yp,...hr()}),WA=hn("AddOnVariationAnchor"),Ly=z$1.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":nu,"x-revturbine-schema-exposure":ji}),Es=H.merge(ie).merge(be).extend({stripe_price_id:z$1.string().min(1).meta($t),stripe_product_id:z$1.string().min(1).meta($t),billing_period:Ly.meta($t),unit_amount_cents:z$1.number().int().min(0).nullable().default(null).meta(tu),currency:$p.meta(tu),pricing_model:Rs.meta($t),nickname:z$1.string().nullable().default(null).meta($t),is_mock:z$1.boolean().default(false).meta($t),last_updated_from_stripe:tn.meta($t)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Cc,"x-revturbine-schema-exposure":ji,...Yp});var ZA=Kn(Ps),QA=Kn(Ts),JA=Kn(Is),XA=Kn(Cs),ew=Kn(Es);({"/api/plan-anchors":{get:f({operationId:"listPlanAnchors",requestParams:{query:$},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:z(HA)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:f({operationId:"listPlans",requestParams:{query:$},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:z(Ps)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:f({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qn(Ps)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ps}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:f({operationId:"getPlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Ps}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:f({operationId:"updatePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:ZA}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ps}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:f({operationId:"deletePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:f({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:f({operationId:"listPlanVariationAnchors",requestParams:{query:$},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:z(GA)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:f({operationId:"listPlanVariations",requestParams:{path:z$1.object({planId:z$1.string()}),query:$},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:z(Ts)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:f({operationId:"createPlanVariation",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qn(Ts)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Ts}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:f({operationId:"getPlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:Ts}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:f({operationId:"updatePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:QA}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Ts}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:f({operationId:"deletePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:f({operationId:"listAddOnAnchors",requestParams:{query:$},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:z(YA)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:f({operationId:"listAddOns",requestParams:{query:$},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:z(Is)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:f({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qn(Is)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Is}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:f({operationId:"getAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Is}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:f({operationId:"updateAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:JA}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Is}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:f({operationId:"listAddOnVariationAnchors",requestParams:{query:$},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:z(WA)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:f({operationId:"listAddOnVariations",requestParams:{path:z$1.object({addonId:z$1.string()}),query:$},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:z(Cs)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:f({operationId:"createAddOnVariation",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qn(Cs)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:f({operationId:"getAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:f({operationId:"updateAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:XA}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Cs}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:f({operationId:"deleteAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:f({operationId:"listStripePrices",requestParams:{query:$},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:z(Es)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:f({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Qn(Es)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:f({operationId:"getStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:f({operationId:"updateStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:ew}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Es}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:f({operationId:"deleteStripePrice",requestParams:{path:z$1.object({id:z$1.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}=Ae,{Persisted:Zp,Transient:pa}=ze,{Internal:Ny,External:ta}=Fe,Vy=vt(Ye.Playbook,{sdkInput:true}),nw=vt(Ye.Playbook,{inConfig:false,sdkInput:false}),Qp=z$1.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),Bo=z$1.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),By=z$1.enum(Tc).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),zy=z$1.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),Jp=z$1.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),As=z$1.object({entitlement_id:z$1.string().min(1).meta(Se),entitlement_handle:z$1.string().min(1).meta(Se),status:By.meta(Se),limit:z$1.number().optional().meta(Se),used:z$1.number().optional().meta(Se),allocation:Bo.optional().meta(Se),enforcement:Jp.optional().meta(Se),source:zy.optional().meta(Se),plan_id:z$1.string().optional().meta(Se),segment_id:z$1.string().optional().meta(Se),seat_type_id:z$1.string().optional().meta(Se),rule_id:z$1.string().optional().meta(Se)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta,...Ae.Operational});z$1.object({account:z$1.record(z$1.string(),As).optional().meta(Se),instance:z$1.record(z$1.string(),As).optional().meta(Se),user:z$1.record(z$1.string(),As).optional().meta(Se)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta,...Ae.Operational});var Ky=z$1.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),$y=z$1.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),au=z$1.object({kind:$y.meta(Se),id:z$1.string().min(1).meta(Se)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),Hy=z$1.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),ks=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Se,readOnly:true}),name:Bt.meta(Se),handle:ht.meta(Se),customer_facing_description:z$1.string().max(500).optional().meta(Se),type:Fo.meta(Se),unit:z$1.string().max(100).optional().meta(Se),period_scope:Qp.optional().meta(Se),allocation:Bo.optional().meta(Se),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(Se),sort_order:z$1.number().int().default(0).meta(Se),metadata:Ft.meta(Se)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":ta,...Vy,...Rn()}),aw=hn("EntitlementAnchor"),rs=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Se,readOnly:true}),handle:ht.meta({...Se,readOnly:true}),entitlement_id:z$1.string().min(1).meta(Se),targets:z$1.array(au).min(1).meta(Se),segment_ids:z$1.array(z$1.string()).default([]).meta(Se),visibility:Ky.default("public").meta(Se),period_scope:Qp.optional().meta(Se),instance:z$1.string().max(100).optional().meta(Se),reset_period:Hy.optional().meta(Se),limit_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(Se),enforcement:Jp.optional().meta(Se),warning_threshold_percent:ns.optional().meta(Se),overage_price_ref:z$1.string().optional().meta(Se),grace_period_hours:z$1.number().int().min(0).optional().meta(Se),tier_value:z$1.string().optional().meta(Se),rate_value:z$1.number().optional().meta(Se),initial_grant:z$1.number().optional().meta(Se),allowance_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(Se),rollover_enabled:z$1.boolean().optional().meta(Se),max_balance:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().default(null).meta(Se),seat_type_id:z$1.string().optional().meta(Se),included_count:z$1.union([z$1.number().int(),z$1.literal("unlimited")]).optional().meta(Se),at_limit_behavior:z$1.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Se),stripe_metered_price_id:z$1.string().optional().meta(Se),enabled:z$1.boolean().optional().meta(Se),allocation:Bo.optional().meta(Se),max_seats:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().optional().meta(Se),amount_cents:z$1.number().int().optional().meta(Se),currency:z$1.string().optional().meta(Se)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":Ny,...Vy,...hr()}),iw=hn("EntitlementRuleAnchor");rs.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var ow=z$1.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),lw=z$1.object({code:ow.meta(Se),message:z$1.string().min(1).meta(Se),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(Se)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta}),Wp=rs.extend({warnings:z$1.array(lw).optional().meta(Se)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":ta});var ru=H.merge(ie).merge(be).merge(At).merge(Dt).extend({handle:ht.meta({...Se,readOnly:true}),rule_id:z$1.string().min(1).meta(Se),experiment_id:z$1.string().min(1).meta(Se),variant_name:z$1.string().min(1).max(200).meta(Se),is_control:z$1.boolean().default(false).meta(Se),override_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Se)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Zp,"x-revturbine-schema-exposure":Ny,...nw,...hr()}),cw=Kn(ks),mw=Kn(rs);({"/api/entitlement-anchors":{get:f({operationId:"listEntitlementAnchors",requestParams:{query:$},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:z(aw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:f({operationId:"listEntitlementRuleAnchors",requestParams:{query:$},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:z(iw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:f({operationId:"listEntitlements",requestParams:{query:$},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:z(ks)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:f({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qn(ks)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:f({operationId:"getEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:f({operationId:"updateEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:cw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ks}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:f({operationId:"listEntitlementRules",requestParams:{path:z$1.object({entitlementId:z$1.string()}),query:$},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:z(rs)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:f({operationId:"createEntitlementRule",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qn(rs)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Wp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:f({operationId:"updateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:mw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:f({operationId:"duplicateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Wp}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:f({operationId:"listEntitlementRuleVariants",requestParams:{path:z$1.object({ruleId:z$1.string()}),query:$},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:z(ru)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:f({operationId:"createEntitlementRuleVariant",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Qn(ru)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ru}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Le}=Ae,{Persisted:iu,Transient:as}=ze,{External:Oa}=Fe,Yy=vt(Ye.Playbook,{sdkInput:true});vt(Ye.Playbook,{inConfig:false,sdkInput:false});var dw=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),pw=vt(Ye.Playbook,{inConfig:false,sdkInput:false,source:ea.Runtime}),gw=z$1.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Xp=z$1.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa}),eg=z$1.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa}),Wy=z$1.object({count:z$1.number().int().positive().meta(Le),period:eg.meta(Le)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa});z$1.object({surface_type:z$1.string().min(1).meta(Le),rules:z$1.array(Wy).meta(Le),cooldown_ms:z$1.number().int().nonnegative().optional().meta(Le)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":iu,"x-revturbine-schema-exposure":Oa,...Ae.Operational,...dw});var Zy=z$1.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":as,"x-revturbine-schema-exposure":Oa}),ws=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Le,readOnly:true}),name:Bt.meta(Le),handle:ht.meta(Le),description:da.meta(Le),category:Xp.meta(Le),drag_order_in_category:z$1.number().int().default(0).meta(Le),surface_slot_id:z$1.string().optional().meta(Le),entitlement_id:z$1.string().optional().meta(Le),tier_threshold:z$1.string().optional().meta(Le),threshold_percent:ns.optional().meta(Le),trial_type:z$1.enum(["free","reverse"]).optional().meta(Le),trigger_type:z$1.string().optional().meta(Le),trial_progress_percent:z$1.number().min(0).max(100).optional().meta(Le),days_before_end:z$1.number().int().min(0).optional().meta(Le),qualifier:gw.optional().meta(Le),activation_window_start:z$1.string().datetime().optional().meta(Le),activation_window_end:z$1.string().datetime().optional().meta(Le),metadata:Ft.meta(Le)}).meta({id:"Placement","x-revturbine-schema-persistence":iu,"x-revturbine-schema-exposure":Oa,...Yy,...Rn()}),fw=hn("PlacementAnchor"),Qy=z$1.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa}),Jy=z$1.object({code:Qy.meta(Le),message:z$1.string().min(1).meta(Le),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(Le)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa}),Gy=ws.extend({warnings:z$1.array(Jy).optional().meta(Le)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa});var Xy=z$1.object({label:z$1.string().min(1).max(200).meta(Le),cta_path_type:Zy.meta(Le),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Le)}).meta({id:"CtaObject","x-revturbine-schema-persistence":as,"x-revturbine-schema-exposure":Oa}),zo=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Le,readOnly:true}),handle:ht.meta({...Le,readOnly:true}),placement_id:z$1.string().min(1).meta(Le),drag_order:z$1.number().int().default(0).meta(Le),target_plan_ids:z$1.array(z$1.string()).default([]).meta(Le),target_plan_billing_cadences:z$1.array(z$1.string()).default([]).meta(Le),target_segments:z$1.array(z$1.string()).default([]).meta(Le),surface_slot_ids:z$1.array(z$1.string()).default([]).meta(Le),surface_template_id:z$1.string().min(1).meta(Le),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Le),cta_list:z$1.array(Xy).default([]).meta(Le),max_per_period:z$1.number().int().min(0).nullable().default(null).meta(Le),max_period_unit:eg.default("session").meta(Le),cooldown_after_dismiss_days:z$1.number().int().min(0).default(7).meta(Le),remind_later_minutes:z$1.number().int().min(0).nullable().default(null).meta(Le),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Le),recommendation_plan_override:z$1.string().optional().meta(Le)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":iu,"x-revturbine-schema-exposure":Oa,...Yy,...hr()}),_w=hn("PlacementPayloadAnchor"),ev=H.merge(ie).merge(be).merge(At).merge(Dt).extend({surface_slot_handle:z$1.string().min(1).max(200).meta(Le),surface_type:Pc.meta(Le),surface_template_ids:z$1.array(z$1.string()).default([]).meta(Le),surface_slot_category:z$1.enum(["fixed","gated","triggered"]).default("fixed").meta(Le),first_seen:z$1.string().datetime().meta({...Le,readOnly:true}),last_seen:z$1.string().datetime().meta({...Le,readOnly:true}),status:z$1.enum(["active","inactive","new"]).default("new").meta(Le),placement_count:z$1.number().int().min(0).default(0).meta({...Le,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":iu,"x-revturbine-schema-exposure":Oa,...pw,...Rn("surface_slot_handle")}),yw=Kn(ws),vw=Kn(zo);({"/api/placement-anchors":{get:f({operationId:"listPlacementAnchors",requestParams:{query:$},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:z(fw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:f({operationId:"listPlacements",requestParams:{query:$},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:z(ws)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:f({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Qn(ws)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Gy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:f({operationId:"getPlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:f({operationId:"updatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:yw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Gy}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:f({operationId:"deletePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:f({operationId:"duplicatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ws}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:f({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({category:Xp,ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:f({operationId:"listPlacementPayloadAnchors",requestParams:{query:$},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:z(_w)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:f({operationId:"listPlacementPayloads",requestParams:{path:z$1.object({placementId:z$1.string()}),query:$},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:z(zo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:f({operationId:"createPlacementPayload",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Qn(zo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:f({operationId:"updatePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:vw}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:f({operationId:"deletePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:f({operationId:"listSurfaceSlots",requestParams:{query:$},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:z(ev)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:qr,Pii:Ko}=Ae,{Persisted:ng,Transient:rg}=ze,{Internal:$o}=Fe,xw=vt(Ye.CustomerOperations,{sdkInput:false}),tv=z$1.object({external_id:z$1.string().min(1).meta(Ko),traits:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ko),plan_id:z$1.string().optional().meta(qr)}).meta({id:"Identity","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":$o}),su=z$1.enum(["payment_failed","payment_method_missing"]),tg=H.merge(ie).merge(be).extend({external_id:z$1.string().min(1).meta(Ko),identity:tv.meta(Ko),stripe_customer_id:z$1.string().optional().meta(qr),current_plan_id:z$1.string().optional().meta(qr),subscription_status:z$1.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(qr),status:z$1.enum(["active","churned","trial","suspended"]).default("active").meta(qr),billing_health_issues:z$1.array(su).default([]).meta(qr),metadata:Ft.meta(qr)}).meta({id:"Customer","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":$o}),nv=z$1.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":$o}),rv=z$1.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":$o}),av=z$1.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":rg,"x-revturbine-schema-exposure":$o}),Oi=H.merge(ie).merge(be).merge(At).merge(Dt).extend({handle:ht.meta({...qr,readOnly:true}),customer_id:z$1.string().min(1).meta(Ko),customer_id_list:z$1.array(z$1.string()).optional().meta(Ko),override_type:rv.meta(qr),target_id:z$1.string().min(1).meta(qr),value:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(qr),duration_type:nv.default("permanent").meta(qr),duration_value:z$1.string().optional().meta(qr),expiry_date:tn.meta(qr),status:av.default("active").meta(qr),reason:z$1.string().max(500).optional().meta(qr),created_by:z$1.string().optional().meta(qr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":ng,"x-revturbine-schema-exposure":$o,...xw,...hr()});({"/api/customers":{get:f({operationId:"listCustomers",requestParams:{query:$},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:z(tg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:f({operationId:"getCustomer",requestParams:{path:z$1.object({customerId:z$1.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:tg}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:f({operationId:"listCustomerOverrides",requestParams:{query:$},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:z(Oi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:f({operationId:"getCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:f({operationId:"updateCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Oi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:f({operationId:"deleteCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:f({operationId:"revokeCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:f({operationId:"duplicateCustomerOverride",requestParams:{path:z$1.object({overrideId:z$1.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({customer_id:z$1.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:Oi}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:je,Pii:Ec,Financial:ag}=Ae,{Persisted:iv,Transient:gi}=ze,{External:Ho,Internal:Rc}=Fe,kc=z$1.object({in_trial:z$1.boolean().meta(je),trial_type:z$1.string().optional().meta(je),plan_handle:z$1.string().optional().meta(je),state:z$1.enum(["active","running_out","expired","converted","none"]).optional().meta(je),trial_limit_type:z$1.enum(["time","usage"]).optional().meta(je),progress_percent:z$1.number().min(0).max(100).optional().meta(je),day_number:z$1.number().int().min(0).optional().meta(je),days_remaining:z$1.number().int().min(0).optional().meta(je),usage_entitlement_handle:z$1.string().optional().meta(je),usage_consumed:z$1.number().int().min(0).optional().meta(je),usage_remaining:z$1.number().int().min(0).optional().meta(je),usage_limit:z$1.number().int().min(0).optional().meta(je)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Ho}),ig=z$1.object({entitlement_handle:z$1.string().min(1).meta(je),unit:z$1.string().min(1).meta(je),amount:z$1.number().min(0).meta(je),limit:z$1.number().min(0).optional().meta(je),reset_date:z$1.string().optional().meta(je)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Ho});z$1.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Ho});var sg=z$1.object({handle:z$1.string().min(1).meta(je),name:z$1.string().min(1).meta(je),price:z$1.string().optional().meta(je),billing_period:z$1.enum(["monthly","annual","none"]).optional().meta(je)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Ho}),sv=z$1.object({product_instance_id:z$1.string().min(1).meta(je),user_id:z$1.string().min(1).meta(Ec),plan:sg.optional().meta(je),usage:z$1.record(z$1.string(),ig).default({}).meta(je),trial:kc.optional().meta(je),entitlements:z$1.record(z$1.string(),z$1.union([z$1.boolean(),As])).default({}).meta(je)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":iv,"x-revturbine-schema-exposure":Ho}),js=H.merge(be).merge(ie).extend({user_id:z$1.string().min(1).meta(Ec),account_id:z$1.string().min(1).nullable().optional().meta(Ec),email:z$1.string().email().nullable().optional().meta(Ec),email_type:z$1.string().optional().meta(je),plan_handle:z$1.string().min(1).optional().meta(je),plan:sg.optional().meta(je),usage:z$1.record(z$1.string(),ig).default({}).meta(je),trial:kc.optional().meta(je),payment_failed:z$1.boolean().optional().meta(je),payment_at_risk:z$1.boolean().optional().meta(je),tiers:z$1.record(z$1.string(),z$1.string()).optional().meta(je),entitlements:z$1.record(z$1.string(),z$1.union([z$1.boolean(),As])).default({}).meta(je),instances:z$1.array(sv).optional().meta(je),custom:z$1.record(z$1.string(),z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.null()])).default({}).meta(Ec),personalization:z$1.record(z$1.string(),z$1.union([z$1.string(),z$1.number()])).default({}).meta({...je,"x-revturbine-schema-persistence":gi}),derived_config_version:z$1.string().nullable().optional().meta(je),context_hash:z$1.string().nullable().optional().meta(je),derived_computed_at:tn.meta(je),activity_score:z$1.number().int().min(0).nullable().optional().meta(je),activity_score_computed_at:z$1.string().datetime().nullable().optional().meta(je),experiments:z$1.record(z$1.string(),z$1.string()).optional().meta(je)}).meta({id:"UserContext","x-revturbine-schema-persistence":iv,"x-revturbine-schema-exposure":Ho}),Tw=z$1.object({status:z$1.enum(["active","running_out","expired","converted","none"]).meta({...je,...Br}),days_remaining:z$1.number().int().min(0).optional().meta({...je,...Br}),ends_at:z$1.string().optional().meta({...je,...Br})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Rc}),Iw=z$1.object({health:z$1.enum(["ok","attention_required"]).optional().meta({...je,...Br}),failed_payment_reason:z$1.string().optional().meta({...ag,...eu}),issues:z$1.array(su).optional().meta({...ag,...eu}),provider_subscription_id:z$1.string().optional().meta({...ag,...zp})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Rc}),Cw=z$1.object({can_upgrade:z$1.boolean().optional().meta({...je,...Br}),can_manage_billing:z$1.boolean().optional().meta({...je,...Br})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Rc}),Ew=z$1.object({handle:z$1.string().min(1).optional().meta({...je,...Br}),name:z$1.string().min(1).optional().meta({...je,...Br})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Rc});z$1.object({subject:z$1.string().min(1).meta({...je,...Br}),context_version:z$1.string().optional().meta({...je,...Br}),trial:Tw.optional().meta({...je,...Br}),billing:Iw.optional().meta({...je,...Br}),plan:Ew.optional().meta({...je,...Br}),capabilities:Cw.optional().meta({...je,...Br})}).meta({id:"ClientContext","x-revturbine-schema-persistence":gi,"x-revturbine-schema-exposure":Rc});({"/api/user-contexts":{get:f({operationId:"listUserContexts",requestParams:{query:$},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:z(js)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:f({operationId:"getUserContext",requestParams:{path:z$1.object({userContextId:z$1.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:f({operationId:"updateUserContext",requestParams:{path:z$1.object({userContextId:z$1.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:js.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:f({operationId:"deleteUserContext",requestParams:{path:z$1.object({userContextId:z$1.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:Jn}=Ae,{Persisted:og,Transient:ov}=ze,{Internal:Ac}=Fe,Aw=vt(Ye.Playbook,{sdkInput:true}),lv=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),cv=z$1.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":Ac}),mv=z$1.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":Ac}),ou=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Jn,readOnly:true}),name:Bt.meta(Jn),handle:ht.optional().meta(Jn),category:cv.default("custom").meta(Jn),visibility_toggle:z$1.boolean().default(true).meta(Jn),source_type:mv.default("system").meta(Jn),estimated_size:z$1.number().int().min(0).optional().meta(Jn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Ac,...lv,...Rn()}),ww=hn("SegmentDimensionAnchor"),lu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Jn,readOnly:true}),dimension_id:z$1.string().min(1).meta(Jn),name:Bt.meta(Jn),handle:ht.meta(Jn),description:da.meta(Jn),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Jn),used_in_count:z$1.number().int().min(0).default(0).meta({...Jn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Ac,...lv,...Rn()}),jw=hn("SegmentValueAnchor");H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Jn,readOnly:true}),name:Bt.meta(Jn),handle:ht.meta(Jn),description:da.meta(Jn),rules:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Jn),experiment_id:z$1.string().min(1).optional().meta(Jn),is_active:z$1.boolean().default(true).meta(Jn),estimated_size:z$1.number().int().min(0).nullable().default(null).meta(Jn),metadata:Ft.meta(Jn)}).meta({id:"Segment","x-revturbine-schema-persistence":og,"x-revturbine-schema-exposure":Ac,...Aw,...Rn()});({"/api/segment-dimension-anchors":{get:f({operationId:"listSegmentDimensionAnchors",requestParams:{query:$},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:z(ww)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:f({operationId:"listSegmentValueAnchors",requestParams:{query:$},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:z(jw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:f({operationId:"listSegmentDimensions",requestParams:{query:$},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:z(ou)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:f({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string(),description:z$1.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:f({operationId:"deleteCustomDimension",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:f({operationId:"toggleDimensionVisibility",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({visible:z$1.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ou}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:f({operationId:"listSegmentValues",requestParams:{path:z$1.object({dimensionId:z$1.string()}),query:$},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:z(lu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:f({operationId:"createSegmentValue",requestParams:{path:z$1.object({dimensionId:z$1.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string(),handle:z$1.string(),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:lu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:f({operationId:"updateSegmentValue",requestParams:{path:z$1.object({valueId:z$1.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().optional(),definition_rule:z$1.record(z$1.string(),z$1.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:lu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:f({operationId:"deleteSegmentValue",requestParams:{path:z$1.object({valueId:z$1.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:ft}=Ae,{Persisted:Go,Transient:uv}=ze,{External:is}=Fe,lg=vt(Ye.Playbook,{sdkInput:true}),Dw=vt(Ye.Playbook,{inConfig:false,sdkInput:false}),Uw=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),Mw=vt(Ye.Playbook,{inConfig:false,sdkInput:true,source:ea.CodeConstant});H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...ft,readOnly:true}),handle:ht.meta({...ft,readOnly:true}),name:Bt.meta(ft),channel:z$1.enum(["in_app","email","push","sms","webhook"]).meta(ft),subject:z$1.string().max(500).optional().meta(ft),body:z$1.string().meta(ft),template_variables:z$1.array(z$1.string()).default([]).meta(ft),metadata:Ft.meta(ft)}).meta({id:"Message","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":is,...Dw,...hr()});var cu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),action_type:No.meta(ft),target_url:z$1.string().optional().meta(ft),target_plan_id:z$1.string().optional().meta(ft),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(ft),metadata:Ft.meta(ft)}).meta({id:"CtaPath","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":is,...lg,...Rn()}),Lw=hn("CtaPathAnchor"),dv=z$1.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":Go,"x-revturbine-schema-exposure":is,...Mw}),pv=z$1.object({name:z$1.string().min(1),field_type:dv,required:z$1.boolean().default(false),default_value:z$1.unknown().optional(),order:z$1.number().int().min(0).optional(),help_text:z$1.string().max(500).optional()}).meta({id:"FieldDefinition","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":is,...Uw}),mu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),surface_type:Hp.meta(ft),field_definitions:z$1.array(pv).default([]).meta(ft),description:da.meta(ft)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":is,...lg,...Rn()}),Nw=hn("SurfaceTemplateAnchor"),uu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...ft,readOnly:true}),name:Bt.meta(ft),handle:ht.meta(ft),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(ft),variation_dimension_id:z$1.string().optional().meta(ft),variation_values:z$1.array(z$1.object({segment_value_id:z$1.string(),content_fields_override:z$1.record(z$1.string(),z$1.unknown())})).optional().meta(ft),notes:z$1.string().max(1e3).optional().meta(ft),used_in_count:z$1.number().int().min(0).default(0).meta({...ft,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":Go,"x-revturbine-schema-exposure":is,...lg,...Rn()}),Vw=hn("MessageBlockRecordAnchor"),gv=z$1.object({segment_id:z$1.string().min(1).meta(ft),message_block_id:z$1.string().min(1).meta(ft),ui_path_id:z$1.string().optional().meta(ft),promotion_id:z$1.string().optional().meta(ft)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":is});z$1.object({payload_id:z$1.string().min(1).meta(ft),tenant_id:z$1.string().min(1).meta(ft),name:Bt.meta(ft),surface_template_id:z$1.string().min(1).meta(ft),default_message_block_id:z$1.string().min(1).meta(ft),segment_content_map:z$1.array(gv).optional().meta(ft),ui_path_id:z$1.string().optional().meta(ft),promotion_id:z$1.string().optional().meta(ft),status:z$1.enum(["draft","active","inactive"]).meta(ft),created_at:z$1.string().datetime().optional().meta({...ft,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...ft,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":uv,"x-revturbine-schema-exposure":is});({"/api/surface-template-anchors":{get:f({operationId:"listSurfaceTemplateAnchors",requestParams:{query:$},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:z(Nw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:f({operationId:"listSurfaceTemplates",requestParams:{query:$},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:z(mu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:f({operationId:"listMessageBlockRecordAnchors",requestParams:{query:$},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:z(Vw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:f({operationId:"listMessageBlocks",requestParams:{query:$},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:z(uu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:f({operationId:"listCtaPathAnchors",requestParams:{query:$},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:z(Lw)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:f({operationId:"listCtaPaths",requestParams:{query:$},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:z(cu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Yo,Pii:Kw}=Ae,{Persisted:hv}=ze,{Internal:$w,External:Hw}=Fe,Gw=vt(Ye.Branding,{sdkInput:false});z$1.object({id:z$1.string().min(1).meta({...Yo,readOnly:true}),name:z$1.string().min(1).max(120).meta(Yo),mode:z$1.enum(["light","dark","system"]).default("system").meta(Yo),tokens:z$1.record(z$1.string(),z$1.string()).default({}).meta(Yo)}).meta({id:"Theme","x-revturbine-schema-persistence":hv,"x-revturbine-schema-exposure":Hw,...Gw});var cg=H.merge(ie).extend({user_id:z$1.string().min(1).meta(Kw),scope:z$1.string().min(1).meta(Yo),preferences:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Yo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":hv,"x-revturbine-schema-exposure":$w});({"/api/ui-preferences":{get:f({operationId:"listUiPreferences",requestParams:{query:$},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:z(cg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:f({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z$1.array(Kn(cg))}}},responses:{200:{description:"UI preferences upsert response",content:{"application/json":{schema:z$1.object({updated:z$1.number().int().min(0)})}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"upsert",writeSchema:"UiPreferenceSchema#writable"}}})}});var {Unrestricted:Pt,Financial:hi}=Ae,{Persisted:fv,Transient:wc}=ze,{External:jc,Internal:_v}=Fe,yv=z$1.object({month:z$1.string().meta(Pt),cohort_size:z$1.number().int().min(0).meta(Pt),retained:z$1.number().int().min(0).meta(Pt),retention_rate:z$1.number().min(0).max(1).meta(Pt),revenue_cents:z$1.number().int().min(0).meta(hi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":jc}),vv=z$1.object({step:z$1.string().meta(Pt),label:z$1.string().meta(Pt),count:z$1.number().int().min(0).meta(Pt),conversion_rate:z$1.number().min(0).max(1).meta(Pt),drop_off_rate:z$1.number().min(0).max(1).meta(Pt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":jc}),bv=z$1.object({placement_id:z$1.string().meta(Pt),placement_name:z$1.string().meta(Pt),impressions:z$1.number().int().min(0).meta(Pt),clicks:z$1.number().int().min(0).meta(Pt),conversions:z$1.number().int().min(0).meta(Pt),ctr:z$1.number().min(0).meta(Pt),conversion_rate:z$1.number().min(0).meta(Pt),revenue_cents:z$1.number().int().min(0).meta(hi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":jc}),xv=z$1.object({date:z$1.string().meta(Pt),mrr_cents:z$1.number().int().min(0).meta(hi),arr_cents:z$1.number().int().min(0).meta(hi),new_mrr_cents:z$1.number().int().min(0).meta(hi),churned_mrr_cents:z$1.number().int().min(0).meta(hi),expansion_mrr_cents:z$1.number().int().min(0).meta(hi),net_new_mrr_cents:z$1.number().int().meta(hi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":jc}),Sv=z$1.object({metric_key:z$1.string().min(1).meta(Pt),label:z$1.string().meta(Pt),current_value:z$1.number().meta(hi),previous_value:z$1.number().nullable().default(null).meta(hi),change_percent:z$1.number().nullable().default(null).meta(Pt),period:z$1.string().meta(Pt),unit:z$1.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(Pt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":wc,"x-revturbine-schema-exposure":jc}),mg=H.merge(ie).merge(be).extend({report_type:z$1.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(Pt),severity:Lo.meta(Pt),resource_type:z$1.string().min(1).meta(Pt),resource_id:z$1.string().min(1).meta(Pt),summary:z$1.string().max(1e3).meta(Pt),expected_value:z$1.unknown().optional().meta(Pt),actual_value:z$1.unknown().optional().meta(Pt),affected_customer_count:z$1.number().int().min(0).default(0).meta(Pt),is_resolved:z$1.boolean().default(false).meta(Pt),resolved_at:tn.meta(Pt),metadata:Ft.meta(Pt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":fv,"x-revturbine-schema-exposure":_v}),ug=H.merge(ie).merge(be).extend({alert_type:z$1.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(Pt),severity:Lo.meta(Pt),title:z$1.string().min(1).max(300).meta(Pt),description:z$1.string().max(2e3).meta(Pt),resource_type:z$1.string().optional().meta(Pt),resource_id:z$1.string().optional().meta(Pt),is_acknowledged:z$1.boolean().default(false).meta(Pt),acknowledged_at:tn.meta(Pt),acknowledged_by:z$1.string().nullable().default(null).meta(Pt),metadata:Ft.meta(Pt)}).meta({id:"Alert","x-revturbine-schema-persistence":fv,"x-revturbine-schema-exposure":_v});({"/api/analytics/kpis":{get:f({operationId:"listKpiAggregates",requestParams:{query:$},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:z(Sv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:f({operationId:"listPlacementPerformance",requestParams:{query:$},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:z(bv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:f({operationId:"listRevenueMetrics",requestParams:{query:$},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:z(xv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:f({operationId:"listCohortMetrics",requestParams:{query:$},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:z(yv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:f({operationId:"listFunnelSteps",requestParams:{query:$},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:z(vv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:f({operationId:"listDriftReports",requestParams:{query:$},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:z(mg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:f({operationId:"resolveDriftReport",requestParams:{path:z$1.object({reportId:z$1.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:mg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:f({operationId:"listAlerts",requestParams:{query:$},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:z(ug)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:f({operationId:"acknowledgeAlert",requestParams:{path:z$1.object({alertId:z$1.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:ug}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var{Unrestricted:b}=Ae,{Transient:Qw}=ze,{Internal:Jw}=Fe,He=t=>({id:t,"x-revturbine-schema-persistence":Qw,"x-revturbine-schema-exposure":Jw}),Pv=/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$/,du=/^[a-z][a-z0-9_-]{0,99}$/,Qt=z$1.string().regex(Pv).max(120),ba=z$1.string().regex(du),pu=Qt.meta(He("AnalyticsSemanticId")),qs=z$1.enum(["account","user","billing_unit","organization"]).meta(He("AnalyticsAnalyticalUnit")),Wo=z$1.enum(["scalar","timeseries","breakdown","funnel","table","timeline"]).meta(He("AnalyticsQueryFamily")),Zo=z$1.enum(["total","revturbine_tracked","revturbine_influenced"]).meta(He("AnalyticsSourceScope")),gg=z$1.enum(["as_of_event","current"]).meta(He("AnalyticsHistoricalMode")),Tv=z$1.enum(["hour","day","week","month","quarter"]).meta(He("AnalyticsTimeGrain")),gu=z$1.enum(["none","previous_period","previous_year"]).meta(He("AnalyticsCompareMode")),Oc=z$1.enum(["eq","neq","in","not_in","between","gte","lte","is_null","is_not_null","contains"]).meta(He("AnalyticsFilterOperator")),hu=z$1.enum(["date_range","single_select","multi_select","search_select","number_range"]).meta(He("AnalyticsFilterControl")),Iv=z$1.enum(["low","medium","high"]).meta(He("AnalyticsCardinalityClass")),qc=z$1.enum(["string","number","currency","percent","date","datetime","boolean"]).meta(He("AnalyticsFieldType")),Cv=z$1.enum(["string","number","boolean","date","datetime","id","enum"]).meta(He("AnalyticsDimensionType")),fu=z$1.enum(["filter","group","split","sort"]).meta(He("AnalyticsDimensionCapability")),Ev=z$1.enum(["private","team","tenant"]).meta(He("AnalyticsViewVisibility")),dg=z$1.enum(["title","filter_defaults","metric_selection","grouping","compatible_renderer","sort","limit","block_visibility","layout","source_scope","handoff_target","hidden_scope","raw_expression"]).meta(He("AnalyticsCustomizationCapability")),Rv=z$1.enum(["unrestricted","pii","financial","operational"]).meta(He("AnalyticsClassification")),ra=z$1.strictObject({value:z$1.string().min(1).max(300).meta(b),key:z$1.string().max(120).optional().meta(b)}).meta(He("LocalizedText")),pg=z$1.union([z$1.string().max(200),z$1.number(),z$1.boolean(),z$1.null()]),Qo=z$1.union([pg,z$1.array(pg).max(100),z$1.strictObject({preset:z$1.string().regex(/^[a-z0-9_]{1,20}$/).meta(b),compare:gu.optional().meta(b)}),z$1.strictObject({min:z$1.number().optional().meta(b),max:z$1.number().optional().meta(b)})]).meta(He("AnalyticsFilterValue")),_u=z$1.strictObject({dimension:Qt.meta(b),operator:Oc.meta(b),value:Qo.optional().meta(b)}).meta(He("AnalyticsSemanticFilter")),Os=z$1.strictObject({type:z$1.enum(["number","currency","percent","duration"]).meta(b),decimals:z$1.number().int().min(0).max(6).optional().meta(b),compact:z$1.boolean().optional().meta(b)}).meta(He("AnalyticsFormatSpec")),kv=z$1.strictObject({legend:z$1.enum(["none","top","right","bottom","left"]).optional().meta(b),value_labels:z$1.boolean().optional().meta(b),reference_lines:z$1.array(z$1.strictObject({value:z$1.number().meta(b),label:ra.optional().meta(b)})).max(5).optional().meta(b),x_axis_format:Os.optional().meta(b),y_axis_format:Os.optional().meta(b),empty_state:z$1.enum(["blank","message"]).optional().meta(b)}).meta(He("AnalyticsSafeChartOptions")),yu=z$1.object({deprecated:z$1.boolean().meta(b),replaced_by:Qt.optional().meta(b)}).meta(He("AnalyticsCatalogDeprecation")),hg=yu,fg=z$1.object({id:Qt.meta(b),label:z$1.string().min(1).max(120).meta(b),description:z$1.string().max(500).optional().meta(b),when_to_use:z$1.string().max(500).optional().meta(b),do_not_use_for:z$1.string().max(500).optional().meta(b),type:Cv.meta(b),operators:z$1.array(Oc).min(1).meta(b),control:hu.meta(b),capabilities:z$1.array(fu).min(1).meta(b),cardinality:Iv.meta(b),classification:Rv.default("unrestricted").meta(b),historical_mode:gg.optional().meta(b),allowed_concepts:z$1.array(Qt).optional().meta(b),exclude_from_segment_picker:z$1.boolean().default(false).meta(b),deprecation:yu.optional().meta(b)}).meta(He("AnalyticsCatalogDimension")),_g=z$1.object({id:Qt.meta(b),label:z$1.string().min(1).max(120).meta(b),description:z$1.string().max(500).optional().meta(b),when_to_use:z$1.string().max(500).optional().meta(b),do_not_use_for:z$1.string().max(500).optional().meta(b),value_type:qc.meta(b),format:Os.optional().meta(b),source_scope:Zo.optional().meta(b),deprecation:yu.optional().meta(b)}).meta(He("AnalyticsCatalogMetric")),yg=z$1.object({id:Qt.meta(b),version:z$1.number().int().min(1).meta(b),label:z$1.string().min(1).max(120).meta(b),description:z$1.string().max(500).optional().meta(b),when_to_use:z$1.string().max(500).optional().meta(b),do_not_use_for:z$1.string().max(500).optional().meta(b),grain:z$1.array(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/)).min(1).meta(b),analytical_units:z$1.array(qs).min(1).meta(b),primary_time_dimension:Qt.meta(b),historical_mode:gg.meta(b),dimensions:z$1.array(Qt).min(1).meta(b),metrics:z$1.array(Qt).min(1).meta(b),query_families:z$1.array(Wo).min(1).meta(b),source_scope:Zo.meta(b),coverage_metric:Qt.optional().meta(b),deprecation:yu.optional().meta(b)}).meta(He("AnalyticsCatalogConcept")),Av=z$1.strictObject({field:Qt.meta(b),direction:z$1.enum(["asc","desc"]).meta(b)}),wv=z$1.strictObject({dimension:Qt.meta(b),grain:Tv.meta(b)}),jv=z$1.strictObject({concept:Qt.meta(b),family:Wo.meta(b),metrics:z$1.array(Qt).min(1).max(10).meta(b),group_by:z$1.array(Qt).max(3).optional().meta(b),time:wv.optional().meta(b),filters_from:z$1.array(ba).max(20).optional().meta(b),fixed_filters:z$1.array(_u).max(20).optional().meta(b),compare:gu.optional().meta(b),order_by:z$1.array(Av).max(3).optional().meta(b),limit:z$1.number().int().min(1).max(1e3).optional().meta(b)}).meta(He("AnalyticsViewQuery")),Ov=z$1.strictObject({type:z$1.literal("metric").meta(b),value:Qt.meta(b),comparison:Qt.optional().meta(b),format:Os.optional().meta(b)}).meta(He("AnalyticsRenderMetric")),qv=z$1.strictObject({type:z$1.literal("cartesian").meta(b),mark:z$1.enum(["line","area","bar","stacked_bar","scatter"]).meta(b),encoding:z$1.strictObject({x:Qt.meta(b),y:z$1.union([Qt,z$1.array(Qt).min(1).max(5)]).meta(b),color:Qt.optional().meta(b),facet:Qt.optional().meta(b)}).meta(b),options:kv.optional().meta(b)}).meta(He("AnalyticsRenderCartesian")),Dv=z$1.strictObject({type:z$1.literal("funnel").meta(b),stages:z$1.array(Qt).min(2).max(10).meta(b),split_by:Qt.optional().meta(b)}).meta(He("AnalyticsRenderFunnel")),Uv=z$1.strictObject({type:z$1.literal("table").meta(b),columns:z$1.array(Qt).min(1).max(20).meta(b)}).meta(He("AnalyticsRenderTable")),Mv=z$1.strictObject({type:z$1.literal("timeline").meta(b),timestamp:Qt.meta(b),event_type:Qt.meta(b)}).meta(He("AnalyticsRenderTimeline")),Fv=z$1.strictObject({type:z$1.literal("recommendations").meta(b),presentation:z$1.enum(["list","ranked_cards"]).meta(b)}).meta(He("AnalyticsRenderRecommendations")),vg=z$1.discriminatedUnion("type",[Ov,qv,Dv,Uv,Mv,Fv]).meta(He("AnalyticsRenderSpec")),Lv=z$1.strictObject({id:ba.meta(b),dimension:Qt.meta(b),control:hu.meta(b),label:ra.optional().meta(b),operators:z$1.array(Oc).min(1).meta(b),default_value:Qo.optional().meta(b),required:z$1.boolean().default(false).meta(b),pinned:z$1.boolean().default(false).meta(b),applies_to:z$1.union([z$1.literal("all"),z$1.array(ba).min(1).max(24)]).default("all").meta(b)}).meta(He("AnalyticsViewFilter")),bg=z$1.strictObject({type:z$1.literal("grid").meta(b),columns:z$1.number().int().min(1).max(24).default(12).meta(b),items:z$1.array(z$1.strictObject({block_id:ba.meta(b),x:z$1.number().int().min(0).meta(b),y:z$1.number().int().min(0).meta(b),w:z$1.number().int().min(1).max(24).meta(b),h:z$1.number().int().min(1).max(24).meta(b)})).max(24).meta(b)}).meta(He("AnalyticsViewLayout")),Nv=z$1.strictObject({id:ba.meta(b),title:ra.optional().meta(b),description:ra.optional().meta(b),query:jv.meta(b),render:vg.meta(b)}).meta(He("AnalyticsViewBlock")),Vv=z$1.strictObject({id:ba.meta(b),label:ra.meta(b),target:Qt.meta(b),bindings:z$1.record(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z$1.string().min(1).max(200)).default({}).meta(b)}).meta(He("AnalyticsViewHandoff")),Bv=z$1.strictObject({allow:z$1.array(dg).default([]).meta(b),deny:z$1.array(dg).default([]).meta(b)}).meta(He("AnalyticsCustomizationPolicy"));var zv=z$1.string().regex(/^\d+\.\d+$/),vu=z$1.strictObject({kind:z$1.literal("revturbine.analytics-view").meta(b),schema_version:zv.meta(b),id:ba.meta(b),revision:z$1.number().int().min(1).meta(b),title:ra.meta(b),description:ra.optional().meta(b),analytical_unit:qs.meta(b),base_template:z$1.strictObject({id:ba.meta(b),version:z$1.number().int().min(1).meta(b)}).optional().meta(b),catalog_version:z$1.string().min(1).max(64).meta(b),filters:z$1.array(Lv).max(20).meta(b),layout:bg.meta(b),blocks:z$1.array(Nv).min(1).max(24).meta(b),handoffs:z$1.array(Vv).max(10).optional().meta(b),customization_policy:Bv.meta(b)}).meta(He("AnalyticsView")),Kv=z$1.strictObject({id:ba.optional().meta(b),dimension:Qt.meta(b),control:hu.optional().meta(b),label:ra.optional().meta(b),operators:z$1.array(Oc).min(1).optional().meta(b),default_value:Qo.optional().meta(b),required:z$1.boolean().optional().meta(b),pinned:z$1.boolean().optional().meta(b),applies_to:z$1.union([z$1.literal("all"),z$1.array(ba).min(1).max(24)]).optional().meta(b)}).meta(He("AnalyticsViewFilterDraft")),$v=z$1.strictObject({id:ba.optional().meta(b),title:ra.optional().meta(b),concept:Qt.meta(b),family:Wo.meta(b),metrics:z$1.array(Qt).min(1).max(10).meta(b),group_by:z$1.array(Qt).max(3).optional().meta(b),time:wv.optional().meta(b),filters_from:z$1.array(ba).max(20).optional().meta(b),fixed_filters:z$1.array(_u).max(20).optional().meta(b),compare:gu.optional().meta(b),order_by:z$1.array(Av).max(3).optional().meta(b),limit:z$1.number().int().min(1).max(1e3).optional().meta(b),render:z$1.union([z$1.literal("auto"),vg]).optional().meta(b)}).meta(He("AnalyticsViewBlockDraft")),Hv=z$1.strictObject({id:ba.optional().meta(b),label:ra.optional().meta(b),target:Qt.meta(b),bindings:z$1.record(z$1.string().regex(/^[a-z][a-z0-9_]{0,49}$/),z$1.string().min(1).max(200)).optional().meta(b)}).meta(He("AnalyticsViewHandoffDraft"));z$1.strictObject({kind:z$1.literal("revturbine.analytics-view-draft").meta(b),schema_version:zv.meta(b),title:ra.meta(b),analytical_unit:qs.optional().meta(b),filters:z$1.union([z$1.literal("recommended"),z$1.array(Kv).max(20)]).optional().meta(b),layout:z$1.union([z$1.literal("auto"),bg]).optional().meta(b),blocks:z$1.array($v).min(1).max(24).meta(b),handoffs:z$1.union([z$1.literal("recommended"),z$1.array(Hv).max(10)]).optional().meta(b),visibility:Ev.optional().meta(b)}).meta(He("AnalyticsViewDraft"));var xg=z$1.string().regex(/^(\/[^/]*)*$/).max(300),Gv=z$1.strictObject({op:z$1.enum(["add","replace","remove"]).meta(b),path:xg.meta(b),value:z$1.unknown().optional().meta(b)}).meta(He("AnalyticsSuggestedPatchOp")),Sg=z$1.object({code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),message:z$1.string().min(1).max(500).meta(b)}).meta(He("AnalyticsWarning")),Yv=z$1.object({code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(b),path:xg.meta(b),message:z$1.string().min(1).max(500).meta(b),actual:z$1.unknown().optional().meta(b),allowed:z$1.array(pg).max(50).optional().meta(b),suggested_patch:z$1.array(Gv).max(10).optional().meta(b)}).meta(He("AnalyticsValidationIssue"));z$1.object({path:xg.meta(b),rule:z$1.string().min(1).max(120).meta(b),value:z$1.unknown().optional().meta(b)}).meta(He("AnalyticsCompileResolution"));z$1.object({valid:z$1.boolean().meta(b),errors:z$1.array(Yv).default([]).meta(b),warnings:z$1.array(Sg).default([]).meta(b),catalog_version:z$1.string().min(1).max(64).meta(b)}).meta(He("AnalyticsValidationResult"));var Wv=z$1.object({id:Qt.meta(b),type:qc.meta(b),nullable:z$1.boolean().meta(b)}).meta(He("AnalyticsResultField")),Zv=z$1.object({numerator:z$1.number().int().min(0).meta(b),denominator:z$1.number().int().min(0).meta(b),rate:z$1.number().min(0).max(1).meta(b)}).meta(He("AnalyticsCoverage")),Qv=z$1.object({query_hash:z$1.string().min(1).max(128).meta(b),concept:Qt.meta(b),analytical_unit:qs.meta(b),source_scope:Zo.meta(b),coverage:Zv.optional().meta(b),as_of:z$1.string().datetime().meta(b),freshness_seconds:z$1.number().int().min(0).meta(b),applied_filters:z$1.array(_u).default([]).meta(b),next_cursor:z$1.string().max(500).optional().meta(b),warnings:z$1.array(Sg).default([]).meta(b)}).meta(He("AnalyticsResultMeta")),Pg=z$1.object({data:z$1.array(z$1.record(z$1.string(),z$1.unknown())).meta(b),fields:z$1.array(Wv).meta(b),meta:Qv.meta(b)}).meta(He("AnalyticsResult"));var {Unrestricted:$n}=Ae,{Transient:nj}=ze,{Internal:rj}=Fe,Dc=t=>({id:t,"x-revturbine-schema-persistence":nj,"x-revturbine-schema-exposure":rj}),Jv=z$1.enum(["fixture","generated"]).meta(Dc("AnalyticsCatalogSource"));z$1.object({catalog_version:z$1.string().min(1).max(64).meta($n),source:Jv.meta($n),generated_at:z$1.string().datetime().optional().meta($n),concepts:z$1.array(yg).min(1).meta($n),dimensions:z$1.array(fg).min(1).meta($n),metrics:z$1.array(_g).min(1).meta($n)}).meta(Dc("AnalyticsCatalog"));var Xv=z$1.enum(["concept","dimension","metric","query_family"]).meta(Dc("AnalyticsAgentCatalogEntryKind")),eb=z$1.object({id:pu.meta($n),kind:Xv.meta($n),label:z$1.string().min(1).max(120).meta($n),description:z$1.string().min(1).max(500).meta($n),when_to_use:z$1.string().max(500).optional().meta($n),do_not_use_for:z$1.string().max(500).optional().meta($n),value_type:qc.optional().meta($n),format:Os.optional().meta($n),capabilities:z$1.array(fu).optional().meta($n),compatible_concepts:z$1.array(pu).optional().meta($n),compatible_families:z$1.array(Wo).optional().meta($n),analytical_units:z$1.array(qs).optional().meta($n),source_scope:Zo.optional().meta($n),example:z$1.string().max(2e3).optional().meta($n),deprecation:hg.optional().meta($n)}).meta(Dc("AnalyticsAgentCatalogEntry"));z$1.object({catalog_version:z$1.string().min(1).max(64).meta($n),query:z$1.string().min(1).max(200).meta($n),entries:z$1.array(eb).max(50).meta($n)}).meta(Dc("AnalyticsCatalogSearchResult"));var {Unrestricted:or}=Ae,{Transient:lj}=ze,{Internal:cj}=Fe,Jo=t=>({id:t,"x-revturbine-schema-persistence":lj,"x-revturbine-schema-exposure":cj}),Ds=z$1.string().regex(du),nb=z$1.strictObject({filter_id:Ds.meta(or),value:Qo.nullable().meta(or)}).meta(Jo("AnalyticsFilterState"));z$1.strictObject({view_id:Ds.meta(or),revision:z$1.number().int().min(1).optional().meta(or),block_ids:z$1.array(Ds).min(1).max(24).optional().meta(or),filter_state:z$1.array(nb).max(20).optional().meta(or)}).meta(Jo("AnalyticsQueryRequest"));var ab=z$1.object({block_id:Ds.meta(or),code:z$1.string().regex(/^[A-Z][A-Z0-9_]{2,79}$/).meta(or),message:z$1.string().min(1).max(500).meta(or)}).meta(Jo("AnalyticsBlockError")),ib=z$1.object({block_id:Ds.meta(or),result:Pg.meta(or)}).meta(Jo("AnalyticsBlockResult"));z$1.object({view_id:Ds.meta(or),revision:z$1.number().int().min(1).meta(or),catalog_version:z$1.string().min(1).max(64).meta(or),results:z$1.array(ib).meta(or),errors:z$1.array(ab).default([]).meta(or)}).meta(Jo("AnalyticsQueryResponse"));var ob=z$1.object({id:Ds.meta(or),version:z$1.number().int().min(1).meta(or),title:ra.meta(or),description:ra.optional().meta(or),block_count:z$1.number().int().min(1).meta(or)}).meta(Jo("AnalyticsTemplateSummary"));z$1.object({q:z$1.string().min(1).max(200),limit:z$1.coerce.number().int().min(1).max(50).optional()});({"/api/analytics/templates":{get:f({operationId:"listAnalyticsTemplates",summary:"List system view templates",tags:["analytics-views"],responses:{200:{description:"Template summaries",content:{"application/json":{schema:z(ob)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})},"/api/analytics/views/{viewId}":{get:f({operationId:"getAnalyticsView",requestParams:{path:z$1.object({viewId:z$1.string()})},summary:"Load a system or saved view document",tags:["analytics-views"],responses:{200:{description:"Canonical view document",content:{"application/json":{schema:vu}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics-views"}})}});var {Unrestricted:fi}=Ae,{Transient:Uc}=ze,{External:Mc}=Fe,Ig=z$1.enum(["sdk_client","sdk_server","control_plane","webhook_derived"]).meta({id:"EventSurface","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),cb=z$1.enum(["stable","internal","deprecated"]).meta({id:"EventStability","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),mb=z$1.object({name:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(fi),surface:Ig.meta(fi),purpose:z$1.string().min(1).max(300).meta(fi),stability:cb.meta(fi)}).meta({id:"EventTaxonomyEntry","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc}),ub=z$1.object({prefix:z$1.string().regex(/^[a-z][a-z0-9_]*_$/).meta(fi),surface:Ig.meta(fi),purpose:z$1.string().min(1).max(300).meta(fi)}).meta({id:"EventPrefixFamily","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc});z$1.object({version:z$1.number().int().min(1).meta(fi),events:z$1.array(mb).min(1).meta(fi),prefix_families:z$1.array(ub).meta(fi)}).meta({id:"EventTaxonomy","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Mc});var Su=["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"],db=["placement_resolved","placement_rendered","placement_exposed","placement_outcome","placement_interaction","gate_evaluated","gate_attempted","gate_allowed","gate_denied","slot_evaluated","slot_filled","slot_empty","slot_suppressed","slot_error","segment_enrolled","segment_unenrolled","user_context_observed","page_view"],pb=["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"],gb=["area_viewed","feature_gated"],lb={web_signed_up:{purpose:"An operator created a control-plane account via the web app.",stability:"stable"},web_signed_in:{purpose:"An operator signed in to the web app.",stability:"stable"},cli_signed_up:{purpose:"An operator created an account through the CLI device flow.",stability:"stable"},cli_signed_in:{purpose:"An operator authenticated the CLI.",stability:"stable"},cli_command_executed:{purpose:"A CLI command ran; the command name rides on payload.command.",stability:"stable"},changeset_submitted:{purpose:"A playbook version was submitted for review.",stability:"stable"},changeset_approved:{purpose:"A playbook version was approved.",stability:"stable"},changeset_rejected:{purpose:"A playbook version was rejected.",stability:"stable"},changeset_deployed:{purpose:"A playbook version was compiled and activated.",stability:"stable"},changeset_launched:{purpose:"A deployed playbook version was launched to traffic.",stability:"stable"},changeset_parked:{purpose:"A playbook version was parked.",stability:"stable"},changeset_resumed:{purpose:"A parked playbook version resumed.",stability:"stable"},changeset_discarded:{purpose:"A draft playbook version was discarded.",stability:"stable"},changeset_archived:{purpose:"A playbook version was archived.",stability:"stable"},config_imported:{purpose:"A Playbook was imported as a staged change set.",stability:"stable"},config_exported:{purpose:"A Playbook was exported.",stability:"stable"},entity_created:{purpose:"A config entity was created; the resource rides on payload.resource.",stability:"stable"},entity_updated:{purpose:"A config entity was updated; the resource rides on payload.resource.",stability:"stable"},entity_deleted:{purpose:"A config entity was deleted; the resource rides on payload.resource.",stability:"stable"},web_api_error:{purpose:"A control-plane API request failed; internal telemetry only, never via the customer SDK.",stability:"internal"},area_viewed:{purpose:"An authenticated product area of the web app was viewed (dashboard, a studio).",stability:"internal"},feature_gated:{purpose:"A nav-gated section of the web app rendered its gate notice \u2014 the control plane\u2019s own paywall analog.",stability:"internal"},placement_resolved:{purpose:"The decision engine resolved a placement for a slot.",stability:"stable"},placement_rendered:{purpose:"A resolved placement's visual root rendered.",stability:"stable"},placement_exposed:{purpose:"A rendered placement met the exposure basis (render or viewport).",stability:"stable"},placement_outcome:{purpose:"A placement reached a terminal outcome (converted, dismissed, \u2026).",stability:"stable"},placement_interaction:{purpose:"A user interacted with a presented placement.",stability:"stable"},gate_evaluated:{purpose:"A gate was evaluated during render; the passive denominator signal.",stability:"stable"},gate_attempted:{purpose:"A user actively invoked a gated action.",stability:"stable"},gate_allowed:{purpose:"An actively invoked gated action was allowed.",stability:"stable"},gate_denied:{purpose:"An actively invoked gated action was denied.",stability:"stable"},slot_evaluated:{purpose:"A surface slot resolution ran; the funnel denominator.",stability:"stable"},slot_filled:{purpose:"A slot resolved to a payload and will render.",stability:"stable"},slot_empty:{purpose:"A slot resolved to nothing eligible.",stability:"stable"},slot_suppressed:{purpose:"A slot was eligible but suppressed by caps or cooldown.",stability:"stable"},slot_error:{purpose:"A slot resolution failed.",stability:"internal"},segment_enrolled:{purpose:"A user entered a targeting segment.",stability:"stable"},segment_unenrolled:{purpose:"A user left a targeting segment.",stability:"stable"},user_context_observed:{purpose:"Reserved: the NAMES of custom user-context fields set on identify/setUserContext. Names only, never values.",stability:"internal"},page_view:{purpose:"A route change tracked by the SDK router integration.",stability:"stable"},sdk_init:{purpose:"One anonymous adoption beacon per SDK startup.",stability:"internal"},sdk_error:{purpose:"The SDK itself malfunctioned; distinct from a decision producing nothing.",stability:"internal"},sdk_validation_warning:{purpose:"The SDK found a config or usage problem worth surfacing.",stability:"internal"},resolution_failure:{purpose:"A decision produced nothing; allow-listed handles and closed reason codes only.",stability:"internal"}};function xu(t,e){return t.map(n=>({name:n,surface:e,purpose:lb[n].purpose,stability:lb[n].stability}))}var Cg={events:[...xu(Su,"control_plane"),...xu(gb,"control_plane"),...xu(db,"sdk_client"),...xu(pb,"sdk_client")]};Cg.events.map(t=>t.name);Cg.events.filter(t=>t.stability==="deprecated").map(t=>t.name);var {Unrestricted:U,Pii:Xo}=Ae,{Persisted:fb,Transient:Dn}=ze,{Internal:ss,External:xr}=Fe,Rg=z$1.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr}),_b=H.extend({event_type:z$1.string().min(1).meta(U),source:Rg.default("sdk").meta(U),tenant_id:z$1.string().min(1).optional().meta(U),user_id:z$1.string().min(1).optional().meta(Xo),session_id:z$1.string().min(1).optional().meta(Xo),occurred_at:z$1.string().datetime().meta(U),request_id:z$1.string().min(1).meta(U),attributes:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(U),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(U)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss}),yb=_b.extend({ingested_at:z$1.string().datetime().meta(U)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":fb,"x-revturbine-schema-exposure":ss});z$1.array(z$1.object({id:z$1.string().min(1).optional().meta(U),event_type:z$1.string().min(1).meta(U),occurred_at:z$1.string().datetime().optional().meta(U),tenant_id:z$1.string().min(1).optional().meta(U),user_id:z$1.string().min(1).optional().meta(Xo),session_id:z$1.string().min(1).optional().meta(Xo),attributes:z$1.record(z$1.string(),z$1.unknown()).optional().meta(U),payload:z$1.record(z$1.string(),z$1.unknown()).optional().meta(U),message:z$1.string().optional().meta(U),level:z$1.string().optional().meta(U),path:z$1.string().optional().meta(U)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss});var vb=z$1.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({user_id:z$1.string().min(1).meta(Xo),placement_id:z$1.string().min(1).meta(U),treatment_id:z$1.string().min(1).optional().meta(U),surface_slot_id:z$1.string().min(1).optional().meta(U),surface_template_id:z$1.string().min(1).optional().meta(U),payload_id:z$1.string().min(1).optional().meta(U),interaction_type:vb.meta(U),interaction_at:z$1.string().datetime().optional().meta(U),message_block_handle:z$1.string().min(1).optional().meta(U),message_block_id:z$1.string().min(1).optional().meta(U),experiment_id:z$1.string().min(1).optional().meta(U),variant_key:z$1.string().min(1).optional().meta(U),test:z$1.boolean().optional().meta(U),metadata:z$1.record(z$1.string(),z$1.unknown()).optional().meta(U)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.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":Dn,"x-revturbine-schema-exposure":xr});z$1.object({days_remaining:z$1.number().int().min(0).optional().meta(U)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({entitlement_handle:z$1.string().optional().meta(U),current_usage:z$1.number().min(0).optional().meta(U),usage_limit:z$1.number().min(0).optional().meta(U),usage_percent:z$1.number().min(0).max(100).optional().meta(U),threshold:z$1.number().min(0).optional().meta(U),balance:z$1.number().min(0).optional().meta(U),allocation:z$1.number().min(0).optional().meta(U),seats_used:z$1.number().int().min(0).optional().meta(U),seats_allowed:z$1.number().int().min(0).optional().meta(U)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({feature:z$1.string().min(1).meta(U)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({retry_count:z$1.number().int().min(0).optional().meta(U),renewal_date:z$1.string().optional().meta(U)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({event_type:z$1.string().min(1).meta(U),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(U)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});var xb=z$1.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr}),Sb=z$1.enum(Su).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({event_type:Sb.meta(U),source:xb.meta(U),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(U)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({q:z$1.string().optional().meta(U),source:Rg.optional().meta(U),event_type:z$1.string().optional().meta(U),from:z$1.string().datetime().optional().meta(U),to:z$1.string().datetime().optional().meta(U),page:z$1.coerce.number().int().min(1).default(1).meta(U),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(U)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss});var Pb=z$1.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss}),Tb=z$1.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss}),Pu=H.merge(ie).merge(be).extend({event_id:z$1.string().min(1).meta(U),event_type:z$1.string().min(1).meta(U),source:Pb.meta(U),payload:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(U),status:Tb.default("processed").meta(U),processed_at:z$1.string().datetime().optional().meta(U),error_message:z$1.string().optional().meta(U)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":fb,"x-revturbine-schema-exposure":ss});z$1.object({accepted:z$1.number().int().min(0).meta(U)}).meta({id:"null","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":ss});var Tj=500,Ij=z$1.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr}),Ib=z$1.object({environment_id:z$1.string().min(1).meta(U),user_id:z$1.string().min(1).meta(Xo),account_id:z$1.string().min(1).meta(U),event_name:z$1.string().min(1).max(120).meta(U),event_ts:z$1.string().datetime().meta(U),properties:z$1.string().optional().meta(U),surface_slot_id:z$1.string().nullable().optional().meta(U),placement_id:z$1.string().nullable().optional().meta(U),payload_id:z$1.string().nullable().optional().meta(U),request_id:z$1.string().optional().meta(U),experiment_id:z$1.string().nullable().optional().meta(U),variant_key:z$1.string().nullable().optional().meta(U),tenant_id:z$1.string().optional().meta(U),event_id:z$1.string().nullable().optional().meta(U),origin:Ij.nullable().optional().meta(U),playbook_version:z$1.string().nullable().optional().meta(U),decision_id:z$1.string().nullable().optional().meta(U),test:z$1.boolean().optional().meta(U)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({events:z$1.array(Ib).min(1).max(Tj).meta(U)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});var Cj=10,Eb=z$1.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr}),Rb=z$1.object({plans:z$1.number().int().min(0).meta(U),entitlements:z$1.number().int().min(0).meta(U),entitlement_rules:z$1.number().int().min(0).meta(U),segments:z$1.number().int().min(0).meta(U),placements:z$1.number().int().min(0).meta(U),placement_payloads:z$1.number().int().min(0).meta(U),content_ui_paths:z$1.number().int().min(0).meta(U),surface_templates:z$1.number().int().min(0).meta(U)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr}),kb=z$1.object({event_type:Eb.meta(U),occurred_at:z$1.string().datetime().meta(U),request_id:z$1.string().min(1).optional().meta(U),config_hash_id:z$1.string().min(1).max(64).optional().meta(U),sdk_version:z$1.string().min(1).max(64).optional().meta(U),runtime_mode:z$1.string().min(1).max(64).optional().meta(U),schema_version:z$1.string().min(1).max(64).optional().meta(U),bundle_version:z$1.string().min(1).max(64).optional().meta(U),config_shape:Rb.optional().meta(U),message:z$1.string().max(500).optional().meta(U),reason:z$1.string().min(1).max(64).optional().meta(U),placement_handle:z$1.string().min(1).max(64).optional().meta(U),slot_handle:z$1.string().min(1).max(64).optional().meta(U),surface:z$1.string().min(1).max(64).optional().meta(U),plan_handle:z$1.string().min(1).max(64).optional().meta(U),entitlement_handle:z$1.string().min(1).max(64).optional().meta(U)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});z$1.object({events:z$1.array(kb).min(1).max(Cj).meta(U)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Dn,"x-revturbine-schema-exposure":xr});({"/api/events/search":{get:f({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Kp(yb)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:f({operationId:"listWebhookEvents",requestParams:{query:$},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:z(Pu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:nt}=Ae,{Persisted:Lc,Transient:Nc}=ze,{Internal:_i}=Fe,wb=vt(Ye.Playbook,{sdkInput:true}),jb=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),Ob=z$1.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":_i}),kg=z$1.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":_i}),Ag=z$1.object({name:Bt.meta(nt),handle:ht.meta(nt),plan_id:z$1.string().nullable().optional().meta(nt),segment_id:z$1.string().nullable().optional().meta(nt),trial_limit_type:kg.default("time").meta(nt),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(nt),grace_period_days:z$1.number().int().min(0).default(0).meta(nt),usage_entitlement_handle:z$1.string().min(1).optional().meta(nt),usage_limit_value:z$1.number().int().min(1).optional().meta(nt),require_payment_method:z$1.boolean().default(false).meta(nt),auto_convert:z$1.boolean().default(true).meta(nt),convert_to_plan_id:z$1.string().optional().meta(nt),fallback_plan_id:z$1.string().optional().meta(nt),limit_per_customer:z$1.number().int().min(1).default(1).meta(nt),is_active:z$1.boolean().default(true).meta(nt),metadata:Ft.meta(nt)}),Us=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...nt,readOnly:true})}).merge(Ag).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":_i,...wb,...Rn()}),Rj=hn("FreeTrialRuleAnchor"),qb=z$1.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":_i}),wg=z$1.object({name:Bt.meta(nt),handle:ht.meta(nt),premium_plan_id:z$1.string().min(1).meta(nt),fallback_plan_id:z$1.string().min(1).meta(nt),segment_id:z$1.string().nullable().optional().meta(nt),trial_limit_type:kg.default("time").meta(nt),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(nt),usage_entitlement_handle:z$1.string().min(1).optional().meta(nt),usage_limit_value:z$1.number().int().min(1).optional().meta(nt),start_policy:qb.default("signup").meta(nt),show_upgrade_prompt_at_day:z$1.number().int().min(0).optional().meta(nt),entitlements_during_trial:z$1.array(z$1.string()).default([]).meta(nt),is_active:z$1.boolean().default(true).meta(nt),metadata:Ft.meta(nt)}),Ms=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...nt,readOnly:true})}).merge(wg).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":_i,...wb,...Rn()}),kj=hn("ReverseTrialRuleAnchor"),jg=z$1.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":_i}),Og=z$1.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":_i}),Fs=H.merge(ie).merge(be).extend({trial_limit_policy:jg.default("1_per_lifetime").meta(nt),eligibility_scope:Og.default("per_customer").meta(nt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":_i,...jb}),Ls=H.merge(ie).merge(be).extend({trial_limit_policy:jg.default("1_per_lifetime").meta(nt),eligibility_scope:Og.default("per_customer").meta(nt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":_i,...jb}),Fc=H.merge(ie).merge(be).extend({customer_id:z$1.string().min(1).meta(nt),rule_id:z$1.string().min(1).meta(nt),rule_type:z$1.enum(["free_trial","reverse_trial"]).meta(nt),plan_id:z$1.string().min(1).meta(nt),status:Ob.default("active").meta(nt),started_at:z$1.string().datetime().meta({...nt,readOnly:true}),expires_at:z$1.string().datetime().nullable().optional().meta(nt),trial_limit_type:kg.default("time").meta(nt),usage_entitlement_handle:z$1.string().min(1).optional().meta(nt),usage_limit_value:z$1.number().int().min(1).optional().meta(nt),converted_at:tn.meta(nt),cancelled_at:tn.meta(nt),metadata:Ft.meta(nt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":_i});({"/api/free-trial-rule-anchors":{get:f({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:z(Rj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:f({operationId:"listFreeTrialRules",requestParams:{query:$},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:z(Us)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:f({operationId:"getFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Us}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Us.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Us}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:f({operationId:"listReverseTrialRuleAnchors",requestParams:{query:$},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:z(kj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:f({operationId:"listReverseTrialRules",requestParams:{query:$},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:z(Ms)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:f({operationId:"getReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:f({operationId:"updateReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ms.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:f({operationId:"deleteReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:f({operationId:"listFreeTrialSettings",requestParams:{query:$},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:z(Fs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:f({operationId:"getFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Fs}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:f({operationId:"updateFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Fs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Fs}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:f({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:z(Ls)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:f({operationId:"getReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:f({operationId:"updateReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ls.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:f({operationId:"listTrialInstances",requestParams:{query:$},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:z(Fc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:f({operationId:"getTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:f({operationId:"cancelTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:f({operationId:"convertTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({plan_id:z$1.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Fc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:In}=Ae,{Persisted:Dg,Transient:Db}=ze,{Internal:Vc}=Fe,Ub=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),Mb=z$1.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Db,"x-revturbine-schema-exposure":Vc}),Fb=z$1.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Db,"x-revturbine-schema-exposure":Vc}),Lb=z$1.object({variant_id:z$1.string().min(1),name:Bt,weight:z$1.number().min(0).max(1).default(.5),is_control:z$1.boolean().default(false),config:z$1.record(z$1.string(),z$1.unknown()).default({})}).meta({id:"ExperimentVariant","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":Vc,...Ub}),yi=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...In,readOnly:true}),name:Bt.meta(In),handle:ht.meta(In),description:z$1.string().max(1e3).optional().meta(In),experiment_type:Fb.meta(In),status:Mb.default("draft").meta(In),target_resource_id:z$1.string().optional().meta(In),target_segment_ids:z$1.array(z$1.string()).default([]).meta(In),variants:z$1.array(Lb).min(2).meta(In),primary_metric:z$1.string().min(1).meta(In),metric_threshold:z$1.number().default(.05).meta(In),secondary_metrics:z$1.array(z$1.string()).default([]).meta(In),traffic_allocation:z$1.number().min(0).max(1).default(1).meta(In),started_at:tn.meta(In),ended_at:tn.meta(In),confidence_threshold:z$1.number().min(0).max(1).default(.95).meta(In),winning_variant_id:z$1.string().nullable().default(null).meta(In),metadata:Ft.meta(In)}).meta({id:"Experiment","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":Vc,...Ub,...Rn()}),wj=hn("ExperimentAnchor"),Nb=Lo,qg=H.merge(ie).merge(be).extend({experiment_id:z$1.string().optional().meta(In),resource_type:z$1.string().min(1).meta(In),resource_id:z$1.string().min(1).meta(In),severity:Nb.default("info").meta(In),title:z$1.string().min(1).max(300).meta(In),description:z$1.string().max(2e3).meta(In),suggested_action:z$1.string().max(1e3).optional().meta(In),estimated_impact:z$1.number().optional().meta(In),is_dismissed:z$1.boolean().default(false).meta(In),metadata:Ft.meta(In)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Dg,"x-revturbine-schema-exposure":Vc});({"/api/experiment-anchors":{get:f({operationId:"listExperimentAnchors",requestParams:{query:$},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:z(wj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:f({operationId:"listExperiments",requestParams:{query:$},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:z(yi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:f({operationId:"getExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:f({operationId:"updateExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:yi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:f({operationId:"deleteExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:f({operationId:"startExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:f({operationId:"pauseExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:f({operationId:"completeExperiment",requestParams:{path:z$1.object({experimentId:z$1.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({winning_variant_id:z$1.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:yi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:f({operationId:"listOptimizationSuggestions",requestParams:{query:$},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:z(qg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:f({operationId:"dismissOptimizationSuggestion",requestParams:{path:z$1.object({suggestionId:z$1.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:qg}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:Ir,Financial:Vb}=Ae,{Persisted:Oj,Transient:Bb}=ze,{Internal:Ug}=Fe,qj=vt(Ye.Playbook,{sdkInput:true}),zb=z$1.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Bb,"x-revturbine-schema-exposure":Ug}),Kb=z$1.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Bb,"x-revturbine-schema-exposure":Ug}),qi=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...Ir,readOnly:true}),name:Bt.meta(Ir),handle:ht.meta(Ir),description:z$1.string().max(1e3).optional().meta(Ir),rt_status:zb.default("draft").meta(Ir),discount_type:Kb.meta(Ir),discount_value:z$1.number().min(0).meta(Vb),currency:z$1.string().length(3).default("USD").meta(Vb),applicable_plan_ids:z$1.array(z$1.string()).default([]).meta(Ir),applicable_addon_ids:z$1.array(z$1.string()).default([]).meta(Ir),target_segment_ids:z$1.array(z$1.string()).default([]).meta(Ir),max_redemptions:z$1.number().int().min(0).nullable().default(null).meta(Ir),current_redemptions:z$1.number().int().min(0).default(0).meta({...Ir,readOnly:true}),coupon_code:z$1.string().max(100).optional().meta(Ir),starts_at:tn.meta(Ir),ends_at:tn.meta(Ir),stripe_coupon_id:z$1.string().nullable().default(null).meta(Ir),stripe_promotion_code_id:z$1.string().nullable().default(null).meta(Ir),auto_sync_stripe:z$1.boolean().default(false).meta(Ir),metadata:Ft.meta(Ir)}).meta({id:"Promotion","x-revturbine-schema-persistence":Oj,"x-revturbine-schema-exposure":Ug,...qj,...Rn()}),Dj=hn("PromotionAnchor");({"/api/promotion-anchors":{get:f({operationId:"listPromotionAnchors",requestParams:{query:$},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:z(Dj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:f({operationId:"listPromotions",requestParams:{query:$},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:z(qi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:f({operationId:"getPromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:f({operationId:"updatePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:qi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:f({operationId:"deletePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:f({operationId:"syncPromotionToStripe",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:f({operationId:"duplicatePromotion",requestParams:{path:z$1.object({promotionId:z$1.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:g}=Ae,{Persisted:sl,Transient:st}=ze,{Internal:Da,External:wt}=Fe,Tt=vt(Ye.Playbook,{sdkInput:true}),tl=vt(Ye.Playbook,{sdkInput:false}),os=vt(Ye.Playbook,{inConfig:false,sdkInput:false}),$b=vt(Ye.Playbook,{inConfig:false,sdkInput:true}),el=vt(Ye.Playbook,{inConfig:false,sdkInput:true,source:ea.CodeConstant}),Mg=vt(Ye.Playbook,{inConfig:false,sdkInput:true,source:ea.Runtime}),Fg=vt(Ye.Playbook,{inConfig:false,sdkInput:false,source:ea.Runtime}),Mj=vt(Ye.Billing,{sdkInput:false}),Fj=vt(Ye.Metering,{sdkInput:false}),Lj=vt(Ye.Branding,{inConfig:true,sdkInput:true}),Nj=vt(Ye.Branding,{sdkInput:false}),Hb="1.0.0",nl=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...g,readOnly:true}),name:Bt.meta(g),handle:ht.meta(g),description:da.meta(g),is_default:z$1.boolean().default(false).meta(g),entitlement_ids:z$1.array(z$1.string()).default([]).meta(g),metadata:Ft.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...os,...Rn()}),Vj=hn("SeatTypeAnchor"),rl=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...g,readOnly:true}),handle:ht.meta(g),label:z$1.string().min(1).meta(g),description:z$1.string().nullable().default(null).meta(g),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z$1.string().nullable().default(null).meta(g),example_value:z$1.string().nullable().default(null).meta(g),value_map:z$1.record(z$1.string(),z$1.string()).default({}).meta(g),format:z$1.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(g),metadata:Ft.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...os,...Rn()}),Bj=hn("PersonalizationTokenAnchor"),Gb=z$1.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),Tu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({handle:ht.meta({...g,readOnly:true}),stripe_account_id:z$1.string().min(1).meta(g),live_mode:z$1.boolean().default(false).meta(g),onboarding_state:Gb.default("not_started").meta({...g,readOnly:true}),onboarding_complete:z$1.boolean().default(false).meta({...g,readOnly:true}),charges_enabled:z$1.boolean().default(false).meta({...g,readOnly:true}),details_submitted:z$1.boolean().default(false).meta({...g,readOnly:true}),payouts_enabled:z$1.boolean().default(false).meta({...g,readOnly:true}),webhook_secret_set:z$1.boolean().default(false).meta({...g,readOnly:true}),sync_products:z$1.boolean().default(true).meta(g),sync_prices:z$1.boolean().default(true).meta(g),sync_subscriptions:z$1.boolean().default(true).meta(g),sync_invoices:z$1.boolean().default(false).meta(g),default_currency:z$1.string().length(3).default("USD").meta(g),tax_behavior:z$1.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(g),last_sync_at:z$1.string().optional().meta({...g,readOnly:true}),metadata:Ft.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...Mj,...hr()});z$1.object({theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(g),workspace_name:z$1.string().optional().meta(g),logo_url:z$1.string().optional().meta(g),support_email:z$1.string().optional().meta(g)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Nj});var al=H.merge(ie).merge(be).merge(At).merge(Dt).extend({handle:ht.meta({...g,readOnly:true}),entitlement_id:z$1.string().min(1).meta(g),meter_key:z$1.string().min(1).max(100).meta(g),aggregation_type:z$1.enum(["sum","count","max","last_value"]).default("sum").meta(g),reset_period:z$1.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(g),stripe_meter_id:z$1.string().nullable().default(null).meta(g),is_active:z$1.boolean().default(true).meta(g),metadata:Ft.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...Fj,...hr()}),Lg=z$1.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),il=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...g,readOnly:true}),handle:ht.meta({...g,readOnly:true}),entitlement_id:z$1.string().min(1).meta(g),soft_limit_percent:z$1.number().min(0).max(100).default(80).meta(g),hard_limit_percent:z$1.number().min(0).max(100).default(100).meta(g),soft_limit_action:Lg.default("warn").meta(g),hard_limit_action:Lg.default("block").meta(g),grace_period_hours:z$1.number().int().min(0).default(0).meta(g),notification_channels:z$1.array(z$1.enum(["email","in_app","webhook"])).default(["in_app"]).meta(g),is_active:z$1.boolean().default(true).meta(g)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...$b,...hr()}),Kj=hn("UsageEnforcementSettingsAnchor"),Yb=z$1.object({kind:z$1.enum(["template","slot"]).meta(g),id:z$1.string().min(1).meta(g),label:z$1.string().min(1).optional().meta(g)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),Wb=z$1.object({id:z$1.string().min(1).meta(g),group:z$1.array(Yb).min(1).meta(g),cap:z$1.object({count:z$1.number().int().min(1).meta(g),period:z$1.enum(["session","day","week","month"]).meta(g)}).meta(g)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),Zb=z$1.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),Vg=z$1.object({capRules:z$1.array(Wb).default([]).meta(g),sessionCooldownMinutes:z$1.number().int().min(0).default(30).meta(g),remindLaterMinutes:z$1.number().int().min(0).default(60).meta(g),testMode:Zb.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":Da}),Iu=H.merge(ie).merge(be).merge(At).merge(Dt).extend({anchor_id:z$1.string().min(1).meta({...g,readOnly:true}),handle:ht.meta({...g,readOnly:true}),global_frequency_cap:Vg.nullable().default(null).meta(g),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z$1.boolean().default(false).meta(g),suppress_for_trial:z$1.boolean().default(false).meta(g),allow_stacking:z$1.boolean().default(false).meta(g),priority_collision_strategy:z$1.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":sl,"x-revturbine-schema-exposure":Da,...$b,...hr()}),$j=hn("PlacementSettingsAnchor"),Bg=z$1.object({field:z$1.string().min(1).meta(g),operator:z$1.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(g),value:z$1.string().meta(g)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),zg=z$1.object({name:z$1.string().min(1).meta(g),handle:z$1.string().min(1).meta(g),predicates:z$1.array(Bg).optional().meta(g),dimension_id:z$1.string().optional().meta(g),experiment_id:z$1.string().min(1).optional().meta(g)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Qb=z$1.object({unique_handle:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),tier_position:z$1.number().int().min(0).default(0).meta(g),sort_order:z$1.number().int().min(0).default(0).meta(g),visibility:pi.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Jb=z$1.object({unique_handle:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),sort_order:z$1.number().int().min(0).default(0).meta(g),visibility:pi.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...tl}),Xb=z$1.object({handle:z$1.string().min(1).meta(g),plan_handle:z$1.string().min(1).meta(g),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z$1.string().nullable().default(null).meta(g),price_amount:z$1.number().min(0).meta(g),pricing_model:Rs.meta(g),visibility:pi.default("public").meta(g),stripe_price_id:z$1.string().nullable().default(null).meta(g),price_source:Vo.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...os}),ex=z$1.object({handle:z$1.string().min(1).meta(g),addon_handle:z$1.string().min(1).meta(g),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(g),segment_handle:z$1.string().nullable().default(null).meta(g),price_amount:z$1.number().min(0).meta(g),pricing_model:Rs.meta(g),visibility:pi.default("public").meta(g),stripe_price_id:z$1.string().nullable().default(null).meta(g),price_source:Vo.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...os}),tx=z$1.object({handle:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),description:z$1.string().nullable().default(null).meta(g),is_default:z$1.boolean().default(false).meta(g),entitlement_handles:z$1.array(z$1.string()).default([]).meta(g)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),nx=z$1.object({handle:z$1.string().min(1).meta(g),entitlement_handle:z$1.string().nullable().default(null).meta(g),soft_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(g),hard_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(g),soft_limit_action:z$1.string().meta(g),hard_limit_action:z$1.string().meta(g),grace_period_hours:z$1.number().int().min(0).nullable().default(null).meta(g),notification_channels:z$1.array(z$1.string()).default([]).meta(g),is_active:z$1.boolean().default(true).meta(g)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),rx=z$1.object({handle:z$1.string().min(1).meta(g),global_frequency_cap:Vg.nullable().default(null).meta(g),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z$1.boolean().default(false).meta(g),suppress_for_trial:z$1.boolean().default(false).meta(g),allow_stacking:z$1.boolean().default(false).meta(g),priority_collision_strategy:z$1.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),ax=z$1.object({handle:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),category:z$1.string().nullable().default(null).meta(g),visibility_toggle:z$1.boolean().default(true).meta(g),source_type:z$1.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),ix=z$1.object({handle:z$1.string().min(1).meta(g),entitlement_handle:z$1.string().min(1).meta(g),meter_handle:z$1.string().min(1).meta(g),limit:z$1.number().int().min(0).nullable().default(null).meta(g),reset_period:z$1.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),sx=z$1.object({unique_handle:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),type:Fo.meta(g),unit:z$1.string().optional().meta(g),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),ox=z$1.object({id:z$1.string().min(1).meta(g),entitlement_id:z$1.string().min(1).meta(g),targets:z$1.array(au).min(1).meta(g),segment_ids:z$1.array(z$1.string()).default([]).meta(g),kind:Fo.optional().meta({...g,readOnly:true}),unit:z$1.string().optional().meta({...g,readOnly:true}),tier_name:z$1.string().optional().meta({...g,readOnly:true}),tier_description:z$1.string().optional().meta({...g,readOnly:true}),...rs.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$1.number().default(0).meta(g),allocation:Bo.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),lx=z$1.object({slot_id:z$1.string().min(1).meta(g),active:z$1.boolean().meta(g),triggers:z$1.array(z$1.string()).meta(g)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),cx=z$1.object({id:z$1.string().min(1).meta(g),label:z$1.string().min(1).meta(g),description:z$1.string().meta(g),surface_type:z$1.string().meta(g),placement_handle:z$1.string().min(1).meta(g),template:z$1.string().optional().meta(g)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),mx=z$1.object({name:z$1.string().min(1).meta(g),type:z$1.string().optional().meta(g),required:z$1.boolean().optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),ux=z$1.object({id:z$1.string().min(1).meta(g),surface_type:z$1.string().meta(g),fields:z$1.array(mx).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Kg=z$1.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),dx=z$1.object({name:z$1.string().min(1).meta(g),action_type:Kg.meta(g),plan_handle:z$1.string().optional().meta(g),promotion_id:z$1.string().optional().meta(g),placement_handle:z$1.string().optional().meta(g),url:z$1.string().optional().meta(g),tour_id:z$1.string().optional().meta(g),target_billing_period:z$1.enum(["monthly","annual"]).optional().meta(g),description:z$1.string().optional().meta(g)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),px=z$1.object({id:z$1.string().meta(g),name:z$1.string().meta(g),discount:z$1.string().meta(g),type:z$1.string().meta(g),status:z$1.string().meta(g)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),gx=z$1.object({token:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(g),label:z$1.string().min(1).meta(g),description:z$1.string().optional().meta(g),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(g),data_source:z$1.string().optional().meta(g),example_value:z$1.string().optional().meta(g),value_map:z$1.record(z$1.string(),z$1.string()).optional().meta(g),format:z$1.enum(["string","number","currency","percentage","date"]).optional().meta(g)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Ng=z$1.object({header:z$1.string().optional().meta(g),body:z$1.string().optional().meta(g),cta_label:z$1.string().optional().meta(g),secondary_cta_label:z$1.string().optional().meta(g)}).catchall(z$1.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),hx=z$1.object({block_id:z$1.string().min(1).meta(g),tenant_id:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),surface_template_id:z$1.string().optional().meta(g),default_content:Ng.meta(g),segment_overrides:z$1.array(z$1.object({segment_value_id:z$1.string(),content:Ng})).optional().meta(g),child_blocks:z$1.array(z$1.object({slot:z$1.string(),block_id:z$1.string()})).optional().meta(g),tokens_used:z$1.array(z$1.string()).optional().meta(g),status:z$1.enum(["draft","active","archived"]).meta(g),created_at:z$1.string().datetime().meta({...g,readOnly:true}),updated_at:z$1.string().datetime().meta({...g,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),fx=z$1.object({label:z$1.string().meta(g),path:No.meta(g),config:z$1.record(z$1.string(),z$1.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),$g=z$1.object({template_id:z$1.string().min(1).meta(g),fields:z$1.record(z$1.string(),z$1.string()).meta(g),ctas:z$1.array(fx).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),Hg=z$1.object({plan_ids:z$1.array(z$1.string()).meta(g),billing_cadences:z$1.array(z$1.string()).optional().meta(g),segment_chips:z$1.array(z$1.string()).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),_x=z$1.object({count:z$1.number().int().min(1).meta(g),period:z$1.enum(["session","day","week","month","lifetime"]).meta(g)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),Gg=z$1.object({max_per_period:_x.optional().meta(g),cooldown_days:z$1.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),yx=z$1.object({id:z$1.string().min(1).meta(g),target:Hg.meta(g),surfaces:z$1.array($g).meta(g),caps:Gg.optional().meta(g),surface_slot_ids:z$1.array(z$1.string()).optional().meta(g),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(g),created_at:z$1.string().optional().meta({...g,readOnly:true}),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(g),recommendation_plan_override:z$1.string().optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),vx=z$1.discriminatedUnion("type",[z$1.object({type:z$1.literal("surface_render"),slot_id:z$1.string().min(1)}),z$1.object({type:z$1.literal("entitlement_gate"),entitlement_handle:z$1.string().min(1),tier_threshold:z$1.string().optional()}),z$1.object({type:z$1.literal("usage_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ns}),z$1.object({type:z$1.literal("credit_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ns}),z$1.object({type:z$1.literal("seat_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:ns}),z$1.object({type:z$1.literal("trial_started"),trial_type:z$1.enum(["free","reverse"]).optional()}),z$1.object({type:z$1.literal("trial_progress"),progress_percent:z$1.number().min(1).max(100)}),z$1.object({type:z$1.literal("trial_ending"),days_before_end:z$1.number().int().min(0)}),z$1.object({type:z$1.literal("trial_ended")}),z$1.object({type:z$1.literal("trial_converted")}),z$1.object({type:z$1.literal("qualifier"),qualifier:z$1.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),bx=z$1.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt}),Yg=z$1.object({id:z$1.string().min(1).meta(g),name:z$1.string().min(1).meta(g),category:bx.meta(g),trigger:vx.meta(g),payloads:z$1.array(yx).meta(g),order:z$1.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),xx=z$1.object({payload_id:z$1.string().min(1).meta(g),placement_id:z$1.string().min(1).meta(g),target:Hg.meta(g),caps:Gg.optional().meta(g),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(g),created_at:z$1.string().meta({...g,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...g,readOnly:true}),source_mode:z$1.enum(["inline","content_linked"]).meta(g),surfaces:z$1.array($g).optional().meta(g),surface_slot_ids:z$1.array(z$1.string()).optional().meta(g),content_link:z$1.object({message_block_id:z$1.string().optional(),ui_path_id:z$1.string().optional(),promotion_id:z$1.string().optional(),content_payload_id:z$1.string().optional()}).optional().meta(g)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Hj=z$1.object({kind:z$1.string().min(1).meta(g),schema_version:z$1.number().int().nonnegative().meta(g),config:z$1.unknown().meta(g)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Gj=H.merge(Ag).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...os}),Yj=H.merge(wg).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...os}),Sx=z$1.object({plans:z$1.array(Qb).meta({...g,...Tt}),addons:z$1.array(Jb).optional().meta({...g,...tl}),entitlements:z$1.array(sx).meta({...g,...Tt}),entitlement_rules:z$1.array(ox).meta({...g,...Tt}),segments:z$1.array(zg).meta({...g,...Tt}),content_ui_paths:z$1.array(dx).meta({...g,...Tt}),slot_configs:z$1.array(lx).optional().meta({...g,...Tt,...Ic({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$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())).optional().meta({...g,...Tt,...Ic({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$1.record(z$1.string(),z$1.unknown()).optional().meta({...g,...Lj,...Ic({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$1.array(cx).optional().meta({...g,...Tt}),message_blocks:z$1.array(hx).optional().meta({...g,...Tt}),placement_payloads:z$1.array(xx).optional().meta({...g,...Tt}),placements:z$1.array(Yg).optional().meta({...g,...Tt}),content_promotions:z$1.array(px).optional().meta({...g,...Tt}),personalization_tokens:z$1.array(gx).optional().meta({...g,...Tt}),surface_templates:z$1.array(ux).optional().meta({...g,...Tt}),free_trial_rules:z$1.array(Gj).optional().meta({...g,...tl}),reverse_trial_rules:z$1.array(Yj).optional().meta({...g,...tl}),plan_variations:z$1.array(Xb).optional().meta({...g,...tl}),addon_variations:z$1.array(ex).optional().meta({...g,...tl}),extension_rules:z$1.array(Hj).optional().meta({...g,...Tt}),seat_types:z$1.array(tx).optional().meta({...g,...Tt}),enforcement_defaults:z$1.array(nx).optional().meta({...g,...Tt}),placement_settings:z$1.array(rx).optional().meta({...g,...Tt}),segment_dimensions:z$1.array(ax).optional().meta({...g,...Tt}),meter_bindings:z$1.array(ix).optional().meta({...g,...Tt}),experiments:z$1.array(z$1.unknown()).max(0).optional().meta({...g,...os}),signal_catalog:z$1.object({}).strict().optional().meta({...g,...os})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt}),Px=z$1.object({artifact_type:z$1.literal("playbook").meta({...g,...el,readOnly:true}),format_version:z$1.literal(Hb).meta({...g,...el,readOnly:true}),playbook_handle:z$1.string().min(1).default("default").meta({...g,...el}),playbook_version_id:z$1.string().nullable().default(null).meta({...g,...Mg,readOnly:true}),tenant_id:z$1.string().min(1).optional().meta({...g,...Fg,readOnly:true}),environment_id:z$1.string().min(1).optional().meta({...g,...Fg,readOnly:true}),project_id:z$1.string().min(1).optional().meta({...g,...Fg,readOnly:true}),exported_at:z$1.string().datetime().optional().meta({...g,...Mg,readOnly:true}),schema_version:z$1.string().min(1).optional().meta({...g,...el,readOnly:true}),bundle_schema_version:z$1.number().int().nonnegative().optional().meta({...g,...el,readOnly:true}),bundle_min_readable_schema_version:z$1.number().int().nonnegative().optional().meta({...g,...el,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Mg}),Cu=Px.extend(Sx.shape).meta({"x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt});function Wj(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Tx(t){if(!Wj(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$1.preprocess(Tx,Cu).meta({id:"Playbook","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt});z$1.preprocess(Tx,Cu.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":st,"x-revturbine-schema-exposure":wt,...Tt});({"/api/seat-type-anchors":{get:f({operationId:"listSeatTypeAnchors",requestParams:{query:$},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:z(Vj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:f({operationId:"listSeatTypes",requestParams:{query:$},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:z(nl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:f({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qn(nl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:f({operationId:"updateSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:nl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:f({operationId:"deleteSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:f({operationId:"listPersonalizationTokenAnchors",requestParams:{query:$},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:z(Bj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:f({operationId:"listPersonalizationTokens",requestParams:{query:$},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:z(rl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:f({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qn(rl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:f({operationId:"updatePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:rl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:f({operationId:"deletePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:f({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Kn(Tu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Tu}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:f({operationId:"listMeteringConfigs",requestParams:{query:$},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:z(al)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:f({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qn(al)}}},responses:{201:{description:"Created",content:{"application/json":{schema:al}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:f({operationId:"updateMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:al.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:al}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:f({operationId:"deleteMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:f({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:$},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:z(Kj)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:f({operationId:"listUsageEnforcementSettings",requestParams:{query:$},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:z(il)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:f({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qn(il)}}},responses:{201:{description:"Created",content:{"application/json":{schema:il}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:f({operationId:"updateUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:il.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:il}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:f({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:f({operationId:"listPlacementSettingsAnchors",requestParams:{query:$},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:z($j)}}},default:{description:"Error response",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:f({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Kn(Iu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Di}=Ae,{Persisted:Ix}=ze,{Internal:Cx}=Fe,Ex=z$1.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ix,"x-revturbine-schema-exposure":Cx}),Wg=H.merge(ie).merge(be).extend({action:Ex.meta(Di),resource_type:z$1.string().min(1).max(100).meta(Di),resource_id:z$1.string().min(1).meta(Di),resource_name:z$1.string().max(200).optional().meta(Di),actor_id:z$1.string().min(1).meta(Di),actor_email:z$1.string().email().optional().meta(Di),diff:z$1.object({before:z$1.record(z$1.string(),z$1.unknown()).optional(),after:z$1.record(z$1.string(),z$1.unknown()).optional()}).optional().meta(Di),summary:z$1.string().max(1e3).optional().meta(Di),metadata:Ft.meta(Di)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ix,"x-revturbine-schema-exposure":Cx});({"/api/changelog":{get:f({operationId:"listChangeLogEntries",requestParams:{query:$},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:z(Wg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:f({operationId:"getChangeLogEntry",requestParams:{path:z$1.object({entryId:z$1.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Wg}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Eu}=Ae,{Persisted:eO,Transient:tO}=ze,{Internal:Rx}=Fe,kx=z$1.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":tO,"x-revturbine-schema-exposure":Rx}),Mi=H.merge(ie).extend({name:Bt.meta(Eu),handle:ht.meta(Eu),status:kx.default("active").meta(Eu),metadata:Ft.meta(Eu)}).meta({id:"Tenant","x-revturbine-schema-persistence":eO,"x-revturbine-schema-exposure":Rx});({"/api/tenants":{get:f({operationId:"listTenants",requestParams:{query:$},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:z(Mi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:f({operationId:"getTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:f({operationId:"updateTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Mi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:f({operationId:"suspendTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:f({operationId:"reactivateTenant",requestParams:{path:z$1.object({tenantId:z$1.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Mi}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Ua}=Ae,{Persisted:rO,Transient:Ax}=ze,{Internal:Zg}=Fe,wx=z$1.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Zg}),Ns=H.merge(ie).merge(be).extend({name:Bt.meta(Ua),handle:ht.meta(Ua),description:da.meta(Ua),is_production:z$1.boolean().default(false).meta({...Ua,readOnly:true}),status:wx.default("active").meta(Ua),cloned_from_environment_id:z$1.string().nullable().default(null).meta({...Ua,readOnly:true}),cloned_at:tn.meta({...Ua,readOnly:true}),cloned_at_sequence:z$1.number().int().min(0).nullable().default(null).meta({...Ua,readOnly:true}),requires_approval:z$1.boolean().default(false).meta(Ua),auto_deploy_on_approval:z$1.boolean().default(false).meta(Ua),created_by:z$1.string().optional().meta(Ua),metadata:Ft.meta(Ua)}).meta({id:"Environment","x-revturbine-schema-persistence":rO,"x-revturbine-schema-exposure":Zg}),jx=z$1.object({source_environment_id:z$1.string().min(1),target_environment_id:z$1.string().min(1),playbook_version_ids:z$1.array(z$1.string()).optional(),strategy:z$1.enum(["all_current","selected_playbook_versions"]).default("all_current")}).meta({id:"EnvironmentPromotionRequest","x-revturbine-schema-persistence":Ax,"x-revturbine-schema-exposure":Zg});({"/api/environments":{get:f({operationId:"listEnvironments",requestParams:{query:$},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:z(Ns)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:f({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().min(1).max(200),handle:z$1.string().min(1).max(100),description:z$1.string().max(500).optional(),clone_from_environment_id:z$1.string().optional(),requires_approval:z$1.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ns}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:f({operationId:"getEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:f({operationId:"updateEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Ns.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:f({operationId:"archiveEnvironment",requestParams:{path:z$1.object({environmentId:z$1.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:Ns}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:f({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:jx}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z$1.object({promoted_count:z$1.number().int(),conflict_count:z$1.number().int(),conflicts:z$1.array(z$1.object({handle:z$1.string(),resource_type:z$1.string(),source_sequence:z$1.number().int(),target_sequence:z$1.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Ge,Pii:Bc}=Ae,{Transient:vi,Persisted:iO}=ze,{External:Ya}=Fe,Ox=z$1.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya});z$1.object({superseded_output_id:z$1.string().min(1).meta(Ge),superseded_by:z$1.string().min(1).meta(Ge),reason:Ox.meta(Ge)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":iO,"x-revturbine-schema-exposure":Ya,...Ae.Operational});var qx=z$1.enum(Tc).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya}),Qg=z$1.object({output_id:z$1.string().meta(Ge),category:z$1.string().meta(Ge),surface:z$1.object({template:z$1.string().optional().meta(Ge),type:Pc.meta(Ge),slot_id:z$1.string().optional().meta(Ge)}).meta(Ge),content:z$1.record(z$1.string(),z$1.unknown()).meta(Ge),promotion:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ge),cta_path:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ge),ui_path:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ge),rule_id:z$1.string().meta(Ge),decision_id:z$1.string().meta(Ge),config_version:z$1.string().meta(Ge),present_upsell:z$1.boolean().meta(Ge),experiment_id:z$1.string().optional().meta(Ge),variant_key:z$1.string().optional().meta(Ge),experiment_version_id:z$1.string().optional().meta(Ge)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya}),Dx=z$1.object({status:qx.meta(Ge),allowed:z$1.boolean().meta(Ge),reason:z$1.string().optional().meta(Ge),current_tier:z$1.string().optional().meta(Ge),limit:z$1.number().optional().meta(Ge),used:z$1.number().optional().meta(Ge),remaining:z$1.number().optional().meta(Ge),placement:Qg.optional().meta(Ge)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya});z$1.object({id:z$1.string().meta(Ge),name:z$1.string().optional().meta(Ge),discount:z$1.string().optional().meta(Ge),type:z$1.string().optional().meta(Ge),status:z$1.string().optional().meta(Ge)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya});var Ux=z$1.object({id:z$1.string().meta(Bc),anonymous_id:z$1.string().optional().meta(Ge),traits:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Bc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya}),Mx=z$1.object({slot_id:z$1.string().optional().meta(Ge),entitlement_handle:z$1.string().optional().meta(Ge),plan_handle:z$1.string().optional().meta(Ge),placement_handle:z$1.string().optional().meta(Ge),visible:z$1.boolean().meta(Ge),output:Qg.optional().meta(Ge),reason_codes:z$1.array(z$1.string()).optional().meta(Ge)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya}),Fx=Dx,Lx=kc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya}),Nx=z$1.object({segments:z$1.array(z$1.string()).optional().meta(Ge),traits:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Bc),usage_balances:z$1.record(z$1.string(),z$1.number()).optional().meta(Ge)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya});z$1.object({version:z$1.literal("1.0.0").meta(Ge),request_id:z$1.string().meta(Ge),tenant_id:z$1.string().meta(Ge),evaluated_at:z$1.string().datetime().meta(Ge),ttl_seconds:z$1.number().int().min(0).max(86400).meta(Ge),user:Ux.meta(Bc),decisions:z$1.array(Mx).meta(Ge),entitlements:z$1.record(z$1.string(),Fx).optional().meta(Ge),theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(Ge),trial_status:Lx.optional().meta(Ge),user_context:Nx.optional().meta(Bc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":vi,"x-revturbine-schema-exposure":Ya});var {Unrestricted:Jt}=Ae,{Persisted:cO,Transient:Ru}=ze,{Internal:zc}=Fe,Vx=z$1.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":zc}),ol=H.merge(ie).merge(be).extend({environment_id:z$1.string().min(1).meta(Jt),name:Bt.meta(Jt),description:z$1.string().max(2e3).optional().meta(Jt),status:Vx.default("draft").meta(Jt),labels:z$1.array(z$1.string()).default([]).meta(Jt),created_by:z$1.string().min(1).meta(Jt),submitted_by:z$1.string().nullable().default(null).meta({...Jt,readOnly:true}),reviewed_by:z$1.string().nullable().default(null).meta({...Jt,readOnly:true}),deployed_by:z$1.string().nullable().default(null).meta({...Jt,readOnly:true}),submitted_at:tn.meta({...Jt,readOnly:true}),reviewed_at:tn.meta({...Jt,readOnly:true}),deployed_at:tn.meta({...Jt,readOnly:true}),base_snapshot_sequence:z$1.number().int().min(0).default(0).meta({...Jt,readOnly:true}),entry_count:z$1.number().int().min(0).default(0).meta({...Jt,readOnly:true}),conflict_count:z$1.number().int().min(0).default(0).meta({...Jt,readOnly:true}),rollback_of_playbook_version_id:z$1.string().nullable().default(null).meta(Jt),cherry_picked_from_playbook_version_id:z$1.string().nullable().default(null).meta(Jt),review_notes:z$1.string().max(2e3).optional().meta(Jt),rejection_reason:z$1.string().max(2e3).optional().meta(Jt),snapshot:z$1.record(z$1.string(),z$1.unknown()).nullable().default(null).meta({...Jt,readOnly:true}),bundle:z$1.string().nullable().default(null).meta({...Jt,readOnly:true}),metadata:Ft.meta(Jt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":cO,"x-revturbine-schema-exposure":zc}),Jg=z$1.object({handle:z$1.string().meta(Jt),resource_type:z$1.string().meta(Jt),resource_name:z$1.string().optional().meta(Jt),action:z$1.enum(["create","update","delete"]).meta(Jt),has_conflict:z$1.boolean().meta(Jt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":zc}),Bx=z$1.object({playbook_version_id:z$1.string().meta(Jt),entries:z$1.array(Jg).meta(Jt),total_entries:z$1.number().int().min(0).meta(Jt),total_conflicts:z$1.number().int().min(0).meta(Jt),deployable:z$1.boolean().meta(Jt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":zc}),zx=z$1.object({playbook_version_id:z$1.string().meta(Jt),deployed_count:z$1.number().int().min(0).meta(Jt),superseded_count:z$1.number().int().min(0).meta(Jt),skipped_conflicts:z$1.number().int().min(0).meta(Jt),deployed_at:z$1.string().datetime().meta(Jt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":Ru,"x-revturbine-schema-exposure":zc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:f({operationId:"submitPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:ol}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:f({operationId:"approvePlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({review_notes:z$1.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:ol}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:f({operationId:"rejectPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({rejection_reason:z$1.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:ol}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:f({operationId:"deployPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({force:z$1.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:zx}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:f({operationId:"archivePlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:f({operationId:"previewPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.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:Bx}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:f({operationId:"listPlaybookVersionConflicts",requestParams:{path:z$1.object({playbookVersionId:z$1.string()}),query:$},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:z(Jg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:f({operationId:"rollbackPlaybookVersion",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({name:z$1.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:ol}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:f({operationId:"cherryPickEntries",requestParams:{path:z$1.object({playbookVersionId:z$1.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({handles:z$1.array(z$1.string()).min(1),target_playbook_version_id:z$1.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z$1.object({copied_count:z$1.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:we}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:jt,Pii:uO}=Ae,{Persisted:Wa}=ze,{Internal:Za}=Fe,Kx=z$1.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Kc=H.merge(ie).merge(be).extend({name:Bt.meta(jt),key_hash:z$1.string().min(1).meta({...uO,readOnly:true}),key_prefix:z$1.string().min(1).max(20).meta({...jt,readOnly:true}),key_last4:z$1.string().length(4).meta({...jt,readOnly:true}),status:Kx.default("active").meta(jt),last_used_at:tn.meta({...jt,readOnly:true}),expires_at:tn.meta(jt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),$x=z$1.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),ls=H.merge(ie).merge(be).extend({key:z$1.string().min(1).max(100).meta(jt),value_type:$x.default("boolean").meta(jt),value:z$1.string().max(4e3).default("false").meta(jt),description:da.meta(jt),enabled:z$1.boolean().default(true).meta(jt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),ku=H.merge(ie).merge(be).extend({workspace_name:z$1.string().min(1).max(200).meta(jt),support_email:z$1.string().email().nullable().default(null).meta(jt),timezone:z$1.string().max(50).default("UTC").meta(jt),default_currency:z$1.string().length(3).default("USD").meta(jt),logo_url:z$1.string().url().nullable().default(null).meta(jt),activity_window_days:z$1.number().int().min(1).default(30).meta(jt),activity_high_min:z$1.number().int().min(1).default(10).meta(jt),activity_medium_min:z$1.number().int().min(1).default(3).meta(jt),activity_low_min:z$1.number().int().min(1).default(1).meta(jt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Au=H.merge(ie).merge(be).extend({server_url:z$1.string().url().max(500).meta(jt),api_token_hint:z$1.string().max(50).nullable().default(null).meta(jt),allow_write_actions:z$1.boolean().default(false).meta(jt),enabled_tools:z$1.array(z$1.string().max(100)).default([]).meta(jt),enabled:z$1.boolean().default(false).meta(jt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),$c=H.merge(ie).merge(be).extend({step_key:z$1.string().min(1).max(100).meta(jt),label:z$1.string().min(1).max(200).meta(jt),done:z$1.boolean().default(false).meta(jt),completed_at:tn.meta({...jt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Hx=z$1.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Gx=H.merge(be).extend({environment_id:z$1.string().min(1).default("production").meta(jt),actor_type:Hx.meta(jt),actor_id:z$1.string().nullable().default(null).meta(jt),action:z$1.string().min(1).max(120).meta(jt),object_type:z$1.string().max(120).nullable().default(null).meta(jt),object_id:z$1.string().max(200).nullable().default(null).meta(jt),payload:z$1.record(z$1.string(),z$1.unknown()).nullable().default(null).meta(jt),occurred_at:z$1.string().datetime().meta({...jt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Yx=z$1.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za}),Hc=H.merge(ie).merge(be).merge(At).merge(Dt).extend({handle:ht.meta({...jt,readOnly:true}),identifier:z$1.string().min(1).max(200).meta(jt),identifier_type:Yx.default("user_id").meta(jt),note:z$1.string().max(500).nullable().default(null).meta(jt),added_by:z$1.string().meta(jt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Wa,"x-revturbine-schema-exposure":Za,...hr()});({"/api/settings/api-keys":{get:f({operationId:"listApiKeys",requestParams:{query:$},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:z(Kc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:f({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Qn(Kc)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Kc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:f({operationId:"revokeApiKey",requestParams:{path:z$1.object({keyId:z$1.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:Kc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:f({operationId:"listFeatureFlags",requestParams:{query:$},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:z(ls)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:f({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Qn(ls)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:f({operationId:"getFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:f({operationId:"updateFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Kn(ls).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:f({operationId:"deleteFeatureFlag",requestParams:{path:z$1.object({flagId:z$1.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:ls}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:f({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Kn(ku).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:ku}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:f({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Kn(Au).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Au}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:f({operationId:"listOnboardingSteps",requestParams:{query:$},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:z($c)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:f({operationId:"getOnboardingStep",requestParams:{path:z$1.object({stepId:z$1.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:f({operationId:"updateOnboardingStep",requestParams:{path:z$1.object({stepId:z$1.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Kn($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:f({operationId:"listAuditEvents",requestParams:{query:$},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:z(Gx)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:f({operationId:"listPlacementTestUsers",requestParams:{query:$},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:z(Hc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:f({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Qn(Hc)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Hc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:f({operationId:"deletePlacementTestUser",requestParams:{path:z$1.object({testUserId:z$1.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:Hc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:ue,Pii:$r}=Ae,{Persisted:aa,Transient:Xg}=ze,{Internal:Cr}=Fe,Wx=z$1.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.merge(ie).extend({name:Bt.meta(ue),email:z$1.string().email().meta($r),email_verified:z$1.boolean().default(false).meta(ue),image:z$1.string().url().nullable().default(null).meta($r),role:Wx.default("user").meta(ue),banned:z$1.boolean().default(false).meta({...ue,readOnly:true}),ban_reason:z$1.string().nullable().default(null).meta({...ue,readOnly:true}),ban_expires:tn.meta({...ue,readOnly:true}),two_factor_enabled:z$1.boolean().default(false).meta({...ue,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.merge(ie).extend({expires_at:z$1.string().datetime().meta(ue),token:z$1.string().min(1).meta({...$r,readOnly:true}),ip_address:z$1.string().nullable().default(null).meta($r),user_agent:z$1.string().nullable().default(null).meta($r),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),active_organization_id:z$1.string().nullable().default(null).meta(ue),impersonated_by:z$1.string().nullable().default(null).meta({...ue,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.merge(ie).extend({account_id:z$1.string().min(1).meta(ue),provider_id:z$1.string().min(1).meta(ue),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),access_token:z$1.string().nullable().default(null).meta({...$r,readOnly:true}),refresh_token:z$1.string().nullable().default(null).meta({...$r,readOnly:true}),id_token:z$1.string().nullable().default(null).meta({...$r,readOnly:true}),access_token_expires_at:tn.meta({...ue,readOnly:true}),refresh_token_expires_at:tn.meta({...ue,readOnly:true}),scope:z$1.string().nullable().default(null).meta(ue),password:z$1.string().nullable().default(null).meta({...$r,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.merge(ie).extend({identifier:z$1.string().min(1).meta($r),value:z$1.string().min(1).meta({...$r,readOnly:true}),expires_at:z$1.string().datetime().meta(ue)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({secret:z$1.string().min(1).meta({...$r,readOnly:true}),backup_codes:z$1.string().min(1).meta({...$r,readOnly:true}),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),verified:z$1.boolean().default(false).meta({...ue,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({name:Bt.meta(ue),slug:z$1.string().min(1).max(100).nullable().default(null).meta(ue),logo:z$1.string().url().nullable().default(null).meta(ue),created_at:z$1.string().datetime().meta({...ue,readOnly:true}),metadata:z$1.string().nullable().default(null).meta(ue)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});var eh=z$1.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});var th=z$1.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Cr}),nh=z$1.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Cr});z$1.object({resource:th,action:nh}).meta({id:"Permission","x-revturbine-schema-persistence":Xg,"x-revturbine-schema-exposure":Cr});var bO=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],xO=["plans","entitlements","placements","targeting","content","experiments"],SO=["plans","entitlements","placements","targeting","content","experiments"],PO=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],TO=["read","create","update","delete","publish","approve","invite","manage_roles"];function wu(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var IO=wu(bO,["read"]),CO=[...IO,...wu(xO,["create","update"])];[...CO,...wu(SO,["publish","approve","delete"])];wu(PO,TO);var EO=th.options.flatMap(t=>nh.options.map(e=>`${t}:${e}`));z$1.enum(EO).meta({id:"McpTokenScope","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({organization_id:z$1.string().min(1).meta({...ue,readOnly:true}),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),role:eh.default("viewer").meta(ue),created_at:z$1.string().datetime().meta({...ue,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});var Zx=z$1.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({organization_id:z$1.string().min(1).meta({...ue,readOnly:true}),email:z$1.string().email().meta($r),role:eh.nullable().default(null).meta(ue),status:Zx.default("pending").meta(ue),expires_at:z$1.string().datetime().meta(ue),created_at:z$1.string().datetime().meta({...ue,readOnly:true}),inviter_id:z$1.string().min(1).meta({...ue,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({name:z$1.string().max(200).nullable().default(null).meta(ue),public_key:z$1.string().min(1).meta({...$r,readOnly:true}),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),credential_id:z$1.string().min(1).meta({...ue,readOnly:true}),counter:z$1.number().int().default(0).meta({...ue,readOnly:true}),device_type:z$1.string().min(1).meta(ue),backed_up:z$1.boolean().default(false).meta(ue),transports:z$1.string().nullable().default(null).meta(ue),created_at:z$1.string().datetime().meta({...ue,readOnly:true}),aaguid:z$1.string().nullable().default(null).meta(ue)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.merge(ie).extend({config_id:z$1.string().min(1).meta(ue),name:z$1.string().max(200).nullable().default(null).meta(ue),start:z$1.string().nullable().default(null).meta(ue),reference_id:z$1.string().min(1).meta(ue),prefix:z$1.string().nullable().default(null).meta(ue),key:z$1.string().min(1).meta({...$r,readOnly:true}),refill_interval:z$1.number().int().nullable().default(null).meta(ue),refill_amount:z$1.number().int().nullable().default(null).meta(ue),last_refill_at:tn.meta({...ue,readOnly:true}),enabled:z$1.boolean().default(true).meta(ue),rate_limit_enabled:z$1.boolean().default(false).meta(ue),rate_limit_time_window:z$1.number().int().nullable().default(null).meta(ue),rate_limit_max:z$1.number().int().nullable().default(null).meta(ue),request_count:z$1.number().int().default(0).meta({...ue,readOnly:true}),remaining:z$1.number().int().nullable().default(null).meta({...ue,readOnly:true}),last_request:tn.meta({...ue,readOnly:true}),expires_at:tn.meta(ue),permissions:z$1.string().nullable().default(null).meta(ue),metadata:z$1.string().nullable().default(null).meta(ue)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});H.extend({issuer:z$1.string().min(1).meta(ue),oidc_config:z$1.string().nullable().default(null).meta(ue),saml_config:z$1.string().nullable().default(null).meta(ue),user_id:z$1.string().min(1).meta({...ue,readOnly:true}),provider_id:z$1.string().min(1).meta(ue),organization_id:z$1.string().nullable().default(null).meta(ue),domain:z$1.string().min(1).meta(ue)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Cr});var DO=15,UO=11;async function Xx(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 Qx(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var ll=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function MO(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new ll("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!Qx(n))throw new ll("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(!Qx(r)||r>n)throw new ll("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 eS(t,e){let n=DO,r=UO,a=MO(t);if(a.minReadableSchemaVersion>n)throw new ll("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${a.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(a.schemaVersion>n)throw new ll("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);if(a.schemaVersion<r)throw new ll("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${a.schemaVersion} (reader supports ${r}..${n})`);return a}var tS=z$1.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),Jx=z$1.string().datetime({offset:true}),FO=z$1.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),rh=z$1.object({url:z$1.string().min(1),sha256:tS,byte_length:z$1.number().int().nonnegative(),brotli_byte_length:z$1.number().int().nonnegative().optional(),gzip_byte_length:z$1.number().int().nonnegative().optional()}).strict(),LO=z$1.object({alg:z$1.literal("ed25519"),key_id:z$1.string().min(1),sig:FO}).strict(),NO=z$1.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z$1.object({manifest_version:NO,tenant_id:z$1.string(),config_version:z$1.string(),schema_version:z$1.number().int().nonnegative(),runtime_abi:z$1.number().int().nonnegative(),active:rh,standby:rh.optional(),previous:rh.optional(),not_before:Jx,expires_at:Jx,rollback_to:tS.optional(),signature:LO.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 VO=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),cl=class{constructor(){k(this,"types",new Map);k(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(i=>i.surface.type===e.surfaceType)};this.types.set(r.id,r);let a=this.surfaceIndex.get(r.surfaceType)??[];a.includes(r.id)||(a.push(r.id),this.surfaceIndex.set(r.surfaceType,a));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let a=r.filter(i=>i!==e);a.length>0?this.surfaceIndex.set(n.surfaceType,a):this.surfaceIndex.delete(n.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let a=this.types.get(e.surface.template);if(a)return a}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(a=>this.types.get(a)).filter(a=>a!=null).sort((a,i)=>i.priority-a.priority);for(let a of r)if(a.accepts?.(e))return a;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function nS(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=i=>{if(typeof i=="number"&&Number.isFinite(i))return i;if(typeof i=="string"&&i.trim().length>0){let s=Number(i);if(Number.isFinite(s))return s}},a=i=>{let s="_usage_remaining";if(i==="usage_remaining"){let P=r(e.usage_current??e.current_usage),E=r(e.usage_limit);return P!==void 0&&E!==void 0?Math.max(0,E-P):void 0}if(!i.endsWith(s))return;let u=i.slice(0,-s.length);if(!u)return;let _=r(e[`${u}_usage_current`]),T=r(e[`${u}_usage_limit`]);if(!(_===void 0||T===void 0))return Math.max(0,T-_)};return t.replace(/\{\{(\w+)\}\}/g,(i,s)=>{let u=n[s]??s,_=e[u];if(_!=null)return String(_);let T=a(u);return T!=null?String(T):`{{${s}}}`})}function BO(t,e){let n={};for(let[r,a]of Object.entries(t))typeof a=="string"?n[r]=nS(a,e):n[r]=a;return n}function zO(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,a]of Object.entries(t))VO.has(r)||(n[r]=a);return {type:e,plan_handle:typeof t.plan_handle=="string"?t.plan_handle:void 0,promotion_id:typeof t.promotion_id=="string"?t.promotion_id:void 0,placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0,url:typeof t.url=="string"?t.url:void 0,tour_id:typeof t.tour_id=="string"?t.tour_id:void 0,...Object.keys(n).length>0?{params:n}:{}}}function KO(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 Gc=null,ah=null;function aS(t){}function $O(){return Gc||(Gc=new cl,ah),Gc}function HO(){Gc=null;}var sh=class{constructor(){k(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();}},ih=null;function iS(){return ih||(ih=new sh),ih}function sS(t,e=iS()){let n=new Map;for(let[r,a]of Object.entries(t)){if(e.has(r))continue;let i=(s,u)=>{let _=u.placement.cta_path??u.placement.ui_path??{};Promise.resolve().then(()=>a(_)).catch(T=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,T);});};e.register(r,i),n.set(r,i);}return ()=>{for(let[r,a]of n)e.get(r)===a&&e.unregister(r);}}function oS(t,e=iS()){if(e.has("snooze"))return ()=>{};let n=(r,a)=>{let i=a.placement,s=typeof i.remind_later_minutes=="number"?i.remind_later_minutes:void 0;t(a.placement.output_id,s!==void 0?s*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}var Yc={recommended_plan_handle:"",recommended_plan_name:""};function lS(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:a}=t;if(a.length===0)return Yc;if(e==="custom"){let u=n??"";if(u===""||u===r)return Yc;let _=a.find(T=>T.unique_handle===u);return _?{recommended_plan_handle:_.unique_handle,recommended_plan_name:_.name}:Yc}if(r==="")return Yc;let i=ld(r,a);if(i===null)return Yc;let s=a.find(u=>u.unique_handle===i);return {recommended_plan_handle:i,recommended_plan_name:s?.name??i}}var oh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Ou=oh.length,GO=Ou-1,YO=10,ju=16;function WO(t){let e=t,n="";for(let r=0;r<YO;r+=1){let a=e%Ou;n=oh[a]+n,e=Math.floor(e/Ou);}return n}function cS(){let t=new Uint8Array(ju);crypto.getRandomValues(t);let e=new Array(ju);for(let n=0;n<ju;n+=1)e[n]=t[n]%Ou;return e}function ZO(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<GO)return t[e]+=1,true;t[e]=0;}return false}function mS(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===ju?ZO(e)||(t+=1,e=cS()):(t=n,e=cS());let r=WO(t);for(let a=0;a<e.length;a+=1)r+=oh[e[a]];return r}}}var lh=mS();var QO=new Set([408,429,500,502,503,504]);function JO(t){return new Promise(e=>setTimeout(e,t))}async function ch(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,a=e.sleep??JO,i;for(let s=0;s<=n;s+=1){try{let u=await t();if(u.ok)return {delivered:!0,status:u.status,attempts:s+1};if(!QO.has(u.status))return {delivered:!1,status:u.status,attempts:s+1};i=new Error(`ingest_status_${u.status}`);}catch(u){i=u instanceof Error?u:new Error(String(u));}s<n&&await a(r*(s+1));}return {delivered:false,error:i,attempts:n+1}}function mh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function uS(){let t=typeof IntersectionObserver<"u",e=new Map;function n(a,i,s,u){s.fired||(s.fired=true,s.timer!==null&&(clearTimeout(s.timer),s.timer=null),a.io.unobserve(i),a.tracked.delete(i),s.onExposed(u));}function r(a,i){let s=`${a}|${i}`,u=e.get(s);if(u)return u;let _=new Map,P={io:new IntersectionObserver(E=>{let R=e.get(s);if(R)for(let I of E){let C=_.get(I.target);!C||C.fired||(I.isIntersecting?C.minVisibleMs<=0?n(R,I.target,C,"viewport"):C.timer===null&&(C.timer=setTimeout(()=>n(R,I.target,C,"viewport"),C.minVisibleMs)):C.timer!==null&&(clearTimeout(C.timer),C.timer=null));}},{threshold:a,rootMargin:i}),tracked:_};return e.set(s,P),P}return {supported:t,observe(a,i,s){if(!t){let E=false;return Promise.resolve().then(()=>{E||s("render_fallback");}),()=>{E=true;}}let u=i.threshold??.5,_=i.rootMargin??"0px",T=r(u,_),P={onExposed:s,minVisibleMs:i.minVisibleMs??0,timer:null,fired:false};return T.tracked.set(a,P),T.io.observe(a),()=>{P.fired||(P.timer!==null&&(clearTimeout(P.timer),P.timer=null),T.io.unobserve(a),T.tracked.delete(a));}},disconnect(){for(let a of e.values())a.io.disconnect();e.clear();}}}var uh=uS();var _S=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],XO=new Set(_S),e1=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,t1=gs();function n1(t){t1&&console.warn(t);}var yS=new Set(Vm.options),vS=["usage","account_id","email","email_type","plan_handle","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],dS=new Set(vS);function wH(t,e){return Uu(e,"defineUiPathResolvers(resolvers)")}function Uu(t,e){if(!t)return {};let n={};for(let[r,a]of Object.entries(t)){let i=String(r||"").trim();if(!i)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof a!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${i}'.`);n[i]=a;}return n}var Wc={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function Fu(t){return t?.playbook??t?.exportedConfig}function jH(t){return {...t,runtimeMode:"revturbine_server"}}function OH(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function r1(t){let e=Uu(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function qH(t){return r1(t)}function DH(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function UH(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function MH(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function cs(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function FH(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function LH(t,e,n){return {eventType:t,payload:e,options:n}}var pS="revturbine:sdk-route-change",Fi="sdk_validation_warning",a1="revturbine:decision-cache",i1="revturbine:interaction-state",s1="revturbine:presentation-caps",o1="/api/track",l1="/api/sdk/meta",c1="/api/events/interactions",m1="/api/placements/interactions",u1="revturbine-web-sdk",gS="user_context_observed",d1=20,p1=5e3;function bS(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=xS(t);if(r){let a=r[e];if(typeof a=="string"&&a.trim().length>0)return a}return null}function xS(t){return pe(t.payload)?t.payload:null}var g1=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function h1(t){let e={};for(let n of g1)e[n]=bS(t,n);return e}var f1=Mp.map(t=>t.prefix),_1=new Set([...Up,...oy]);function y1(t){let e=Rl(t);return e===Fi?"derived":_1.has(e)||f1.some(n=>e.startsWith(n))?"automatic":"explicit"}var v1=["decision_id"];function b1(t){let e={};for(let n of v1)e[n]=bS(t,n);return e}function x1(t){return ad(t,yh(8))}async function hS(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return vm(new Uint8Array(e))}function yh(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let a=0;a<n.length;a+=1){let i=n[a].toString(16).padStart(2,"0");r+=i;}return r.slice(0,t)}function Er(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${yh(16)}`}function qu(){return uo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function fS(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function S1(t,e){let n={};for(let[r,a]of Object.entries(e))(typeof a=="string"||typeof a=="number"||typeof a=="boolean")&&(n[r]=a);return bd(t,n)}function P1(t,e,n){if(t.length===0)return true;let r=new Map;for(let a of t){let i=n.get(a)??"__no_dim__",s=r.get(i)??[];s.push(a),r.set(i,s);}for(let a of r.values())if(!a.some(i=>e.has(i)))return false;return true}var ph=class{constructor(e){k(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Mu=class Mu{constructor(e,n,r,a){k(this,"endpoint",e);k(this,"tenantId",n);k(this,"token",r);k(this,"legacyTargetDefaults",a);k(this,"cached");k(this,"etag");k(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<Mu.REFRESH_TTL_MS)return this.cached;try{let n=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,n.status===304||!n.ok)return this.cached;let r=await n.text(),a=n.headers.get("x-bundle-sha256");if(a&&await Xx(new TextEncoder().encode(r))!==a)return this.cached;let i=JSON.parse(r);eS(i);let s=Pi(i,"GET /api/sdk/config",this.legacyTargetDefaults);return s&&(this.cached=s,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};k(Mu,"REFRESH_TTL_MS",6e4);var gh=Mu,hh=class{constructor(e,n,r){k(this,"cached");k(this,"resolver");k(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=Pi(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},fh=class{constructor(e,n){k(this,"source");k(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return Pi(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return Pi(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},Zc=class Zc{constructor(e){k(this,"tenantId");k(this,"apiKey");k(this,"ingestPublicKey");k(this,"environmentId");k(this,"testTraffic");k(this,"analyticsEnabled");k(this,"anonymousTelemetryEnabled");k(this,"previewMode");k(this,"telemetryConsent");k(this,"telemetryCounters",mh());k(this,"maxBatchSize");k(this,"flushIntervalMs");k(this,"flushTimer");k(this,"batchingTeardown",[]);k(this,"anonTelemetryNoticeShown",false);k(this,"piiRedactionWarned",false);k(this,"endpoint");k(this,"runtimeMode");k(this,"endpointOverrides");k(this,"localRuntime");k(this,"localStorageKey");k(this,"mode");k(this,"policy");k(this,"extensionEnabled");k(this,"placementBehaviorOverrides");k(this,"derivedPlacementBehaviorMemo",null);k(this,"providerFailureSlotBehavior");k(this,"uiPathResolvers");k(this,"unbridgeUiPathCtaResolvers",()=>{});k(this,"unregisterBuiltinSnoozeResolver",()=>{});k(this,"persistentStore");k(this,"sessionStore");k(this,"anonymousId");k(this,"sessionId");k(this,"decisionCache",new Map);k(this,"interactionState",new Map);k(this,"interactionQueue",[]);k(this,"defaultDecisionTtlMs",6e4);k(this,"defaultDismissCooldownMs",1440*60*1e3);k(this,"dismissCooldownDefaultMs",10080*60*1e3);k(this,"defaultRemindLaterMs",3600*1e3);k(this,"defaultUsageWarningPercent",80);k(this,"defaultTrialExpiringDays",3);k(this,"events",[]);k(this,"placements",new Map);k(this,"syncedSurfaceSlotIds",new Set);k(this,"userContext");k(this,"pageContext");k(this,"clientContextToken");k(this,"clientSessionProvider");k(this,"retriedClientContextAfterMint",false);k(this,"serverUserContextProvider");k(this,"lastServerContextHash");k(this,"usageBalances",{});k(this,"localDecisionsByPlacementId",new Map);k(this,"localPlacementsByLookupKey",new Map);k(this,"localEntitlementsByHandle",new Map);k(this,"localUserContextsByUserId",new Map);k(this,"localTrialStatus",{in_trial:false});k(this,"presentationCapsByKey",new Map);k(this,"usageLimitByEntitlement",new Map);k(this,"usageTokenPrefixByEntitlement",new Map);k(this,"segmentIdsByPredicateField",new Map);k(this,"configuredSegmentsById",new Map);k(this,"dirtySegmentIds",new Set);k(this,"segmentMembershipBySegmentId",new Map);k(this,"segmentMembershipUserId");k(this,"lastTrialTriggerStage","none");k(this,"configProvider");k(this,"branding");k(this,"apiBranding");k(this,"cachedPlacementResolver");k(this,"cachedPlacementResolverConfig");k(this,"sdkDisabledByProviderFailure",false);k(this,"sdkDisabledReason");k(this,"providerRegistry");k(this,"placementTypeRegistry");k(this,"impressionHistory");k(this,"emittedResolutionDiagnostics",new Set);k(this,"emittedSdkErrors",new Set);k(this,"reportedUnrecognizedContextKeys",new Set);k(this,"userContextListeners",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??d1),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??p1),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Wc.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.clientSessionProvider=e.clientSession,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=Uu(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=Gi(e.persistentStorage),this.sessionStore=rp(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?fS():{},...e.user||{}},this.pageContext={...this.policy.inferPage?qu():{},...e.page||{},tags:El(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),pe(e.user)&&"id"in e.user&&(typeof e.user.id!="string"||e.user.id.trim()==="")){console.error("[RevTurbine] init() received a `user` with a blank id; falling back to an anonymous id. Caps, usage attribution and analytics identity will key to that anonymous id, not to your user. Pass a stable internal user id, or omit `user` entirely if the visitor really is signed out.");try{this.capture(Fi,{reason:"init received a blank user id"});}catch{}}if(this.sessionId=Er(),this.providerRegistry=new Wl,this.placementTypeRegistry=new cl,this.impressionHistory=new Qd({store:new Om({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),aS(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=sS(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=oS((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(),this.autoFetchClientContext();}isLocalOnlyMode(){return this.runtimeMode===Wc.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new fh(e.configProvider,n);let r=Pi(Fu(e.localRuntime),"localRuntime.playbook",n),a=e.localRuntime?.resolvers?.resolveExportedConfig;if(a)return new hh(a,n,r);if(r)return new ph(r);let i=e.runtimeMode??Wc.Server,s=e.ingestPublicKey??e.apiKey;if(i!==Wc.LocalOnly&&e.endpoint&&s)return new gh(e.endpoint,e.tenantId,s,n)}async refreshExportedConfigSnapshot(){try{await this.configProvider?.refresh?.(),this.rebuildSegmentPredicateFieldIndex();}catch{}}getConfiguredExportedConfig(){return this.configProvider?.getExportedConfig()}get placementBehavior(){let e=this.derivePlacementBehaviorFromPlaybook();return {enableClientCapsEnforcement:this.placementBehaviorOverrides.enableClientCapsEnforcement??e.enableClientCapsEnforcement,enableAutoGatedPlacement:this.placementBehaviorOverrides.enableAutoGatedPlacement??e.enableAutoGatedPlacement,enableTrialAutoTriggers:this.placementBehaviorOverrides.enableTrialAutoTriggers??e.enableTrialAutoTriggers}}derivePlacementBehaviorFromPlaybook(){let e=this.getConfiguredExportedConfig();if(this.derivedPlacementBehaviorMemo&&this.derivedPlacementBehaviorMemo.config===e)return this.derivedPlacementBehaviorMemo.flags;let n=e?.placements??[],i={enableClientCapsEnforcement:[...n.flatMap(s=>s.payloads??[]),...e?.placement_payloads??[]].some(s=>s.caps?.max_per_period!==void 0||s.caps?.cooldown_days!==void 0||s.remind_later_minutes!==void 0&&s.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(s=>s.category==="gated"),enableTrialAutoTriggers:n.some(s=>s.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:i},i}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let n=this.getConfiguredExportedConfig()?.segments??[];for(let r of n)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let a of r.predicates){let i=String(a.field||"").trim();if(!i)continue;let s=this.segmentIdsByPredicateField.get(i)??new Set;s.add(r.handle),this.segmentIdsByPredicateField.set(i,s);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let n=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(n)return this.cachedPlacementResolver=Ws({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.resolveContextPlanRaw(),r=this.userContext.usage,a=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,u=this.userContext.tiers,_=u!==void 0&&Object.keys(u).length>0,T=this.userContext.experiments,P=T!==void 0&&Object.keys(T).length>0;if(!e&&!n&&!r&&!_&&!P)return;let E={};if(r&&typeof r=="object"){let I=ti(r);for(let[C,j]of Object.entries(r)){if(!j||typeof j!="object")continue;let te=typeof j.amount=="number"?j.amount:I[C]??0,G=typeof j.limit=="number"?j.limit:0,de=G>0?Math.max(0,G-te):0;E[C]={used:te,limit:G,remaining:de,unit:typeof j.unit=="string"?j.unit:void 0,reset_date:typeof j.reset_date=="string"?j.reset_date:void 0};}}let R={...a.in_trial!==void 0?{trialActive:a.in_trial}:{},...a.trial_limit_type!==void 0?{trialLimitType:a.trial_limit_type}:{},...a.progress_percent!==void 0?{trialProgressPercent:a.progress_percent}:{},...a.days_remaining!==void 0?{trialDaysRemaining:a.days_remaining}:{},...a.day_number!==void 0&&a.days_remaining!==void 0?{trialDaysTotal:a.day_number+a.days_remaining}:{},...a.state!==void 0?{trialState:a.state}:{},...a.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:a.usage_entitlement_handle}:{},...a.usage_consumed!==void 0?{trialUsageConsumed:a.usage_consumed}:{},...a.usage_limit!==void 0?{trialUsageLimit:a.usage_limit}:{}};return {...e||n?{plan:{currentPlanHandle:n||(e?.handle??""),...e?.name!==void 0?{currentPlanName:e.name}:{},...R,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(E).length>0||_?{entitlements:{entries:{},usage:E,..._?{tiers:u}:{}}}:{},...P?{experiments:{assignments:T}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let n of e){let r=this.segmentIdsByPredicateField.get(n);if(r)for(let a of r)this.dirtySegmentIds.add(a);}}toSegmentEvaluationTraits(e,n,r){return Cm(e,n,r)}buildTargetingState(e){return Em(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,a=n.id||this.anonymousId;if(r!==a){this.segmentMembershipUserId=a,this.markAllSegmentsDirty();return}let i=this.buildTargetingState(e),s=this.buildTargetingState(n),u=new Set,_=new Set([...Object.keys(i.segmentTraits),...Object.keys(s.segmentTraits)]);for(let T of _)i.segmentTraits[T]!==s.segmentTraits[T]&&u.add(T);this.markSegmentsDirtyForFields(u);}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",a=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,i=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:Er(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:cs(a,i,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${Er()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:n,category:"fallback",surface:{type:e.surfaceType??"banner",slot_id:e.slotId},content:{title:r,header:r,body:"This placement is in safe fallback mode because all configured providers failed.",cta_label:"Retry later"},rule_id:"sdk_disabled_provider_failure",decision_id:n,config_version:"sdk-fallback",present_upsell:false}}hasEndpointOverride(e){let n=this.endpointOverrides[e];return typeof n=="string"&&n.trim().length>0}endpointFor(e,n){let r=this.endpointOverrides[e];return r&&r.trim().length>0?/^https?:\/\//i.test(r)?r:`${this.endpoint}${r.startsWith("/")?"":"/"}${r}`:`${this.endpoint}${n}`}localPlacementLookupKey(e){return Id(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(a,i)=>!a||!i?true:a===i;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return od(e,n.planHandle)}applyCategoryConflictSuppression(e){return xm(e)}resolveLocalPlacementFromCandidates(e,n){return Ed(e,true,{fixedOnly:n?.fixedOnly??false})}localPlacementForConfig(e){let n=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(n&&!this.localOutputMatchesConfig(n,e))return null;let r=[];for(let[a,i]of this.localPlacementsByLookupKey.entries()){if(!i)continue;let s=sd(a);this.localLookupMatchesConfig(s,e)&&this.localOutputMatchesConfig(i,e)&&r.push(i);}return n&&!r.some(a=>a.output_id===n.output_id)&&r.push(n),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,a]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,a);if(e?.placementsByLookupKey)for(let[r,a]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,a);if(e?.entitlementByHandle)for(let[r,a]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,a);if(e?.userContextByUserId)for(let[r,a]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,a);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let n=this.persistentStore.getItem(this.localStorageKey);if(!n){this.persistLocalRuntimeState();return}try{let r=JSON.parse(n);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let a of r.placements||[])this.placements.set(a.id,a);for(let[a,i]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(a,i);for(let[a,i]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(a,i);for(let[a,i]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(a,i);for(let[a,i]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(a,i);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${a1}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${i1}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${s1}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let n=JSON.parse(e),r=Date.now();Object.entries(n).forEach(([a,i])=>{!i||typeof i!="object"||!Number.isFinite(i.expiresAt)||i.expiresAt<=r||this.decisionCache.set(a,i);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),n=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(n));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let n=JSON.parse(e);Object.entries(n).forEach(([r,a])=>{!a||typeof a!="object"||this.interactionState.set(r,a);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let n=JSON.parse(e);for(let[r,a]of Object.entries(n)){if(!a||typeof a!="object")continue;let i=Array.isArray(a.seenAt)?a.seenAt.filter(u=>Number.isFinite(u)&&u>0):[],s=Number.isFinite(a.cooldownUntil)?a.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:i,cooldownUntil:s});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan_handle;if(typeof e=="string"&&e.trim())return e.trim();let n=this.userContext.plan;return pe(n)&&typeof n.handle=="string"&&n.handle.trim()?n.handle.trim():""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),a=new Set;if(!r)return a;a.add(r);for(let i of e.plans??[]){let s=typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"";s===r&&a.add(s);}return a}ruleTargetsActivePlan(e,n){let a=(Array.isArray(e.targets)?e.targets:[]).filter(i=>pe(i)&&i.kind==="plan");return a.length===0?true:a.some(i=>typeof i.id=="string"&&n.has(i.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,a=e.entitlements??[];for(let s of a){let u=typeof s.unique_handle=="string"?s.unique_handle:"";u&&r.set(u,u);}let i=e.entitlement_rules??[];for(let s of i){if(!pe(s))continue;let u=typeof s.entitlement_id=="string"?s.entitlement_id:"";if(!u)continue;let _=typeof s.kind=="string"?s.kind:"";if(!(_==="usage_limit"||_==="credits"||_==="seat"))continue;let P=r.get(u)??"",E=typeof s.unit=="string"?s.unit:"",R=cd(E),I=R&&!md(R)?R:$s(P||u);I&&(this.usageTokenPrefixByEntitlement.set(u,I),P&&this.usageTokenPrefixByEntitlement.set(P,I));let C=Number(s.limit_value??s.allowance_value);if(!Number.isFinite(C)||C<=0||!this.ruleTargetsActivePlan(s,n))continue;let j=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(u,{limit:C,warningPercent:j}),P&&this.usageLimitByEntitlement.set(P,{limit:C,warningPercent:j});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=Ud({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:a=>this.usageThresholdForEntitlement(a)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...n,...r}};}deriveRecommendedPlanTokens(e,n){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=e.plans.map(u=>({source_id:u.unique_handle,unique_handle:u.unique_handle,name:u.name,tier_position:u.tier_position??0,sort_order:u.sort_order??0}));return lS({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:i,plans:s})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[a,i]of Object.entries(r))a!=="user_id"&&(typeof i=="string"||typeof i=="number")&&(n[a]=i);if(n.plan_name===void 0){let a=hs(this.getConfiguredExportedConfig(),this.userContext.plan);a?n.plan_name=a:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let a=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=a.recommended_plan_handle,n.recommended_plan_name=a.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...ti(this.userContext.usage),...this.usageBalances},n={};for(let[r,a]of Object.entries(e)){if(!Number.isFinite(a))continue;let i=this.usageTokenPrefixByEntitlement.get(r)??$s(r)??r,s=this.usageThresholdForEntitlement(r);n[i]={current:a,...s?.limit!==void 0?{limit:s.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return Xd({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,n){let r=this.getConfiguredExportedConfig();if(!r)return null;let a=this.resolveContextPlanRaw(),i=String(a||"").toLowerCase(),s=this.getTargeting(),u=new Set(s.segmentIds??[]),{trialGrantedEntitlementHandles:_,effectivePlanHandle:T}=this.resolveReverseTrialGrants(r);return jl({handle:e,context:n,currentPlanHandle:i,segmentIds:u,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,..._!==void 0?{trialGrantedEntitlementHandles:_}:{},...T!==void 0?{effectivePlanHandle:T}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let i=(e.reverse_trial_rules??[]).find(s=>s.fallback_plan_id===r&&s.is_active!==false);return !i||i.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(i.entitlements_during_trial),effectivePlanHandle:i.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),a=hs(r,this.userContext.plan),i=a??n?.plan??(this.resolveContextPlanRaw()||void 0),s=[...r?.segments??[]],u=Array.from(new Set(s.flatMap(R=>(R.predicates??[]).map(I=>I.field)))).sort((R,I)=>R.localeCompare(I)),_={...n?.traits??{},...this.userContext.custom??{}};for(let[R,I]of Object.entries(this.userContext.entitlements??{}))_[R]===void 0&&(_[R]=I);a&&_.plan_name===void 0&&(_.plan_name=a),i&&_.plan===void 0&&(_.plan=i);let T={...n?.usage??{},...ti(this.userContext.usage),...this.usageBalances};for(let[R,I]of Object.entries(T))_[R]===void 0&&(_[R]=I);let P={};for(let[R,I]of Object.entries(_))(typeof I=="string"||typeof I=="number"||typeof I=="boolean")&&(P[R]=I);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),s.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),s.length>0&&this.dirtySegmentIds.size>0){for(let R of this.dirtySegmentIds){let I=this.configuredSegmentsById.get(R)??s.find(j=>j.handle===R);if(!I){this.segmentMembershipBySegmentId.delete(R);continue}let C=ql([I],P).length>0;this.segmentMembershipBySegmentId.set(R,C);}this.dirtySegmentIds.clear();}let E=s.length>0?s.filter(R=>this.segmentMembershipBySegmentId.get(R.handle)===true).map(R=>R.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:E,traits:_,...i?{plan:i}:{},...Object.keys(T).length>0?{usage:T}:{},configuredSegments:s,configuredTraitFields:u}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),a=this.getEntitlements(),i=this.getPolicy(),s=this.getConfiguredExportedConfig(),u=new Set(r.segmentIds),_=r.configuredSegments.map(ae=>{let Yt=Array.isArray(ae.predicates)?ae.predicates.map(cn=>S1(cn,r.traits)):[],ln=Yt.length>0?Yt.every(cn=>cn.matched):u.has(ae.handle);return {segmentId:ae.handle,...ae.name?{segmentName:ae.name}:{},matched:ln,predicates:Yt}}),T=new Map,P=new Map;if(Array.isArray(s?.entitlements))for(let ae of s.entitlements){let Yt=Gn(ae.unique_handle),ln=Yt;ln&&Yt&&T.set(ln,Yt);let cn=Gn(ae.type);ln&&cn&&P.set(ln,cn);}let E=new Map;if(Array.isArray(s?.plans))for(let ae of s.plans){let Yt=Gn(ae.unique_handle),ln=Yt;ln&&Yt&&E.set(ln,Yt);}let I=(Gn(r.traits.plan_handle,r.plan)??"").toLowerCase(),C=new Map;if(Array.isArray(s?.segments))for(let ae of s.segments){let Yt=Gn(ae.handle),ln=Gn(ae.dimension_id);Yt&&ln&&C.set(Yt,ln);}let j=Array.isArray(s?.entitlement_rules)?s.entitlement_rules.map((ae,Yt)=>{let ln=Gn(ae.id)??`entitlement_rule_${Yt}`,cn=Gn(ae.entitlement_id),_t=cn?T.get(cn):void 0,An=Array.isArray(ae.targets)?ae.targets.filter(Ze=>Ze.kind==="plan").map(Ze=>Ze.id):[],rr=An.map(Ze=>E.get(Ze)??Ze),qt=Array.isArray(ae.segment_ids)?ae.segment_ids.filter(Ze=>typeof Ze=="string"):[],mn=Gn(ae.kind),Fn=!I||An.some(Ze=>Ze.toLowerCase()===I),Rr=P1(qt,u,C),un=Fn&&Rr,an=_t?a[_t]:cn?a[cn]:void 0,yr=un?an?.status??"unknown":"unknown",vn;if(un)switch(mn){case "feature":vn=ae.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let Ze=Gn(ae.tier_name);vn=Ze?`unlocks ${Ze} tier`:"unlocks capability tier";break}case "usage_limit":{let Ze=typeof ae.limit_value=="number"?ae.limit_value:void 0,mr=Gn(ae.unit)??"",fa=Gn(ae.period_scope)??"",Ct=fa?` / ${fa.replace("per_","")}`:"";vn=Ze!=null?`sets limit to ${Ze.toLocaleString()}${mr?` ${mr}`:""}${Ct}`:"sets usage limit";break}case "credits":{let Ze=ae.allowance_value,mr=typeof Ze=="number"?Ze:void 0,fa=Gn(ae.unit)??"credits",Ct=Gn(ae.reset_period)??"",kr=Ct?` / ${Ct.replace("per_","")}`:"";vn=mr!=null?`grants ${mr.toLocaleString()} ${fa}${kr}`:"grants credit allowance";break}case "seat":{let Ze=ae.included_count,mr=typeof Ze=="number"?Ze:void 0;vn=mr!=null?`includes ${mr} seat${mr===1?"":"s"}`:"includes seats";break}default:if(cn){let Ze=P.get(cn);Ze==="feature"?vn="grants access":Ze&&(vn=`${Ze.replace(/_/g," ")} entitlement`);}break}return {ruleId:ln,...cn?{entitlementId:cn}:{},..._t?{entitlementHandle:_t}:{},...mn?{kind:mn}:{},planScopes:rr,planIds:An,...qt.length>0?{segmentIds:qt}:{},matchesPlan:Fn,matchesSegment:Rr,matched:un,outcome:yr,...vn?{outcomeDescription:vn}:{},...an?.reason?{reason:an.reason}:{}}}):[],te=Gn(n.output?.output_id),G=this.placements.get(e.placementId),de=Gn(G?.name)??"",Re=Array.isArray(G?.metadata?.surface_template_ids)?G.metadata.surface_template_ids:[],J=[],K=new Set;if(Array.isArray(s?.placements))for(let ae of s.placements){if(!ae||typeof ae!="object")continue;let Yt=Gn(ae.id)??"",ln=Gn(ae.name)??"";if(K.has(Yt))continue;let cn=Gn(n.output?.rule_id);if(cn&&Yt===cn){K.add(Yt),J.push(ae);continue}if(de&&(Yt===de||ln===de||Yt===`pl_${de}`||ln===`pl_${de}`)){K.add(Yt),J.push(ae);continue}Re.length>0&&(ae.payloads??[]).some(rr=>(rr.surfaces??[]).some(mn=>{let Fn=Gn(mn.template_id);return Fn?Re.includes(Fn):false}))&&(K.add(Yt),J.push(ae));}let We=J.flatMap(ae=>(ae.payloads??[]).map(ln=>{let cn=ln.target,_t=cn?.plan_ids??[],An=_t.map(yr=>E.get(yr)??yr),rr=cn?.segment_chips??[],mn=(ln.surfaces??[]).map(yr=>Gn(yr.template_id)).filter(yr=>typeof yr=="string"),Fn=_t.length===0||!I||_t.some(yr=>yr.toLowerCase()===I),Rr=rr.length===0||rr.some(yr=>u.has(yr)),un="active",an=un==="active"&&Fn&&Rr;return {payloadId:String(ln.id??""),placementId:String(ae.id??""),placementName:String(ae.name??""),status:un,planIds:_t,planScopes:An,segmentChips:rr,surfaceTemplateIds:mn,matchesPlan:Fn,matchesSegment:Rr,eligible:an,selected:!!te&&te===String(ln.id??"")}})),Gt=n.output?this.extractPlacementCapPolicies(n.output).flatMap(ae=>ae.rules.length===0&&ae.cooldownMs===void 0?[]:ae.rules.length===0?[{count:0,period:"session",cooldownMs:ae.cooldownMs}]:ae.rules.map(Yt=>({count:Yt.count,period:Yt.period,...ae.cooldownMs!==void 0?{cooldownMs:ae.cooldownMs}:{}}))):[],cr={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:Gt};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:i,entitlements:a,segments:_,entitlementRules:j,eligiblePayloads:We,placementRules:cr}}usageThresholdForEntitlement(e){return yd(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return Md(e,n,a=>this.usageThresholdForEntitlement(a)).map(a=>this.emitTrigger(a.type,{entitlement_handle:a.entitlement_handle,current_usage:a.current_usage,usage_limit:a.usage_limit,usage_percent:a.usage_percent,threshold:a.threshold}))}deriveTrialTriggerStage(e){return Fd(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=Er();return this.persistentStore.setItem(e,r),r}catch{return Er()}}installBridge(){let e={getSnapshot:()=>({tenantId:this.tenantId,user:this.userContext,page:this.pageContext,placements:Array.from(this.placements.values())}),setPageContext:n=>{this.setPageContext(n);},setUserContext:n=>{this.setUserContext(n);}};window.__RT_SDK_BRIDGE__=e;}installRouteTracking(){if(uo())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(pS,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...i)=>{r(...i),n();});let a=e.replaceState.bind(e);e.replaceState=((...i)=>{a(...i),n();}),window.addEventListener("popstate",n),window.addEventListener(pS,i=>{let s=i.detail;this.onRouteChange({path:s.path,title:s.title,tags:s.tags});}),e.__rtPatched=true;}mergeUserContext(e,n="setUserContext"){let r="plan"in e?{...e,plan:this.rejectLegacyPlanId(n,e.plan)}:e;return qd(this.userContext,r)}mergePageContext(e){return {...this.pageContext,...e,tags:El(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?qu():{},...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(!pe(e))return n.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),n;let r=xS(e),a=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof a=="string"&&a.trim()&&(this.placements.has(a)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:a}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(Fi,{source_event_type:e,warning_count:n.length,warning_codes:n.map(a=>a.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:pe(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?qu():{},...this.pageContext},a=r.url||(Fr()?window.location.href:""),i=(()=>{try{return new URL(a).pathname}catch{return Fr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:a,path:i,page_title:r.title||(Fr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:El(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===gS?{}:{...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>=Zc.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>=Zc.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",n?{reason:e,message:n}:{reason:e});}catch{}}}async emitSdkInitTelemetry(){this.anonymousTelemetryActive()&&await this.emitAnonMeta("sdk_init",{config_shape:this.computeConfigShape()});}computeConfigShape(){let e=this.getConfiguredExportedConfig();if(!e)return;let n=e.placements??[],r=n.reduce((a,i)=>a+(i.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:n.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,n={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,n));}async postAnonMeta(e,n={}){try{let r=this.getConfiguredExportedConfig(),a=r?.format_version!=null?String(r.format_version):void 0,i=a?`${this.tenantId}:${a}`:this.tenantId,s=(await hS(i)).slice(0,64),_={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:Er(),config_hash_id:s,sdk_version:Uy,runtime_mode:this.runtimeMode,...a?{bundle_version:a}:{},...n.config_shape?{config_shape:n.config_shape}:{},...n.message?{message:n.message.slice(0,500)}:{},...n.reason?{reason:n.reason.slice(0,64)}:{},...n.placement_handle?{placement_handle:n.placement_handle.slice(0,64)}:{},...n.slot_handle?{slot_handle:n.slot_handle.slice(0,64)}:{},...n.surface?{surface:n.surface.slice(0,64)}:{},...n.plan_handle?{plan_handle:n.plan_handle.slice(0,64)}:{},...n.entitlement_handle?{entitlement_handle:n.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",l1),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(_),keepalive:!0});}catch{}}showAnonTelemetryNoticeOnce(){this.anonTelemetryNoticeShown||(this.anonTelemetryNoticeShown=true,console.info("[RevTurbine] Sending anonymous SDK telemetry (config-shape counts and SDK version only \u2014 no user data or PII). Disable it by setting `anonymousTelemetry: false` in your initRevTurbine() options."));}async sendEvents(e){if(e.length===0)return;if(!this.telemetryConsented()){this.telemetryCounters.dropped+=e.length;return}let n=0,r=e.map(E=>{let R=m_(E);return n+=R.redactions,R.value}),a=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&a&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let i=Er(),s=this.getConfiguredExportedConfig()?.playbook_version_id,u=r.map(E=>{let R=E.user_id||E.anonymous_id,I=tp(this.userContext.account_id||R),C=ep({level:E.level,message:E.message,path:E.path,url:E.url,page_title:E.page_title,session_id:E.session_id,anonymous_id:E.anonymous_id,tags:E.tags,traits:E.identity.traits??null,payload:E.properties,source:u1});return n+=C.redactions+(I.redacted?1:0),{environment_id:this.environmentId,user_id:R,account_id:I.value,event_name:Rl(E.type).slice(0,120),event_ts:E.event_time,properties:JSON.stringify(C.value),...h1(E.properties),...b1(E.properties),origin:y1(E.type),playbook_version:typeof s=="string"&&s.length>0?s:null,event_id:lh.next(),request_id:Er(),tenant_id:E.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let _=this.endpointFor("ingestEvents",o1),T={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":i},body:JSON.stringify({events:u}),keepalive:true};(await ch(()=>fetch(_,T))).delivered?this.telemetryCounters.sent+=u.length:this.telemetryCounters.failed+=u.length;}dispatchToEventConsumers(e){this.providerRegistry.has("events")&&this.providerRegistry.get("events").then(n=>{let r=n?.consumers;if(!(!r||r.length===0))for(let a of r)try{Promise.resolve(a.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,n,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let a=Rl(e),i=this.toEventEnvelope(a,n),s=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],u=[i];if(s.length>0&&u.push(this.buildValidationWarningEvent(a,s,n)),this.telemetryCounters.created+=u.length,r?.immediate){await this.sendEvents(u);return}this.events.push(...u),this.telemetryCounters.queued+=u.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:a,properties:i}=np(e,n);await this.capture(a,i,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!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 a=pe(n)?n:{};await this.capture(e,{semantic:true,payload:a},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),a={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},i=await this.fetchUserContext(a.id||""),s=new Set(r.segmentIds||[]),u=new Set(i.segmentIds||[]),_=Array.from(u).filter(P=>!s.has(P)),T=Array.from(s).filter(P=>!u.has(P));for(let P of _)await this.emitSemantic("segment_enrolled",{segment_id:P,user_id:a.id??null});for(let P of T)await this.emitSemantic("segment_unenrolled",{segment_id:P,user_id:a.id??null});if(n){let P=r.usage||{},E={...P,...this.usageBalances},R=this.evaluateUsageThresholdCrossings(P,E);await Promise.all(R);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(gS,{context_fields:n});}setUserContext(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom),this.notifyUserContextChanged();}onUserContextChange(e){return this.userContextListeners.add(e),()=>{this.userContextListeners.delete(e);}}notifyUserContextChanged(){for(let e of [...this.userContextListeners])try{e();}catch{}}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(qu());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let n=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,a=Date.now()+r;for(let i of e.decisions??[]){if(!i.output)continue;let s=[this.tenantId,i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),u=pe(i.output?.content)?i.output.content:{};this.decisionCache.set(s,{value:{placementId:i.slot_id??i.entitlement_handle??i.placement_handle??"unknown",requestId:e.request_id,visible:i.visible,decisionSource:"cache",reasonCodes:i.reason_codes??[],content:cs(String(u.header??""),String(u.body??""),String(u.cta_label??"")),output:i.output},expiresAt:a});}if(this.persistDecisionCache(),e.entitlements)for(let[i,s]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(i,{status:s.status,allowed:s.allowed,reason:s.reason,current_tier:s.current_tier,placement:s.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(n,this.userContext);}async generatePlacementId(e){return Td({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:hS,randomHex:yh})}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:pe(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let n=Er(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),a=x1(e.placementScopeKey||e.id||e.name),i={...pe(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},s={name:e.name,slug:a,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:i},u={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},_=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:u,body:JSON.stringify(s)});if(_.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(_.status!==404)throw new Error(`surface_slot_upsert_failed:${_.status}`);let T=await fetch(r,{method:"POST",headers:u,body:JSON.stringify(s)});if(!T.ok)throw new Error(`surface_slot_create_failed:${T.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=Ks(this.currentPathname()),r=String(e?.id||"").trim(),a=String(e?.name||r).trim(),i=[];r||i.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),a||i.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!pe(e.metadata)&&i.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let s=await this.generatePlacementId({placementName:a||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),u={id:s,route:n,name:a||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...pe(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},_=this.placements.get(s),T=_?this.stableStringify(_):null,P=this.stableStringify(u);return (!_||T!==P)&&(this.placements.set(s,u),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(s)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(s)&&await this.upsertSurfaceSlot(u),i.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",i,{surface_slot_id:r||null,placement_id:s,route:n,placement_name:a||null})]),s}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;if(!this.hasEndpointOverride("placementTypes")){gs()&&console.warn("[RevTurbine] persistPlacementTypes() was called but no `endpointOverrides.placementTypes` is configured. RevTurbine hosts no default route for this verb, so the call was skipped. Configure an endpoint if you need placement types persisted.");return}let n=(Array.isArray(e)?e:[]).map(i=>I1(i)).filter(i=>i!==null);if(n.length===0)return;let r=Er(),a=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:n})});if(!a.ok)throw new Error(`persist_placement_types_failed:${a.status}`)}stableStringify(e){return Ti(e)}decisionCacheKey(e,n){return Cd({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 e_({tenantId:this.tenantId,...e})}readDecisionCache(e){let n=this.decisionCache.get(e);return n?n.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...n.value,decisionSource:"cache"}:null}writeDecisionCache(e,n,r){let a=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:a,value:n}),this.persistDecisionCache();}suppressionForState(e){return t_(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return Sm(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,a=this.placementCapKey(e),i=this.presentationCapsByKey.get(a),s=kd(e,a,i,Date.now());return s.updatedState&&r&&(this.presentationCapsByKey.set(a,s.updatedState),s.allowed&&this.persistPresentationCaps()),{allowed:s.allowed,reason:s.reason}}gateDecisionByCaps(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:n.tick??true});if(r.allowed)return e;let a=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],a],suppressionReason:a}}normalizeDecisionFromResponse(e,n,r,a){return Rd(e,n,r,a)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=Er();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:cs("Placement not found","Register the placement before requesting a decision.","Register placement")};let a=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),i=this.suppressionForState(this.interactionState.get(a));if(i.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:i.reason?[i.reason]:[],suppressionReason:i.reason,content:cs(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let s,u=await this.localRuntime?.getContext?.(),_=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(u||_)&&(s=this.stableStringify({legacyCtx:u??{},providerCtx:_??{}}));let T=this.decisionCacheKey(e,s),P=this.readDecisionCache(T);if(P)return this.gateDecisionByCaps(P,{tick:false});{let R=this.getOrBuildPlacementResolver();if(R){let C={...u,..._?{__providers:_}:{}},j=this.gateDecisionByCaps(await R(e,n,C));return this.localDecisionsByPlacementId.set(e.placementId,j),this.writeDecisionCache(T,j,e.ttlMs),this.persistLocalRuntimeState(),j}let I=this.localDecisionsByPlacementId.get(e.placementId);if(I){let C=this.gateDecisionByCaps({...I,decisionSource:"fallback"});return this.writeDecisionCache(T,C,e.ttlMs),this.persistLocalRuntimeState(),C}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let E={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:cs(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),E}async preloadPlacementDecisions(e){let n=new Map;for(let r of e)n.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(n.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let a=await this.getPlacementDecision(r),i=this.decisionCacheKey(r);this.writeDecisionCache(i,a,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let i=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),s=n.get(i);if(s){s.placementIds.push(r.placementId);continue}n.set(i,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of n.values()){let a=e.filter(i=>r.placementIds.includes(i.placementId)&&i.userId===r.userId);await Promise.allSettled(a.map(i=>this.getPlacementDecision(i)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),a=e.metadata??{},s={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let u=Number(a.remind_after_seconds);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let u=Number(a.cooldown_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(s.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let u=Number(a.suppress_duration_ms);s.suppressedUntil=r+(Number.isFinite(u)&&u>0?u:this.defaultDismissCooldownMs);}this.interactionState.set(n,s),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let n=e.map(r=>({user_id:r.userId,placement_id:r.placementId,treatment_id:r.treatmentId,interaction_type:r.interactionType,interaction_at:r.interactionAt,surface_slot_id:r.surfaceSlotId,surface_template_id:r.surfaceTemplateId,payload_id:r.payloadId,...r.experimentId?{experiment_id:r.experimentId}:{},...r.variantKey?{variant_key:r.variantKey}:{},metadata:r.metadata??{},tenant_id:this.tenantId,...this.testTraffic?{test:true}:{}}));try{(await fetch(this.endpointFor("touchpointTransition",c1),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Er()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",m1),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":Er()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let n={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(n),this.interactionQueue.push(n),this.flushInteractionQueue();let r=n.placementId,a=n.treatmentId,i=n.metadata??{},s=Number(i.cooldown_ms),u=Number.isFinite(s)&&s>0?s:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,a,void 0,void 0,u);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,a);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,a,void 0,void 0,u);else if(n.interactionType==="suppress"){let P=Number(i.suppress_duration_ms);this.impressionHistory.recordSuppression(r,a,void 0,i,Number.isFinite(P)&&P>0?P:void 0);}let _=n.metadata??{},T=typeof _.decision_id=="string"?_.decision_id:null;await this.emitSemantic("placement_interaction",{user_id:n.userId,placement_id:n.placementId,treatment_id:n.treatmentId??null,interaction_type:n.interactionType,interaction_at:n.interactionAt??null,...T?{decision_id:T}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:_},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),a=Er();if(this.isDisabledByProviderFailure()){let u=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:a,decisionSource:"fallback",content:u.content}}if(this.isLocalOnlyMode()){let u=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:a,decisionSource:u?"remote":"fallback",content:cs(typeof u?.content?.title=="string"?String(u.content.title):`${r?.name??e} treatment`,typeof u?.content?.body=="string"?String(u.content.body):"Local runtime placement content.",typeof u?.content?.cta=="string"?String(u.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:a,decisionSource:"fallback",content:cs("Placement not found","Register the placement before requesting content.","Register placement")};let i=this.userContext.id??this.anonymousId,s=await this.getPlacementDecision({placementId:e,userId:i});return {placementId:e,requestId:a,decisionSource:s.decisionSource==="fallback"?"fallback":"remote",content:s.content??cs(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}rejectLegacyPlanId(e,n){if(!pe(n)||!("id"in n))return n;let{id:r,...a}=n,i=typeof a.handle=="string"&&a.handle.trim()!=="",s=`${e}:plan.id`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.error(`[RevTurbine] ${e}() received a removed \`plan.id\` key and dropped it. Plan identity is the unique_handle: pass { plan: { handle: "\u2026" } } (or the flat plan_handle). `+(i?"A handle was also supplied, so plan matching is unaffected.":"No handle was supplied, so this user has NO plan for entitlement-rule matching and plan-targeted rules will not match."));try{this.capture(Fi,{reason:`${e} received removed plan.id key`,unrecognized_keys:"plan.id",plan_handle_present:i?"1":"0"});}catch{}}return a}reportUnrecognizedContextKeys(e,n,r,a){if(n.length===0)return;let i=`${e}:${[...n].sort().join(",")}`;if(this.reportedUnrecognizedContextKeys.has(i))return;this.reportedUnrecognizedContextKeys.add(i);let s=a?` ${a}`:"";console.warn(`[RevTurbine] ${e}() dropped unrecognized user-context key(s): ${n.join(", ")}. Recognized keys: ${r.join(", ")}. Pass free-form values under { custom: { \u2026 } }.${s}`);try{this.capture(Fi,{reason:`${e} received unrecognized user-context key(s)`,unrecognized_keys:n.join(",")});}catch{}}normalizePlacementOutput(e){let n=_m(e,Er);return n&&pe(e)&&typeof e.decision_id!="string"&&this.capture(Fi,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return hd(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!yS.has(r))return this.capture(Fi,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;Er();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let u=await this.localRuntime.resolvers.getPlacement(e);return u&&this.applyPlacementCapsIfNeeded(u).allowed?u:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let i=this.localPlacementForConfig(e);return i&&this.applyPlacementCapsIfNeeded(i).allowed?i:null}async checkEntitlement(e,n){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let i=this.localRuntime?.resolvers?.checkEntitlement;if(i){let s=await i(e,n);return this.localEntitlementsByHandle.set(e,s),this.persistLocalRuntimeState(),s}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let a=this.localEntitlementsByHandle.get(e);return a||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"entitlement_not_in_playbook":"config_unavailable"})}updateUsage(e){let n=this.userContext,r=ti(e);this.reportUnusableUsageValues(e,r),this.reportUnmatchedUsageKeys(Object.keys(r)),this.usageBalances={...this.usageBalances,...r},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true),this.notifyUserContextChanged();}reportUnusableUsageValues(e,n){let r=Object.keys(e).filter(i=>!(i in n));if(r.length===0)return;let a=`usage:unusable:${[...r].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(a)){this.reportedUnrecognizedContextKeys.add(a),console.warn(`[RevTurbine] updateUsage() dropped usage value(s) it could not read: ${r.join(", ")}. A usage balance is a number \u2014 \`update({ usage: { <entitlement_handle>: 42 } })\` \u2014 or an entry object carrying a numeric \`amount\`. The reported balance was NOT applied, so any limit on these entitlements is still evaluating the previous value.`);try{this.capture(Fi,{reason:"updateUsage received unusable usage value(s)",unrecognized_keys:r.join(",")});}catch{}}}reportUnmatchedUsageKeys(e){if(e.length===0)return;let r=this.getConfiguredExportedConfig()?.entitlements;if(!Array.isArray(r)||r.length===0)return;let a=new Set(r.map(u=>pe(u)&&typeof u.unique_handle=="string"?u.unique_handle:null).filter(u=>u!==null));if(a.size===0)return;let i=e.filter(u=>!a.has(u));if(i.length===0)return;let s=`usage:unmatched:${[...i].sort().join(",")}`;if(!this.reportedUnrecognizedContextKeys.has(s)){this.reportedUnrecognizedContextKeys.add(s),console.warn(`[RevTurbine] updateUsage() received usage key(s) matching no entitlement in the Playbook: ${i.join(", ")}. The balance is stored but nothing reads it, so any limit on the entitlement you meant is still evaluating zero consumed. Usage keys are entitlement unique_handles \u2014 check for a typo. Known handles: ${[...a].sort().join(", ")}.`);try{this.capture(Fi,{reason:"updateUsage received usage key(s) matching no entitlement handle",unrecognized_keys:i.join(",")});}catch{}}}getUserContext(){let e=this.userContext.id||this.anonymousId,n=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:n,updated_at:n,account_id:this.userContext.account_id,email:this.userContext.email,plan:this.userContext.plan,usage:this.userContext.usage??{},entitlements:this.userContext.entitlements??{},custom:Object.fromEntries(Object.entries(this.userContext.custom??{}).filter(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)),personalization:Object.fromEntries(Object.entries(this.userContext.personalization??{}).filter(([,r])=>typeof r=="string"||typeof r=="number")),derived_computed_at:null}}async fetchUserContext(e){let n=Er();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let i=await r(e);return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}let a=this.localUserContextsByUserId.get(e);return a||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},body:JSON.stringify({request_id:n,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let a=await r.json(),i={userId:e,segmentIds:Array.isArray(a.segment_ids)?a.segment_ids.filter(s=>typeof s=="string"):[],traits:pe(a.traits)?a.traits:{},plan:typeof a.plan=="string"?a.plan:void 0,usage:pe(a.usage)?Object.fromEntries(Object.entries(a.usage).filter(([,s])=>typeof s=="number")):void 0};return this.localUserContextsByUserId.set(e,i),this.persistLocalRuntimeState(),i}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new Zl,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e),this.clientContextToken||(this.clientContextToken=await this.mintClientSessionToken());let n=this.clientContextToken;if(n)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${n}`}});if(!r.ok){if(r.status===401&&(this.clientContextToken=void 0,this.clientSessionProvider&&!this.retriedClientContextAfterMint)){let _=await this.mintClientSessionToken();if(_){this.retriedClientContextAfterMint=!0;try{await this.fetchClientContext(_);}finally{this.retriedClientContextAfterMint=!1;}}}return}let a=await r.json(),i=this.mapClientSafeContext(a);if(Object.keys(i).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:i.trial?{in_trial:i.trial.in_trial,state:i.trial.state,days_remaining:i.trial.days_remaining}:void 0,payment_at_risk:i.payment_at_risk});let s=JSON.parse(JSON.stringify({trial:i.trial??null,plan_handle:i.plan_handle??null,plan:i.plan??null})),u=await Dd(s)+`:${i.payment_at_risk===!0?1:0}`;if(u===this.lastServerContextHash)return;this.lastServerContextHash=u,this.applyServerContextPatch(i);}catch{}}async mintClientSessionToken(){if(this.clientSessionProvider)try{let e=await this.clientSessionProvider();return typeof e=="string"&&e.length>0?e:void 0}catch{return}}autoFetchClientContext(){this.clientSessionProvider&&this.fetchClientContext().catch(()=>{});}mapClientSafeContext(e){let n={},a=["active","running_out","expired","converted","none"].find(s=>s===e.trial?.status);a&&(n.trial={in_trial:a==="active"||a==="running_out",state:a,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let i=e.plan?.handle;return typeof i=="string"&&i.length>0&&(n.plan_handle=i,n.plan={handle:i,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:i}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e,"update"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,n,r,a){await this.impressionHistory.recordImpression(e,n,r,a);}async recordDismissal(e,n,r,a,i){await this.impressionHistory.recordDismissal(e,n,r,a,i);}async recordClickThru(e,n,r,a,i){await this.impressionHistory.recordClickThru(e,n,r,a,i);}async recordConversion(e,n,r,a){await this.impressionHistory.recordConversion(e,n,r,a);}async getTrialStatus(){let e=Er();if(this.isLocalOnlyMode()){let n=this.localRuntime?.resolvers?.getTrialStatus;if(n){let r=await n();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let n=await fetch(this.endpointFor("trialStatus","/api/sdk/trial-status"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify({request_id:e,tenant_id:this.tenantId,user_id:this.userContext.id})});if(!n.ok)return {in_trial:!1};let r=await n.json(),a=this.validateTrialStatusShape(r);return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),a=n?.nowIso??new Date().toISOString(),{trial:i}=mm({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:a,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),s=i??{in_trial:false};return this.localTrialStatus=s,await this.evaluateTrialLifecycleTriggers(s),this.persistLocalRuntimeState(),s}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:pe(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],a=e.includeProviderHandlers??true,i=Uu(e.resolvers,"validateUiPathResolvers(options.resolvers)"),s={...this.uiPathResolvers,...i};if(a&&this.providerRegistry.has("cta"))try{let P=await this.providerRegistry.resolveAll();pe(P.cta)&&pe(P.cta.handlers)&&Object.assign(s,P.cta.handlers);}catch{}let u=[],_=0;for(let P of r){let E=pe(P)?P:{},R=typeof E.action_type=="string"?E.action_type.trim():"";if(!R){u.push({actionType:"unknown",reason:"missing_action_type",...typeof E.id=="string"?{uiPathId:E.id}:{},...typeof E.name=="string"?{name:E.name}:{}});continue}if(typeof s[R]=="function"){_+=1;continue}u.push({actionType:R,reason:"missing_resolver",...typeof E.id=="string"?{uiPathId:E.id}:{},...typeof E.name=="string"?{name:E.name}:{}});}let T={valid:u.length===0,totalUiPaths:r.length,resolvedUiPaths:_,issues:u};if(!T.valid&&e.throwOnMissing){let P=T.issues.filter(R=>R.reason==="missing_resolver").map(R=>R.actionType),E=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 ${T.issues.length} issue(s).${E}`)}return T}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),n=pe(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(n.length===0)return;let r=[],a=0;for(let u of n){let T=(pe(u)?u:{}).action_type,P=typeof T=="string"?T.trim():"";if(!P){a+=1;continue}typeof this.uiPathResolvers[P]!="function"&&r.push(P);}if(a===0&&r.length===0)return;let i=Array.from(new Set(r)),s=[];i.length>0&&s.push(`missing resolvers for action_type: ${i.join(", ")}`),a>0&&s.push(`content_ui_paths with missing action_type: ${a}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${s.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,n=3600){await this.emitSemantic("placement_interaction",{interaction_type:"remind_me_later",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),remind_after_seconds:n},{immediate:false});}async convert(e){await this.emitSemantic("placement_interaction",{interaction_type:"cta_completed",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async emitTrigger(e,n,r){await this.emitSemantic(e,{...n,user_id:this.userContext.id??null,plan_handle:this.userContext.personalization?.plan_name??null,triggered_at:new Date().toISOString(),source:"sdk"},r);}async trackEvent(e,n){await this.capture(e,n??{});}identify(e,n){if(typeof e!="string"||e.trim()===""){console.error("[RevTurbine] identify() requires a non-empty user id; call ignored. Pass your stable internal user id.");return}e1.test(e)&&n1(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,a=pe(n)?n:{};pe(n)&&this.reportUnrecognizedContextKeys("identify",Object.keys(n).filter(i=>!XO.has(i)),_S),a.usage&&(this.usageBalances={...this.usageBalances,...ti(a.usage)}),this.userContext=this.mergeUserContext({id:e,account_id:a.account_id,email:a.email,plan_handle:typeof a.plan_handle=="string"&&a.plan_handle.trim()!==""?a.plan_handle.trim():void 0,plan:a.plan,usage:a.usage,entitlements:a.entitlements,custom:a.custom,personalization:a.personalization},"identify"),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.clientSessionProvider&&(this.clientContextToken=void 0,this.autoFetchClientContext()),this.emitObservedContextFields(a.custom),this.notifyUserContextChanged();}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?fS():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate(),this.notifyUserContextChanged();}can(e,n){return this.checkEntitlement(e,n)}async gate(e,n,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let a=await this.checkEntitlement(e,r);return a.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:a}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:a.reason??null},{immediate:false}),{ran:false,entitlement:a})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},a=Object.entries(r).filter(([i])=>dS.has(i));this.reportUnrecognizedContextKeys("update",Object.keys(r).filter(i=>!dS.has(i)),vS,"A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify()."),a.length>0&&this.setUserContext(Object.fromEntries(a)),n&&this.updateUsage(n);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${Fr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};k(Zc,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var _h=Zc;function vh(t){let e=T1(t),n=new _h(e);if(!e.provider)return n;let r=(P,E)=>{try{return typeof P=="function"?P(e):P}catch(R){return console.warn(`[RevTurbine] Provider factory failed at chain index ${E}.`,R),null}},a=[r(e.provider,0),...(e.providerFallbacks??[]).map((P,E)=>r(P,E+1))].filter(P=>P!==null);if(a.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let i=async(P,E,R)=>{let I=[];for(let C=0;C<a.length;C+=1){let te=a[C][P];if(te){I.push(C);try{return await te(...E)}catch(G){let de=a.slice(C+1).some(Re=>typeof Re[P]=="function");console.warn(C===0&&de?`[RevTurbine] Primary provider ${P} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${P} failed at chain index ${C}.`,G);}}}return I.length===0||n.disableForProviderFailure(`provider_${P}_chain_failed`),R()},s=n.getPlacement.bind(n),u=n.checkEntitlement.bind(n),_=n.persistPlacementTypes.bind(n),T=n.identify.bind(n);return n.getPlacement=async P=>i("getPlacement",[P],()=>s(P)),n.checkEntitlement=async(P,E)=>i("checkEntitlement",[P,E],()=>u(P,E)),n.persistPlacementTypes=async P=>i("persistPlacementTypes",[P],()=>_(P)),n.identify=(P,E)=>{let R=0;for(let I=0;I<a.length;I+=1){let C=a[I];if(C.identify){R+=1;try{C.identify(P,E);return}catch(j){let te=a.slice(I+1).some(G=>typeof G.identify=="function");console.warn(I===0&&te?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${I}.`,j);}}}if(R>0){n.disableForProviderFailure("provider_identify_chain_failed"),T(P,E);return}T(P,E);},n}var Du={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function dh(t){return typeof t=="string"&&t.trim().length>0}function T1(t){return Fu(t.localRuntime)!==void 0?{...t,tenantId:dh(t.tenantId)?t.tenantId:Du.tenantId,apiKey:dh(t.apiKey)?t.apiKey:Du.apiKey,endpoint:dh(t.endpoint)?t.endpoint:Du.endpoint,mode:t.mode??Du.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function I1(t){if(!pe(t))return null;let e=(_,T)=>String(_??"").trim().slice(0,T),n=e(t.id,256),r=e(t.label,256),a=e(t.description,1024),i=e(t.surfaceType,64);if(!n||!r||!a||!yS.has(i))return null;let s=Number(t.priority),u=Number.isFinite(s)?Math.max(0,Math.floor(s)):0;return {id:n,label:r,description:a,surfaceType:i,priority:u}}typeof window<"u"&&(window.RevTurbine={init:vh});var Qa=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 ml(t){return t?{id:t.id??Qa.id,name:t.name??Qa.name,version:t.version??Qa.version,colors:{...Qa.colors,...t.colors},typography:{...Qa.typography,...t.typography},shape:{...Qa.shape,...t.shape},shadows:{...Qa.shadows,...t.shadows}}:{...Qa}}var C1="revturbine:theme";function bh(t){return `${C1}:${t}`}function E1(t,e){try{let n=e.getItem(bh(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function R1(t,e,n){try{n.setItem(bh(t),JSON.stringify(e));}catch{}}function k1(t,e){let n=e??Gi();try{n.removeItem(bh(t));}catch{}}async function xh(t,e){let{tenantId:n,endpoint:r,apiKey:a,base:i}=t,s=t.storage??Gi(),u=E1(n,s),_=ml({...i,...u});return t.onOverride?.(u),A1(r,n,a).then(T=>{T&&(u?.version&&T.version===u.version||(R1(n,T,s),t.onOverride?.(T),e?.(ml({...i,...T}))));}).catch(()=>{}),_}async function A1(t,e,n){let r=t.replace(/\/$/,""),a=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,i=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":a}});if(!i.ok)return null;let s=await i.json();return typeof s!="object"||s===null?null:s}var Lu=class{constructor(e,n){k(this,"sdk");k(this,"options");k(this,"listeners",new Set);k(this,"_placementId","");k(this,"_decision",null);k(this,"_isLoading",false);k(this,"_error","");k(this,"_impressionTracked",false);k(this,"_loadSeq",0);k(this,"_rendered",false);k(this,"_exposed",false);k(this,"_exposureBasis",null);k(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 a=this.slotContext();this.emitSlotEvent("slot_evaluated",a),this.emitSlotEvent(n,a);}emitSlotError(e){let n=`${this._placementId}|slot_error`;this._lastSlotKey!==n&&(this._lastSlotKey=n,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,n){try{this.sdk.emitSemantic(e,n,{immediate:!1});}catch{}}emitPlacementOutcome(e){let n=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:n?.output?.surface?.slot_id??null,payload_id:n?.output?.output_id??null,decision_id:n?.output?.decision_id??null,decision_source:n?.decisionSource??null,outcome:"cta_completed",cta_target:e},{immediate:!1});}catch{}}get visible(){return !!this._decision?.visible}get content(){return this._decision?.content??null}get decision(){return this._decision}get placementId(){return this._placementId}async load(){let e=this.options,n=e.userId||this.sdk.getUserContext().user_id;if(!n)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let a=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:n,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=a,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let i=this.exposureMode;return i==="legacy_resolution"?this.fireImpression("legacy_resolution"):i==="viewport"&&!uh.supported&&this.fireImpression("render_fallback"),a}catch(a){return r===this._loadSeq&&(this._error=a instanceof Error?a.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,n){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let a=this._decision?.output?.decision_id??null;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:a?{...n,decision_id:a}:n}),(e==="dismiss"||e==="remind_me_later"||e==="cta_completed")&&this._decision&&(this._decision={...this._decision,visible:false},this.notify());}notify(){for(let e of this.listeners)e();}};function Qc(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var Nu=class{constructor(e,n){k(this,"sdk");k(this,"options");k(this,"listeners",new Set);k(this,"_isLoading",false);k(this,"_error",null);k(this,"_result",null);k(this,"_gatedPlacement",null);k(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:Qc(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return Qc(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:a}=this.options;this._isLoading=true,this._error=null,this.notify();try{let i=await this.sdk.checkEntitlement(e,n);if(this._result=i,this.emitGateEvaluated(e,i),!r||!Qc(i))this._gatedPlacement=null;else if(i.placement)this._gatedPlacement=i.placement;else {let s=await this.sdk.getPlacement({...a,entitlementHandle:e});this._gatedPlacement=s;}return i}catch(i){return this._error=i instanceof Error?i.message:String(i),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,n){let r=`${e}|${n.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:n.status,gated:Qc(n),reason:n.reason??null,limit:n.limit??null,used:n.used??null,remaining:n.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}watchUserContext(){let e=this.sdk.onUserContextChange;return typeof e!="function"?()=>{}:e.call(this.sdk,()=>{this._result===null&&!this._isLoading||this.check();})}notify(){for(let e of this.listeners)e();}},Vu=class{constructor(e,n){k(this,"sdk");k(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 Lu(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 Nu(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 w1(t){let{bootstrapPlacements:e,...n}=t,r=n,a=vh(r),i=r.user;i&&typeof i=="object"&&i.id&&a.identify(i.id,i);let s=Qa,_=Fu(r.localRuntime)?.theme;if(_&&typeof _=="object"?s=ml(_):s=await xh({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let T=a.getUserContext().user_id,P=[];for(let E of e){let R=await a.registerPlacement(E.placement),I=E.userId||T;I&&P.push({placementId:R,userId:I,contextMode:E.contextMode,overrides:E.overrides,traits:E.traits,ttlMs:E.ttlMs});}P.length>0&&await a.bootstrapPlacementDecisions(P);}return new Vu(a,s)}var j1=/\{[^{}]+\}/g,O1=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function q1(){return Math.random().toString(36).slice(2,11)}function IS(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:a,bodySerializer:i,pathSerializer:s,headers:u,requestInitExt:_=void 0,...T}={...t};_=O1()?_:void 0,e=TS(e);let P=[];async function E(R,I){let{baseUrl:C,fetch:j=r,Request:te=n,headers:G,params:de={},parseAs:Re="json",querySerializer:J,bodySerializer:K=i??U1,pathSerializer:We,body:Gt,middleware:cr=[],...ae}=I||{},Yt=e;C&&(Yt=TS(C)??e);let ln=typeof a=="function"?a:SS(a);J&&(ln=typeof J=="function"?J:SS({...typeof a=="object"?a:{},...J}));let cn=We||s||D1,_t=Gt===void 0?void 0:K(Gt,PS(u,G,de.header)),An=PS(_t===void 0||_t instanceof FormData?{}:{"Content-Type":"application/json"},u,G,de.header),rr=[...P,...cr],qt={redirect:"follow",...T,...ae,body:_t,headers:An},mn,Fn,Rr=new te(M1(R,{baseUrl:Yt,params:de,querySerializer:ln,pathSerializer:cn}),qt),un;for(let vn in ae)vn in Rr||(Rr[vn]=ae[vn]);if(rr.length){mn=q1(),Fn=Object.freeze({baseUrl:Yt,fetch:j,parseAs:Re,querySerializer:ln,bodySerializer:K,pathSerializer:cn});for(let vn of rr)if(vn&&typeof vn=="object"&&typeof vn.onRequest=="function"){let Ze=await vn.onRequest({request:Rr,schemaPath:R,params:de,options:Fn,id:mn});if(Ze)if(Ze instanceof te)Rr=Ze;else if(Ze instanceof Response){un=Ze;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!un){try{un=await j(Rr,_);}catch(vn){let Ze=vn;if(rr.length)for(let mr=rr.length-1;mr>=0;mr--){let fa=rr[mr];if(fa&&typeof fa=="object"&&typeof fa.onError=="function"){let Ct=await fa.onError({request:Rr,error:Ze,schemaPath:R,params:de,options:Fn,id:mn});if(Ct){if(Ct instanceof Response){Ze=void 0,un=Ct;break}if(Ct instanceof Error){Ze=Ct;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(Ze)throw Ze}if(rr.length)for(let vn=rr.length-1;vn>=0;vn--){let Ze=rr[vn];if(Ze&&typeof Ze=="object"&&typeof Ze.onResponse=="function"){let mr=await Ze.onResponse({request:Rr,response:un,schemaPath:R,params:de,options:Fn,id:mn});if(mr){if(!(mr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");un=mr;}}}}let an=un.headers.get("Content-Length");if(un.status===204||Rr.method==="HEAD"||an==="0"&&!un.headers.get("Transfer-Encoding")?.includes("chunked"))return un.ok?{data:void 0,response:un}:{error:void 0,response:un};if(un.ok)return {data:await(async()=>{if(Re==="stream")return un.body;if(Re==="json"&&!an){let Ze=await un.text();return Ze?JSON.parse(Ze):void 0}return await un[Re]()})(),response:un};let yr=await un.text();try{yr=JSON.parse(yr);}catch{}return {error:yr,response:un}}return {request(R,I,C){return E(I,{...C,method:R.toUpperCase()})},GET(R,I){return E(R,{...I,method:"GET"})},PUT(R,I){return E(R,{...I,method:"PUT"})},POST(R,I){return E(R,{...I,method:"POST"})},DELETE(R,I){return E(R,{...I,method:"DELETE"})},OPTIONS(R,I){return E(R,{...I,method:"OPTIONS"})},HEAD(R,I){return E(R,{...I,method:"HEAD"})},PATCH(R,I){return E(R,{...I,method:"PATCH"})},TRACE(R,I){return E(R,{...I,method:"TRACE"})},use(...R){for(let I of R)if(I){if(typeof I!="object"||!("onRequest"in I||"onResponse"in I||"onError"in I))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");P.push(I);}},eject(...R){for(let I of R){let C=P.indexOf(I);C!==-1&&P.splice(C,1);}}}}function Bu(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 CS(t,e,n){if(!e||typeof e!="object")return "";let r=[],a={simple:",",label:".",matrix:";"}[n.style]||"&";if(n.style!=="deepObject"&&n.explode===false){for(let u in e)r.push(u,n.allowReserved===true?e[u]:encodeURIComponent(e[u]));let s=r.join(",");switch(n.style){case "form":return `${t}=${s}`;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return s}}for(let s in e){let u=n.style==="deepObject"?`${t}[${s}]`:s;r.push(Bu(u,e[s],n));}let i=r.join(a);return n.style==="label"||n.style==="matrix"?`${a}${i}`:i}function ES(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let i={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",s=(n.allowReserved===true?e:e.map(u=>encodeURIComponent(u))).join(i);switch(n.style){case "simple":return s;case "label":return `.${s}`;case "matrix":return `;${t}=${s}`;default:return `${t}=${s}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",a=[];for(let i of e)n.style==="simple"||n.style==="label"?a.push(n.allowReserved===true?i:encodeURIComponent(i)):a.push(Bu(t,i,n));return n.style==="label"||n.style==="matrix"?`${r}${a.join(r)}`:a.join(r)}function SS(t){return function(n){let r=[];if(n&&typeof n=="object")for(let a in n){let i=n[a];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;r.push(ES(a,i,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof i=="object"){r.push(CS(a,i,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Bu(a,i,t));}}return r.join("&")}}function D1(t,e){let n=t;for(let r of t.match(j1)??[]){let a=r.substring(1,r.length-1),i=false,s="simple";if(a.endsWith("*")&&(i=true,a=a.substring(0,a.length-1)),a.startsWith(".")?(s="label",a=a.substring(1)):a.startsWith(";")&&(s="matrix",a=a.substring(1)),!e||e[a]===void 0||e[a]===null)continue;let u=e[a];if(Array.isArray(u)){n=n.replace(r,ES(a,u,{style:s,explode:i}));continue}if(typeof u=="object"){n=n.replace(r,CS(a,u,{style:s,explode:i}));continue}if(s==="matrix"){n=n.replace(r,`;${Bu(a,u)}`);continue}n=n.replace(r,s==="label"?`.${encodeURIComponent(u)}`:encodeURIComponent(u));}return n}function U1(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 M1(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 PS(...t){let e=new Headers;for(let n of t){if(!n||typeof n!="object")continue;let r=n instanceof Headers?n.entries():Object.entries(n);for(let[a,i]of r)if(i===null)e.delete(a);else if(Array.isArray(i))for(let s of i)e.append(a,s);else i!==void 0&&e.set(a,i);}return e}function TS(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function F1(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),IS({baseUrl:t.baseUrl,headers:e})}var Sh=class extends Error{constructor(n,r){super(r);k(this,"status",n);this.name="ApiError";}};var Ph=class extends i_{constructor(n){let{exportedConfig:r,environmentId:a,...i}=n,s=Pi(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:a??"default"});if(!s)throw new Error("BrowserRuntime requires exportedConfig");let u=Gi(n.storage),_=new Om({storage:u,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...i,exportedConfig:s,storage:u,impressionStore:_});k(this,"_hydratePromise");let T=n.autoHydrate??true;this._hydratePromise=T?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function L1(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 RS(t){return L1(t)/4294967296}function N1(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 kS(t,e,n){if(!t)return;let r=N1(n.variants);if(r.length===0)return;let{exposure:a}=n;if(a!==void 0&&(!(a>0)||a<1&&RS(`${t}:${e}:exposure`)>=a))return;let i=r.reduce((u,[,_])=>u+_,0),s=RS(`${t}:${e}:variant`)*i;for(let[u,_]of r)if(s-=_,s<0)return u;return r[r.length-1][0]}function V1(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let a={};for(let[i,s]of Object.entries(e)){let u=kS(r,i,s);u!==void 0&&(a[i]=u);}return {assignments:a}}}}var B1=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function z1(t){let e={};for(let[n,r]of Object.entries(t.properties))e[B1.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 Th=class{constructor(e){k(this,"name");k(this,"handler");k(this,"transform");k(this,"filterSet");this.name=e.name??"analytics",this.handler=e.handler,this.transform=e.transform,this.filterSet=e.filter?new Set(e.filter):void 0;}consume(e){for(let n of e){if(this.filterSet&&!this.filterSet.has(n.type))continue;let r=n.type,a=z1(n);if(this.transform){let i=this.transform(r,a);if(i===null)continue;r=i.eventName,a=i.properties;}try{this.handler(r,a);}catch{}}}};function AS(t){let e=new Th(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function wS(t){let{posthog:e,filter:n,transform:r,name:a}=t;return AS({name:a??"posthog",filter:n,transform:r,handler:(i,s)=>{e.capture(i,s);}})}function K1(t){let{posthog:e,filter:n,transform:r,name:a,syncIdentity:i=false,syncAccountGroup:s=false,mirrorNavigation:u=false}=t,_=a??"posthog",T=wS({posthog:e,filter:n,transform:r,name:_}),P=null,E=null,R=I=>{try{if(i){let C=I.user_id;C&&C!==P?(e.identify?.(C,I.identity.traits),P=C):!C&&P!==null&&(e.reset?.(),P=null);}if(s){let C=I.identity.traits.account_id;typeof C=="string"&&C&&C!==E&&(e.group?.("account",C),E=C);}u&&I.type==="page_view"&&e.capture("$pageview",{$current_url:I.url});}catch{}};return {domain:"events",async resolve(){let C=(await T.resolve())?.consumers??[];return {consumers:[{name:_,consume(te){for(let G of te)R(G);for(let G of C)G.consume(te);}}]}}}}var $1=["banner_placement"],H1=["banner_placement","in_page_card"],G1=["toast_message"],Y1=["modal_overlay"];var W1=["banner_placement","in_page_card","usage_counter","button"],Z1=["modal_overlay","inline_gate_message"],Q1=["toast_message","modal_overlay","banner_placement"];function J1(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var zu=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);k(this,"status",n);k(this,"requestId",r);this.name="RevTurbineClientSessionError";}},Ku=class{constructor(e){k(this,"tenantId");k(this,"apiKey");k(this,"endpoint");k(this,"defaultTtlSeconds");k(this,"fetchFn");this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.endpoint=e.endpoint.replace(/\/$/,""),this.defaultTtlSeconds=e.defaultTtlSeconds??60,this.fetchFn=e.fetch??globalThis.fetch;}get clientSessions(){return {create:e=>this.createClientSession(e)}}async createClientSession(e){let n=J1(),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 zu(r.status,n);let a=await r.json();return {client_token:a.client_token,expires_at:a.expires_at}}async apiCall(e,n,r){return this.fetchFn(`${this.endpoint}${n}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify(r)})}async apiGet(e,n){return this.fetchFn(`${this.endpoint}${n}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}};var eq=/^[a-z0-9._]{1,100}$/,ms={Persisted:"persisted",Transient:"transient"},bi={Internal:"internal",External:"external"},Ja={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},tq="readOnly";function ga(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[tq]===true||(e[n]=r);}return z$1.object(e)}function Hr(t){let e=ga(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(eq)}):e}var {Unrestricted:ia}=Ja,{Transient:sa,Persisted:rq}=ms,{Internal:Vs,External:Li}=bi;z$1.object({page:z$1.coerce.number().int().min(1).default(1).meta(ia),per_page:z$1.coerce.number().int().min(1).max(100).default(25).meta(ia)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li});var Un=z$1.object({created_at:z$1.string().datetime().meta({...ia,readOnly:true}),updated_at:z$1.string().datetime().meta({...ia,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li}),kn=z$1.object({id:z$1.string().min(1).meta({...ia,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li}),Mn=z$1.object({tenant_id:z$1.string().min(1,"tenant_id is required").meta({...ia,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Vs});z$1.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li});var Ch=z$1.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":sa,"x-revturbine-schema-exposure":Li}),OS=["allowed","limited","denied"];z$1.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li});var $u=z$1.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li}),qS=z$1.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Li});z$1.union([z$1.boolean(),z$1.number(),z$1.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Vs});var Ni=z$1.string().min(1).max(200),fr=z$1.string().min(1).max(100),Hu=z$1.string().max(500).optional(),xa=z$1.record(z$1.string(),z$1.unknown()).default({}),Bs=z$1.number().int().min(10).max(100).multipleOf(10),Gu=z$1.string().datetime().nullable().default(null),lr=z$1.object({environment_id:z$1.string().min(1).default("production").meta({...ia,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Vs}),_r=z$1.object({playbook_version_id:z$1.string().nullable().default(null).meta(ia),is_current:z$1.boolean().default(true).meta({...ia,readOnly:true}),is_deleted:z$1.boolean().default(false).meta({...ia,readOnly:true}),delete_date:z$1.string().datetime().nullable().default(null).meta({...ia,readOnly:true}),sequence:z$1.number().int().min(1).default(1).meta({...ia,readOnly:true}),base_sequence:z$1.number().int().nullable().default(null).meta({...ia,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Vs}),aq=kn.merge(Un).merge(Mn).merge(lr).extend({handle:fr.meta({...ia,readOnly:true}),active:z$1.boolean().default(true).meta({...ia,readOnly:true})});function Gr(t){return aq.meta({id:t,"x-revturbine-schema-persistence":rq,"x-revturbine-schema-exposure":Vs})}z$1.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":sa,"x-revturbine-schema-exposure":Vs});z$1.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":sa,"x-revturbine-schema-exposure":Vs});var DS=z$1.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":sa,"x-revturbine-schema-exposure":Li});new Set(Ch.options);var US=z$1.enum(["session","day","week","month"]),MS=z$1.object({kind:z$1.enum(["template","slot"]),id:z$1.string(),label:z$1.string().optional()});z$1.object({id:z$1.string(),group:z$1.array(MS),cap:z$1.object({count:z$1.number().int().min(1),period:US})});z$1.object({target_plan_ids:z$1.array(z$1.string()).default([]),target_billing_periods:z$1.array(z$1.string()).default([]),category:z$1.string().optional()});var LS={Named:"named",Minted:"minted"},NS="x-revturbine-schema-identity";function Xa(t="handle"){return {[NS]:{kind:LS.Named,handleField:t}}}function ei(t="handle"){return {[NS]:{kind:LS.Minted,handleField:t}}}var fn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ma={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},mq="x-revturbine-context",uq="x-revturbine-in-config",dq="x-revturbine-sdk-input",pq="x-revturbine-source",gq="x-revturbine-deprecation",hq={[fn.Playbook]:Ma.Customer,[fn.Branding]:Ma.Customer,[fn.Billing]:Ma.Stripe,[fn.Metering]:Ma.Customer,[fn.CustomerOperations]:Ma.Runtime,[fn.EventIngestion]:Ma.Runtime};function Hn(t,e){return {[mq]:t,[uq]:e.inConfig??t===fn.Playbook,[dq]:e.sdkInput,[pq]:e.source??hq[t]}}function Yu(t){return {deprecated:true,[gq]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var nn=t=>z$1.object({items:z$1.array(t)}),er=z$1.object({error:z$1.string(),code:z$1.string(),request_id:z$1.string()}),q=t=>t,rn=z$1.object({page:z$1.number().int().min(1).default(1).optional(),per_page:z$1.number().int().min(1).max(100).default(25).optional(),sort:z$1.string().optional(),order:z$1.enum(["asc","desc"]).default("asc").optional(),include_deleted:z$1.boolean().default(false).optional()});var {Unrestricted:Ne}=Ja,{Persisted:Wu,Transient:us}=ms,{External:La}=bi,KS=Hn(fn.Playbook,{sdkInput:true});Hn(fn.Playbook,{inConfig:false,sdkInput:false});var Rq=Hn(fn.Playbook,{inConfig:false,sdkInput:true}),kq=Hn(fn.Playbook,{inConfig:false,sdkInput:false,source:Ma.Runtime}),Aq=z$1.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var $S=z$1.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),HS=z$1.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),wq=z$1.object({count:z$1.number().int().positive().meta(Ne),period:HS.meta(Ne)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La});z$1.object({surface_type:z$1.string().min(1).meta(Ne),rules:z$1.array(wq).meta(Ne),cooldown_ms:z$1.number().int().nonnegative().optional().meta(Ne)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":La,...Ja.Operational,...Rq});var jq=z$1.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),dl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ne,readOnly:true}),name:Ni.meta(Ne),handle:fr.meta(Ne),description:Hu.meta(Ne),category:$S.meta(Ne),drag_order_in_category:z$1.number().int().default(0).meta(Ne),surface_slot_id:z$1.string().optional().meta(Ne),entitlement_id:z$1.string().optional().meta(Ne),tier_threshold:z$1.string().optional().meta(Ne),threshold_percent:Bs.optional().meta(Ne),trial_type:z$1.enum(["free","reverse"]).optional().meta(Ne),trigger_type:z$1.string().optional().meta(Ne),trial_progress_percent:z$1.number().min(0).max(100).optional().meta(Ne),days_before_end:z$1.number().int().min(0).optional().meta(Ne),qualifier:Aq.optional().meta(Ne),activation_window_start:z$1.string().datetime().optional().meta(Ne),activation_window_end:z$1.string().datetime().optional().meta(Ne),metadata:xa.meta(Ne)}).meta({id:"Placement","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":La,...KS,...Xa()}),Oq=Gr("PlacementAnchor"),qq=z$1.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),Dq=z$1.object({code:qq.meta(Ne),message:z$1.string().min(1).meta(Ne),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(Ne)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),VS=dl.extend({warnings:z$1.array(Dq).optional().meta(Ne)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),Uq=z$1.object({label:z$1.string().min(1).max(200).meta(Ne),cta_path_type:jq.meta(Ne),config_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ne)}).meta({id:"CtaObject","x-revturbine-schema-persistence":us,"x-revturbine-schema-exposure":La}),Jc=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ne,readOnly:true}),handle:fr.meta({...Ne,readOnly:true}),placement_id:z$1.string().min(1).meta(Ne),drag_order:z$1.number().int().default(0).meta(Ne),target_plan_ids:z$1.array(z$1.string()).default([]).meta(Ne),target_plan_billing_cadences:z$1.array(z$1.string()).default([]).meta(Ne),target_segments:z$1.array(z$1.string()).default([]).meta(Ne),surface_slot_ids:z$1.array(z$1.string()).default([]).meta(Ne),surface_template_id:z$1.string().min(1).meta(Ne),content_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ne),cta_list:z$1.array(Uq).default([]).meta(Ne),max_per_period:z$1.number().int().min(0).nullable().default(null).meta(Ne),max_period_unit:HS.default("session").meta(Ne),cooldown_after_dismiss_days:z$1.number().int().min(0).default(7).meta(Ne),remind_later_minutes:z$1.number().int().min(0).nullable().default(null).meta(Ne),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ne),recommendation_plan_override:z$1.string().optional().meta(Ne)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":La,...KS,...ei()}),Mq=Gr("PlacementPayloadAnchor"),Fq=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({surface_slot_handle:z$1.string().min(1).max(200).meta(Ne),surface_type:Ch.meta(Ne),surface_template_ids:z$1.array(z$1.string()).default([]).meta(Ne),surface_slot_category:z$1.enum(["fixed","gated","triggered"]).default("fixed").meta(Ne),first_seen:z$1.string().datetime().meta({...Ne,readOnly:true}),last_seen:z$1.string().datetime().meta({...Ne,readOnly:true}),status:z$1.enum(["active","inactive","new"]).default("new").meta(Ne),placement_count:z$1.number().int().min(0).default(0).meta({...Ne,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Wu,"x-revturbine-schema-exposure":La,...kq,...Xa("surface_slot_handle")}),Lq=ga(dl),Nq=ga(Jc);({"/api/placement-anchors":{get:q({operationId:"listPlacementAnchors",requestParams:{query:rn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:nn(Oq)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:q({operationId:"listPlacements",requestParams:{query:rn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:nn(dl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:q({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:VS}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:q({operationId:"getPlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:q({operationId:"updatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Lq}}},responses:{200:{description:"Updated",content:{"application/json":{schema:VS}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:q({operationId:"deletePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:q({operationId:"duplicatePlacement",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:q({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({category:$S,ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:q({operationId:"listPlacementPayloadAnchors",requestParams:{query:rn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:nn(Mq)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:q({operationId:"listPlacementPayloads",requestParams:{path:z$1.object({placementId:z$1.string()}),query:rn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:nn(Jc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:q({operationId:"createPlacementPayload",requestParams:{path:z$1.object({placementId:z$1.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Jc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Jc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:q({operationId:"updatePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Nq}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Jc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:q({operationId:"deletePlacementPayload",requestParams:{path:z$1.object({payloadId:z$1.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:q({operationId:"listSurfaceSlots",requestParams:{query:rn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:nn(Fq)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var Hq="__self__",Gq={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},GS={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:Hq,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:Gq},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 YS=z$1.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z$1.object({stages:z$1.array(YS).default([]),days_before_end:z$1.number().int().min(0).max(365).nullable().default(null),trial_type:z$1.enum(["free","reverse"]).nullable().default(null)});z$1.object({threshold_percent:z$1.number().int().min(0).max(100),trial_type:z$1.enum(["free","reverse"]).nullable().default(null)});var {Unrestricted:Ie}=Ja,{Persisted:Dh,Transient:ha}=ms,{Internal:QS,External:oa}=bi,JS=Hn(fn.Playbook,{sdkInput:true}),Qq=Hn(fn.Playbook,{inConfig:false,sdkInput:false}),XS=z$1.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":ha,"x-revturbine-schema-exposure":oa}),Ju=z$1.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),Jq=z$1.enum(OS).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),Xq=z$1.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),eP=z$1.enum(["hard_block","block_with_upsell","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),Rh=z$1.object({entitlement_id:z$1.string().min(1).meta(Ie),entitlement_handle:z$1.string().min(1).meta(Ie),status:Jq.meta(Ie),limit:z$1.number().optional().meta(Ie),used:z$1.number().optional().meta(Ie),allocation:Ju.optional().meta(Ie),enforcement:eP.optional().meta(Ie),source:Xq.optional().meta(Ie),plan_id:z$1.string().optional().meta(Ie),segment_id:z$1.string().optional().meta(Ie),seat_type_id:z$1.string().optional().meta(Ie),rule_id:z$1.string().optional().meta(Ie)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa,...Ja.Operational});z$1.object({account:z$1.record(z$1.string(),Rh).optional().meta(Ie),instance:z$1.record(z$1.string(),Rh).optional().meta(Ie),user:z$1.record(z$1.string(),Rh).optional().meta(Ie)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa,...Ja.Operational});var eD=z$1.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),tD=z$1.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),tP=z$1.object({kind:tD.meta(Ie),id:z$1.string().min(1).meta(Ie)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),nD=z$1.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),yl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ie,readOnly:true}),name:Ni.meta(Ie),handle:fr.meta(Ie),customer_facing_description:z$1.string().max(500).optional().meta(Ie),type:$u.meta(Ie),unit:z$1.string().max(100).optional().meta(Ie),period_scope:XS.optional().meta(Ie),allocation:Ju.optional().meta(Ie),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(Ie),sort_order:z$1.number().int().default(0).meta(Ie),metadata:xa.meta(Ie)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Dh,"x-revturbine-schema-exposure":oa,...JS,...Xa()}),rD=Gr("EntitlementAnchor"),Il=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ie,readOnly:true}),handle:fr.meta({...Ie,readOnly:true}),entitlement_id:z$1.string().min(1).meta(Ie),targets:z$1.array(tP).min(1).meta(Ie),segment_ids:z$1.array(z$1.string()).default([]).meta(Ie),visibility:eD.default("public").meta(Ie),period_scope:XS.optional().meta(Ie),instance:z$1.string().max(100).optional().meta(Ie),reset_period:nD.optional().meta(Ie),limit_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(Ie),enforcement:eP.optional().meta(Ie),warning_threshold_percent:Bs.optional().meta(Ie),overage_price_ref:z$1.string().optional().meta(Ie),grace_period_hours:z$1.number().int().min(0).optional().meta(Ie),tier_value:z$1.string().optional().meta(Ie),rate_value:z$1.number().optional().meta(Ie),initial_grant:z$1.number().optional().meta(Ie),allowance_value:z$1.union([z$1.number(),z$1.literal("unlimited")]).optional().meta(Ie),rollover_enabled:z$1.boolean().optional().meta(Ie),max_balance:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().default(null).meta(Ie),seat_type_id:z$1.string().optional().meta(Ie),included_count:z$1.union([z$1.number().int(),z$1.literal("unlimited")]).optional().meta(Ie),at_limit_behavior:z$1.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Ie),stripe_metered_price_id:z$1.string().optional().meta(Ie),enabled:z$1.boolean().optional().meta(Ie),allocation:Ju.optional().meta(Ie),max_seats:z$1.union([z$1.number(),z$1.literal("unlimited")]).nullable().optional().meta(Ie),amount_cents:z$1.number().int().optional().meta(Ie),currency:z$1.string().optional().meta(Ie)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Dh,"x-revturbine-schema-exposure":QS,...JS,...ei()}),aD=Gr("EntitlementRuleAnchor");Il.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(i=>i.kind!=="plan_variation"&&i.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var iD=z$1.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),sD=z$1.object({code:iD.meta(Ie),message:z$1.string().min(1).meta(Ie),path:z$1.array(z$1.union([z$1.string(),z$1.number().int()])).optional().meta(Ie)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),kh=Il.extend({warnings:z$1.array(sD).optional().meta(Ie)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ha,"x-revturbine-schema-exposure":oa}),Ah=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({handle:fr.meta({...Ie,readOnly:true}),rule_id:z$1.string().min(1).meta(Ie),experiment_id:z$1.string().min(1).meta(Ie),variant_name:z$1.string().min(1).max(200).meta(Ie),is_control:z$1.boolean().default(false).meta(Ie),override_fields:z$1.record(z$1.string(),z$1.unknown()).default({}).meta(Ie)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Dh,"x-revturbine-schema-exposure":QS,...Qq,...ei()}),oD=ga(yl),lD=ga(Il);({"/api/entitlement-anchors":{get:q({operationId:"listEntitlementAnchors",requestParams:{query:rn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:nn(rD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:q({operationId:"listEntitlementRuleAnchors",requestParams:{query:rn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:nn(aD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:q({operationId:"listEntitlements",requestParams:{query:rn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:nn(yl)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:q({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(yl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:q({operationId:"getEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:q({operationId:"updateEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:oD}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yl}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:q({operationId:"deleteEntitlement",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:q({operationId:"listEntitlementRules",requestParams:{path:z$1.object({entitlementId:z$1.string()}),query:rn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:nn(Il)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:q({operationId:"createEntitlementRule",requestParams:{path:z$1.object({entitlementId:z$1.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Il)}}},responses:{201:{description:"Created",content:{"application/json":{schema:kh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:q({operationId:"updateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:lD}}},responses:{200:{description:"Updated",content:{"application/json":{schema:kh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:q({operationId:"deleteEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.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:q({operationId:"duplicateEntitlementRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:kh}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:q({operationId:"listEntitlementRuleVariants",requestParams:{path:z$1.object({ruleId:z$1.string()}),query:rn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:nn(Ah)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:q({operationId:"createEntitlementRuleVariant",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Hr(Ah)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ah}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:rt}=Ja,{Persisted:am,Transient:im}=ms,{Internal:Si}=bi,nP=Hn(fn.Playbook,{sdkInput:true}),rP=Hn(fn.Playbook,{inConfig:false,sdkInput:true}),cD=z$1.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Si}),Uh=z$1.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Si}),aP=z$1.object({name:Ni.meta(rt),handle:fr.meta(rt),plan_id:z$1.string().nullable().optional().meta(rt),segment_id:z$1.string().nullable().optional().meta(rt),trial_limit_type:Uh.default("time").meta(rt),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(rt),grace_period_days:z$1.number().int().min(0).default(0).meta(rt),usage_entitlement_handle:z$1.string().min(1).optional().meta(rt),usage_limit_value:z$1.number().int().min(1).optional().meta(rt),require_payment_method:z$1.boolean().default(false).meta(rt),auto_convert:z$1.boolean().default(true).meta(rt),convert_to_plan_id:z$1.string().optional().meta(rt),fallback_plan_id:z$1.string().optional().meta(rt),limit_per_customer:z$1.number().int().min(1).default(1).meta(rt),is_active:z$1.boolean().default(true).meta(rt),metadata:xa.meta(rt)}),pl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...rt,readOnly:true})}).merge(aP).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":Si,...nP,...Xa()}),mD=Gr("FreeTrialRuleAnchor"),uD=z$1.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Si}),iP=z$1.object({name:Ni.meta(rt),handle:fr.meta(rt),premium_plan_id:z$1.string().min(1).meta(rt),fallback_plan_id:z$1.string().min(1).meta(rt),segment_id:z$1.string().nullable().optional().meta(rt),trial_limit_type:Uh.default("time").meta(rt),duration_days:z$1.number().int().min(1).max(365).nullable().optional().meta(rt),usage_entitlement_handle:z$1.string().min(1).optional().meta(rt),usage_limit_value:z$1.number().int().min(1).optional().meta(rt),start_policy:uD.default("signup").meta(rt),show_upgrade_prompt_at_day:z$1.number().int().min(0).optional().meta(rt),entitlements_during_trial:z$1.array(z$1.string()).default([]).meta(rt),is_active:z$1.boolean().default(true).meta(rt),metadata:xa.meta(rt)}),gl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...rt,readOnly:true})}).merge(iP).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":Si,...nP,...Xa()}),dD=Gr("ReverseTrialRuleAnchor"),sP=z$1.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Si}),oP=z$1.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":im,"x-revturbine-schema-exposure":Si}),hl=kn.merge(Un).merge(Mn).extend({trial_limit_policy:sP.default("1_per_lifetime").meta(rt),eligibility_scope:oP.default("per_customer").meta(rt)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":Si,...rP}),fl=kn.merge(Un).merge(Mn).extend({trial_limit_policy:sP.default("1_per_lifetime").meta(rt),eligibility_scope:oP.default("per_customer").meta(rt)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":Si,...rP}),Zu=kn.merge(Un).merge(Mn).extend({customer_id:z$1.string().min(1).meta(rt),rule_id:z$1.string().min(1).meta(rt),rule_type:z$1.enum(["free_trial","reverse_trial"]).meta(rt),plan_id:z$1.string().min(1).meta(rt),status:cD.default("active").meta(rt),started_at:z$1.string().datetime().meta({...rt,readOnly:true}),expires_at:z$1.string().datetime().nullable().optional().meta(rt),trial_limit_type:Uh.default("time").meta(rt),usage_entitlement_handle:z$1.string().min(1).optional().meta(rt),usage_limit_value:z$1.number().int().min(1).optional().meta(rt),converted_at:Gu.meta(rt),cancelled_at:Gu.meta(rt),metadata:xa.meta(rt)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":am,"x-revturbine-schema-exposure":Si});({"/api/free-trial-rule-anchors":{get:q({operationId:"listFreeTrialRuleAnchors",requestParams:{query:rn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:nn(mD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:q({operationId:"listFreeTrialRules",requestParams:{query:rn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:nn(pl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:q({operationId:"getFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:pl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:q({operationId:"updateFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update free trial rule",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:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:q({operationId:"deleteFreeTrialRule",requestParams:{path:z$1.object({ruleId:z$1.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:q({operationId:"listReverseTrialRuleAnchors",requestParams:{query:rn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:nn(dD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:q({operationId:"listReverseTrialRules",requestParams:{query:rn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:nn(gl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:q({operationId:"getReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:gl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:q({operationId:"updateReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:gl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:gl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:q({operationId:"deleteReverseTrialRule",requestParams:{path:z$1.object({ruleId:z$1.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:q({operationId:"listFreeTrialSettings",requestParams:{query:rn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:nn(hl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:q({operationId:"getFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:q({operationId:"updateFreeTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:hl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:q({operationId:"listReverseTrialSettings",requestParams:{query:rn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:nn(fl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:q({operationId:"getReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:q({operationId:"updateReverseTrialSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:fl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:q({operationId:"listTrialInstances",requestParams:{query:rn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:nn(Zu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:q({operationId:"getTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Zu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:q({operationId:"cancelTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Zu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:q({operationId:"convertTrialInstance",requestParams:{path:z$1.object({instanceId:z$1.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({plan_id:z$1.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Zu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Ht,Financial:Qu}=Ja,{Persisted:sm,Transient:Xu}=ms,{External:Vi}=bi,pD=Hn(fn.Playbook,{sdkInput:true}),gD=Hn(fn.Playbook,{sdkInput:false}),Mh=Hn(fn.Billing,{sdkInput:false}),ps=z$1.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Xu,"x-revturbine-schema-exposure":Vi}),om=z$1.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Xu,"x-revturbine-schema-exposure":Vi}),ed=z$1.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Xu,"x-revturbine-schema-exposure":Vi}),vl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ht,readOnly:true}),name:Ni.meta(Ht),handle:fr.meta(Ht),tier_position:z$1.number().int().min(0).default(0).meta(Ht),sort_order:z$1.number().int().default(0).meta(Ht),visibility:ps.default("public").meta(Ht),metadata:xa.meta(Ht)}).meta({id:"Plan","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":Vi,...pD,...Xa()}),hD=Gr("PlanAnchor"),bl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ht,readOnly:true}),handle:fr.meta({...Ht,readOnly:true}),plan_id:z$1.string().min(1).meta(Ht),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(Ht),segment_id:z$1.string().nullable().default(null).meta(Ht),price_amount:z$1.number().min(0).meta(Qu),pricing_model:om.meta(Ht),visibility:ps.default("public").meta(Ht),stripe_price_id:z$1.string().optional().meta(Ht),price_source:ed.default("static").meta(Ht)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":Vi,...Mh,...ei()}),fD=Gr("PlanVariationAnchor"),xl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ht,readOnly:true}),name:Ni.meta(Ht),handle:fr.meta(Ht),sort_order:z$1.number().int().default(0).meta(Ht),visibility:ps.default("public").meta(Ht),metadata:xa.meta(Ht)}).meta({id:"AddOn","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":Vi,...gD,...Xa()}),_D=Gr("AddOnAnchor"),Sl=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...Ht,readOnly:true}),handle:fr.meta({...Ht,readOnly:true}),addon_id:z$1.string().min(1).meta(Ht),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(Ht),segment_id:z$1.string().nullable().default(null).meta(Ht),price_amount:z$1.number().min(0).meta(Qu),pricing_model:om.meta(Ht),visibility:ps.default("public").meta(Ht),stripe_price_id:z$1.string().optional().meta(Ht),price_source:ed.default("static").meta(Ht)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":Vi,...Mh,...ei()}),yD=Gr("AddOnVariationAnchor"),vD=z$1.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Xu,"x-revturbine-schema-exposure":Vi}),Pl=kn.merge(Un).merge(Mn).extend({stripe_price_id:z$1.string().min(1).meta(Ht),stripe_product_id:z$1.string().min(1).meta(Ht),billing_period:vD.meta(Ht),unit_amount_cents:z$1.number().int().min(0).nullable().default(null).meta(Qu),currency:qS.meta(Qu),pricing_model:om.meta(Ht),nickname:z$1.string().nullable().default(null).meta(Ht),is_mock:z$1.boolean().default(false).meta(Ht),last_updated_from_stripe:Gu.meta(Ht)}).meta({id:"StripePrice","x-revturbine-schema-persistence":sm,"x-revturbine-schema-exposure":Vi,...Mh}),bD=ga(vl),xD=ga(bl),SD=ga(xl),PD=ga(Sl),TD=ga(Pl);({"/api/plan-anchors":{get:q({operationId:"listPlanAnchors",requestParams:{query:rn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:nn(hD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:q({operationId:"listPlans",requestParams:{query:rn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:nn(vl)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:q({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(vl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:vl}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:q({operationId:"getPlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:vl}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:q({operationId:"updatePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:bD}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:vl}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:q({operationId:"deletePlan",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:q({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z$1.object({ids:z$1.array(z$1.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:q({operationId:"listPlanVariationAnchors",requestParams:{query:rn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:nn(fD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:q({operationId:"listPlanVariations",requestParams:{path:z$1.object({planId:z$1.string()}),query:rn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:nn(bl)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:q({operationId:"createPlanVariation",requestParams:{path:z$1.object({planId:z$1.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(bl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:bl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:q({operationId:"getPlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:bl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:q({operationId:"updatePlanVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:xD}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:bl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:q({operationId:"deletePlanVariation",requestParams:{path:z$1.object({variationId:z$1.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:q({operationId:"listAddOnAnchors",requestParams:{query:rn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:nn(_D)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:q({operationId:"listAddOns",requestParams:{query:rn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:nn(xl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:q({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(xl)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:q({operationId:"getAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:q({operationId:"updateAddOn",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:SD}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:q({operationId:"deleteAddOn",requestParams:{path:z$1.object({addonId:z$1.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:q({operationId:"listAddOnVariationAnchors",requestParams:{query:rn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:nn(yD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:q({operationId:"listAddOnVariations",requestParams:{path:z$1.object({addonId:z$1.string()}),query:rn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:nn(Sl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:q({operationId:"createAddOnVariation",requestParams:{path:z$1.object({addonId:z$1.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Sl)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Sl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:q({operationId:"getAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Sl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:q({operationId:"updateAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:PD}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Sl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:q({operationId:"deleteAddOnVariation",requestParams:{path:z$1.object({variationId:z$1.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:q({operationId:"listStripePrices",requestParams:{query:rn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:nn(Pl)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:q({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Hr(Pl)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:q({operationId:"getStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:q({operationId:"updateStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:TD}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Pl}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:q({operationId:"deleteStripePrice",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:h}=Ja,{Persisted:Cl,Transient:ot}=ms,{Internal:Na,External:Ot}=bi,It=Hn(fn.Playbook,{sdkInput:true}),Tl=Hn(fn.Playbook,{sdkInput:false}),ds=Hn(fn.Playbook,{inConfig:false,sdkInput:false}),lP=Hn(fn.Playbook,{inConfig:false,sdkInput:true}),_l=Hn(fn.Playbook,{inConfig:false,sdkInput:true,source:Ma.CodeConstant}),wh=Hn(fn.Playbook,{inConfig:false,sdkInput:true,source:Ma.Runtime}),jh=Hn(fn.Playbook,{inConfig:false,sdkInput:false,source:Ma.Runtime}),ID=Hn(fn.Billing,{sdkInput:false}),CD=Hn(fn.Metering,{sdkInput:false}),ED=Hn(fn.Branding,{inConfig:true,sdkInput:true}),RD=Hn(fn.Branding,{sdkInput:false}),kD="1.0.0",em=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...h,readOnly:true}),name:Ni.meta(h),handle:fr.meta(h),description:Hu.meta(h),is_default:z$1.boolean().default(false).meta(h),entitlement_ids:z$1.array(z$1.string()).default([]).meta(h),metadata:xa.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...ds,...Xa()}),AD=Gr("SeatTypeAnchor"),tm=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...h,readOnly:true}),handle:fr.meta(h),label:z$1.string().min(1).meta(h),description:z$1.string().nullable().default(null).meta(h),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z$1.string().nullable().default(null).meta(h),example_value:z$1.string().nullable().default(null).meta(h),value_map:z$1.record(z$1.string(),z$1.string()).default({}).meta(h),format:z$1.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(h),metadata:xa.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...ds,...Xa()}),wD=Gr("PersonalizationTokenAnchor"),jD=z$1.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),Oh=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({handle:fr.meta({...h,readOnly:true}),stripe_account_id:z$1.string().min(1).meta(h),live_mode:z$1.boolean().default(false).meta(h),onboarding_state:jD.default("not_started").meta({...h,readOnly:true}),onboarding_complete:z$1.boolean().default(false).meta({...h,readOnly:true}),charges_enabled:z$1.boolean().default(false).meta({...h,readOnly:true}),details_submitted:z$1.boolean().default(false).meta({...h,readOnly:true}),payouts_enabled:z$1.boolean().default(false).meta({...h,readOnly:true}),webhook_secret_set:z$1.boolean().default(false).meta({...h,readOnly:true}),sync_products:z$1.boolean().default(true).meta(h),sync_prices:z$1.boolean().default(true).meta(h),sync_subscriptions:z$1.boolean().default(true).meta(h),sync_invoices:z$1.boolean().default(false).meta(h),default_currency:z$1.string().length(3).default("USD").meta(h),tax_behavior:z$1.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(h),last_sync_at:z$1.string().optional().meta({...h,readOnly:true}),metadata:xa.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...ID,...ei()});z$1.object({theme:z$1.record(z$1.string(),z$1.unknown()).optional().meta(h),workspace_name:z$1.string().optional().meta(h),logo_url:z$1.string().optional().meta(h),support_email:z$1.string().optional().meta(h)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...RD});var nm=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({handle:fr.meta({...h,readOnly:true}),entitlement_id:z$1.string().min(1).meta(h),meter_key:z$1.string().min(1).max(100).meta(h),aggregation_type:z$1.enum(["sum","count","max","last_value"]).default("sum").meta(h),reset_period:z$1.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(h),stripe_meter_id:z$1.string().nullable().default(null).meta(h),is_active:z$1.boolean().default(true).meta(h),metadata:xa.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...CD,...ei()}),WS=z$1.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),rm=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...h,readOnly:true}),handle:fr.meta({...h,readOnly:true}),entitlement_id:z$1.string().min(1).meta(h),soft_limit_percent:z$1.number().min(0).max(100).default(80).meta(h),hard_limit_percent:z$1.number().min(0).max(100).default(100).meta(h),soft_limit_action:WS.default("warn").meta(h),hard_limit_action:WS.default("block").meta(h),grace_period_hours:z$1.number().int().min(0).default(0).meta(h),notification_channels:z$1.array(z$1.enum(["email","in_app","webhook"])).default(["in_app"]).meta(h),is_active:z$1.boolean().default(true).meta(h)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...lP,...ei()}),OD=Gr("UsageEnforcementSettingsAnchor"),qD=z$1.object({kind:z$1.enum(["template","slot"]).meta(h),id:z$1.string().min(1).meta(h),label:z$1.string().min(1).optional().meta(h)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),DD=z$1.object({id:z$1.string().min(1).meta(h),group:z$1.array(qD).min(1).meta(h),cap:z$1.object({count:z$1.number().int().min(1).meta(h),period:z$1.enum(["session","day","week","month"]).meta(h)}).meta(h)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),UD=z$1.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),cP=z$1.object({capRules:z$1.array(DD).default([]).meta(h),sessionCooldownMinutes:z$1.number().int().min(0).default(30).meta(h),remindLaterMinutes:z$1.number().int().min(0).default(60).meta(h),testMode:UD.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Na}),qh=kn.merge(Un).merge(Mn).merge(lr).merge(_r).extend({anchor_id:z$1.string().min(1).meta({...h,readOnly:true}),handle:fr.meta({...h,readOnly:true}),global_frequency_cap:cP.nullable().default(null).meta(h),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z$1.boolean().default(false).meta(h),suppress_for_trial:z$1.boolean().default(false).meta(h),allow_stacking:z$1.boolean().default(false).meta(h),priority_collision_strategy:z$1.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(h)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Cl,"x-revturbine-schema-exposure":Na,...lP,...ei()}),MD=Gr("PlacementSettingsAnchor"),FD=z$1.object({field:z$1.string().min(1).meta(h),operator:z$1.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(h),value:z$1.string().meta(h)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),LD=z$1.object({name:z$1.string().min(1).meta(h),handle:z$1.string().min(1).meta(h),predicates:z$1.array(FD).optional().meta(h),dimension_id:z$1.string().optional().meta(h),experiment_id:z$1.string().min(1).optional().meta(h)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),ND=z$1.object({unique_handle:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),tier_position:z$1.number().int().min(0).default(0).meta(h),sort_order:z$1.number().int().min(0).default(0).meta(h),visibility:ps.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),VD=z$1.object({unique_handle:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),sort_order:z$1.number().int().min(0).default(0).meta(h),visibility:ps.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...Tl}),BD=z$1.object({handle:z$1.string().min(1).meta(h),plan_handle:z$1.string().min(1).meta(h),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z$1.string().nullable().default(null).meta(h),price_amount:z$1.number().min(0).meta(h),pricing_model:om.meta(h),visibility:ps.default("public").meta(h),stripe_price_id:z$1.string().nullable().default(null).meta(h),price_source:ed.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...ds}),zD=z$1.object({handle:z$1.string().min(1).meta(h),addon_handle:z$1.string().min(1).meta(h),billing_period:z$1.enum(["monthly","annual","one_time","custom"]).meta(h),segment_handle:z$1.string().nullable().default(null).meta(h),price_amount:z$1.number().min(0).meta(h),pricing_model:om.meta(h),visibility:ps.default("public").meta(h),stripe_price_id:z$1.string().nullable().default(null).meta(h),price_source:ed.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...ds}),KD=z$1.object({handle:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),description:z$1.string().nullable().default(null).meta(h),is_default:z$1.boolean().default(false).meta(h),entitlement_handles:z$1.array(z$1.string()).default([]).meta(h)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),$D=z$1.object({handle:z$1.string().min(1).meta(h),entitlement_handle:z$1.string().nullable().default(null).meta(h),soft_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(h),hard_limit_percent:z$1.number().int().min(0).nullable().default(null).meta(h),soft_limit_action:z$1.string().meta(h),hard_limit_action:z$1.string().meta(h),grace_period_hours:z$1.number().int().min(0).nullable().default(null).meta(h),notification_channels:z$1.array(z$1.string()).default([]).meta(h),is_active:z$1.boolean().default(true).meta(h)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),HD=z$1.object({handle:z$1.string().min(1).meta(h),global_frequency_cap:cP.nullable().default(null).meta(h),global_frequency_cap_period:z$1.enum(["hour","day","week","month","session"]).nullable().default(null).meta(h),suppress_for_paid:z$1.boolean().default(false).meta(h),suppress_for_trial:z$1.boolean().default(false).meta(h),allow_stacking:z$1.boolean().default(false).meta(h),priority_collision_strategy:z$1.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),GD=z$1.object({handle:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),category:z$1.string().nullable().default(null).meta(h),visibility_toggle:z$1.boolean().default(true).meta(h),source_type:z$1.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),YD=z$1.object({handle:z$1.string().min(1).meta(h),entitlement_handle:z$1.string().min(1).meta(h),meter_handle:z$1.string().min(1).meta(h),limit:z$1.number().int().min(0).nullable().default(null).meta(h),reset_period:z$1.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),WD=z$1.object({unique_handle:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),type:$u.meta(h),unit:z$1.string().optional().meta(h),tier_definitions:z$1.array(z$1.object({name:z$1.string(),handle:z$1.string(),description:z$1.string().optional()})).optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),ZD=z$1.object({id:z$1.string().min(1).meta(h),entitlement_id:z$1.string().min(1).meta(h),targets:z$1.array(tP).min(1).meta(h),segment_ids:z$1.array(z$1.string()).default([]).meta(h),kind:$u.optional().meta({...h,readOnly:true}),unit:z$1.string().optional().meta({...h,readOnly:true}),tier_name:z$1.string().optional().meta({...h,readOnly:true}),tier_description:z$1.string().optional().meta({...h,readOnly:true}),...Il.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$1.number().default(0).meta(h),allocation:Ju.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),QD=z$1.object({slot_id:z$1.string().min(1).meta(h),active:z$1.boolean().meta(h),triggers:z$1.array(z$1.string()).meta(h)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),JD=z$1.object({id:z$1.string().min(1).meta(h),label:z$1.string().min(1).meta(h),description:z$1.string().meta(h),surface_type:z$1.string().meta(h),placement_handle:z$1.string().min(1).meta(h),template:z$1.string().optional().meta(h)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),XD=z$1.object({name:z$1.string().min(1).meta(h),type:z$1.string().optional().meta(h),required:z$1.boolean().optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),eU=z$1.object({id:z$1.string().min(1).meta(h),surface_type:z$1.string().meta(h),fields:z$1.array(XD).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),tU=z$1.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":ot,"x-revturbine-schema-exposure":Ot}),nU=z$1.object({name:z$1.string().min(1).meta(h),action_type:tU.meta(h),plan_handle:z$1.string().optional().meta(h),promotion_id:z$1.string().optional().meta(h),placement_handle:z$1.string().optional().meta(h),url:z$1.string().optional().meta(h),tour_id:z$1.string().optional().meta(h),target_billing_period:z$1.enum(["monthly","annual"]).optional().meta(h),description:z$1.string().optional().meta(h)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),rU=z$1.object({id:z$1.string().meta(h),name:z$1.string().meta(h),discount:z$1.string().meta(h),type:z$1.string().meta(h),status:z$1.string().meta(h)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),aU=z$1.object({token:z$1.string().regex(/^[a-z][a-z0-9_]*$/).meta(h),label:z$1.string().min(1).meta(h),description:z$1.string().optional().meta(h),category:z$1.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(h),data_source:z$1.string().optional().meta(h),example_value:z$1.string().optional().meta(h),value_map:z$1.record(z$1.string(),z$1.string()).optional().meta(h),format:z$1.enum(["string","number","currency","percentage","date"]).optional().meta(h)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),ZS=z$1.object({header:z$1.string().optional().meta(h),body:z$1.string().optional().meta(h),cta_label:z$1.string().optional().meta(h),secondary_cta_label:z$1.string().optional().meta(h)}).catchall(z$1.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),iU=z$1.object({block_id:z$1.string().min(1).meta(h),tenant_id:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),surface_template_id:z$1.string().optional().meta(h),default_content:ZS.meta(h),segment_overrides:z$1.array(z$1.object({segment_value_id:z$1.string(),content:ZS})).optional().meta(h),child_blocks:z$1.array(z$1.object({slot:z$1.string(),block_id:z$1.string()})).optional().meta(h),tokens_used:z$1.array(z$1.string()).optional().meta(h),status:z$1.enum(["draft","active","archived"]).meta(h),created_at:z$1.string().datetime().meta({...h,readOnly:true}),updated_at:z$1.string().datetime().meta({...h,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),sU=z$1.object({label:z$1.string().meta(h),path:DS.meta(h),config:z$1.record(z$1.string(),z$1.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),mP=z$1.object({template_id:z$1.string().min(1).meta(h),fields:z$1.record(z$1.string(),z$1.string()).meta(h),ctas:z$1.array(sU).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),uP=z$1.object({plan_ids:z$1.array(z$1.string()).meta(h),billing_cadences:z$1.array(z$1.string()).optional().meta(h),segment_chips:z$1.array(z$1.string()).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),oU=z$1.object({count:z$1.number().int().min(1).meta(h),period:z$1.enum(["session","day","week","month","lifetime"]).meta(h)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),dP=z$1.object({max_per_period:oU.optional().meta(h),cooldown_days:z$1.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),lU=z$1.object({id:z$1.string().min(1).meta(h),target:uP.meta(h),surfaces:z$1.array(mP).meta(h),caps:dP.optional().meta(h),surface_slot_ids:z$1.array(z$1.string()).optional().meta(h),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(h),created_at:z$1.string().optional().meta({...h,readOnly:true}),recommendation_strategy:z$1.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(h),recommendation_plan_override:z$1.string().optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),cU=z$1.discriminatedUnion("type",[z$1.object({type:z$1.literal("surface_render"),slot_id:z$1.string().min(1)}),z$1.object({type:z$1.literal("entitlement_gate"),entitlement_handle:z$1.string().min(1),tier_threshold:z$1.string().optional()}),z$1.object({type:z$1.literal("usage_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:Bs}),z$1.object({type:z$1.literal("credit_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:Bs}),z$1.object({type:z$1.literal("seat_threshold"),entitlement_handle:z$1.string().min(1),threshold_percent:Bs}),z$1.object({type:z$1.literal("trial_started"),trial_type:z$1.enum(["free","reverse"]).optional()}),z$1.object({type:z$1.literal("trial_progress"),progress_percent:z$1.number().min(1).max(100)}),z$1.object({type:z$1.literal("trial_ending"),days_before_end:z$1.number().int().min(0)}),z$1.object({type:z$1.literal("trial_ended")}),z$1.object({type:z$1.literal("trial_converted")}),z$1.object({type:z$1.literal("qualifier"),qualifier:z$1.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),mU=z$1.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot}),uU=z$1.object({id:z$1.string().min(1).meta(h),name:z$1.string().min(1).meta(h),category:mU.meta(h),trigger:cU.meta(h),payloads:z$1.array(lU).meta(h),order:z$1.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),dU=z$1.object({payload_id:z$1.string().min(1).meta(h),placement_id:z$1.string().min(1).meta(h),target:uP.meta(h),caps:dP.optional().meta(h),remind_later_minutes:z$1.number().int().min(0).nullable().optional().meta(h),created_at:z$1.string().meta({...h,readOnly:true}),updated_at:z$1.string().datetime().optional().meta({...h,readOnly:true}),source_mode:z$1.enum(["inline","content_linked"]).meta(h),surfaces:z$1.array(mP).optional().meta(h),surface_slot_ids:z$1.array(z$1.string()).optional().meta(h),content_link:z$1.object({message_block_id:z$1.string().optional(),ui_path_id:z$1.string().optional(),promotion_id:z$1.string().optional(),content_payload_id:z$1.string().optional()}).optional().meta(h)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),pU=z$1.object({kind:z$1.string().min(1).meta(h),schema_version:z$1.number().int().nonnegative().meta(h),config:z$1.unknown().meta(h)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),gU=kn.merge(aP).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...ds}),hU=kn.merge(iP).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...ds}),fU=z$1.object({plans:z$1.array(ND).meta({...h,...It}),addons:z$1.array(VD).optional().meta({...h,...Tl}),entitlements:z$1.array(WD).meta({...h,...It}),entitlement_rules:z$1.array(ZD).meta({...h,...It}),segments:z$1.array(LD).meta({...h,...It}),content_ui_paths:z$1.array(nU).meta({...h,...It}),slot_configs:z$1.array(QD).optional().meta({...h,...It,...Yu({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$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())).optional().meta({...h,...It,...Yu({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$1.record(z$1.string(),z$1.unknown()).optional().meta({...h,...ED,...Yu({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$1.array(JD).optional().meta({...h,...It}),message_blocks:z$1.array(iU).optional().meta({...h,...It}),placement_payloads:z$1.array(dU).optional().meta({...h,...It}),placements:z$1.array(uU).optional().meta({...h,...It}),content_promotions:z$1.array(rU).optional().meta({...h,...It}),personalization_tokens:z$1.array(aU).optional().meta({...h,...It}),surface_templates:z$1.array(eU).optional().meta({...h,...It}),free_trial_rules:z$1.array(gU).optional().meta({...h,...Tl}),reverse_trial_rules:z$1.array(hU).optional().meta({...h,...Tl}),plan_variations:z$1.array(BD).optional().meta({...h,...Tl}),addon_variations:z$1.array(zD).optional().meta({...h,...Tl}),extension_rules:z$1.array(pU).optional().meta({...h,...It}),seat_types:z$1.array(KD).optional().meta({...h,...It}),enforcement_defaults:z$1.array($D).optional().meta({...h,...It}),placement_settings:z$1.array(HD).optional().meta({...h,...It}),segment_dimensions:z$1.array(GD).optional().meta({...h,...It}),meter_bindings:z$1.array(YD).optional().meta({...h,...It}),experiments:z$1.array(z$1.unknown()).max(0).optional().meta({...h,...ds}),signal_catalog:z$1.object({}).strict().optional().meta({...h,...ds})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It}),_U=z$1.object({artifact_type:z$1.literal("playbook").meta({...h,..._l,readOnly:true}),format_version:z$1.literal(kD).meta({...h,..._l,readOnly:true}),playbook_handle:z$1.string().min(1).default("default").meta({...h,..._l}),playbook_version_id:z$1.string().nullable().default(null).meta({...h,...wh,readOnly:true}),tenant_id:z$1.string().min(1).optional().meta({...h,...jh,readOnly:true}),environment_id:z$1.string().min(1).optional().meta({...h,...jh,readOnly:true}),project_id:z$1.string().min(1).optional().meta({...h,...jh,readOnly:true}),exported_at:z$1.string().datetime().optional().meta({...h,...wh,readOnly:true}),schema_version:z$1.string().min(1).optional().meta({...h,..._l,readOnly:true}),bundle_schema_version:z$1.number().int().nonnegative().optional().meta({...h,..._l,readOnly:true}),bundle_min_readable_schema_version:z$1.number().int().nonnegative().optional().meta({...h,..._l,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...wh}),pP=_U.extend(fU.shape).meta({"x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It});function yU(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function gP(t){if(!yU(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$1.preprocess(gP,pP).meta({id:"Playbook","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It});z$1.preprocess(gP,pP.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":ot,"x-revturbine-schema-exposure":Ot,...It});({"/api/seat-type-anchors":{get:q({operationId:"listSeatTypeAnchors",requestParams:{query:rn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:nn(AD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:q({operationId:"listSeatTypes",requestParams:{query:rn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:nn(em)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:q({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(em)}}},responses:{201:{description:"Created",content:{"application/json":{schema:em}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:q({operationId:"updateSeatType",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:em.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:em}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:q({operationId:"deleteSeatType",requestParams:{path:z$1.object({id:z$1.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:q({operationId:"listPersonalizationTokenAnchors",requestParams:{query:rn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:nn(wD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:q({operationId:"listPersonalizationTokens",requestParams:{query:rn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:nn(tm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:q({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(tm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:tm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:q({operationId:"updatePersonalizationToken",requestParams:{path:z$1.object({id:z$1.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:tm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:tm}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:q({operationId:"deletePersonalizationToken",requestParams:{path:z$1.object({id:z$1.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:q({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ga(Oh)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Oh}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:q({operationId:"listMeteringConfigs",requestParams:{query:rn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:nn(nm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:q({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(nm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nm}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:q({operationId:"updateMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:nm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nm}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:q({operationId:"deleteMeteringConfig",requestParams:{path:z$1.object({meteringId:z$1.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:q({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:rn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:nn(OD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:q({operationId:"listUsageEnforcementSettings",requestParams:{query:rn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:nn(rm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:q({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Hr(rm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:q({operationId:"updateUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:rm.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rm}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:q({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z$1.object({settingsId:z$1.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:q({operationId:"listPlacementSettingsAnchors",requestParams:{query:rn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:nn(MD)}}},default:{description:"Error response",content:{"application/json":{schema:er}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:q({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ga(qh)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:qh}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var bU=["web-client"],xU=z$1.enum(bU),SU=["method","meta","component"],PU=z$1.enum(SU),TU=["ts","python","java","csharp","rust"];z$1.enum(TU);var IU=z$1.object({ts:z$1.string().min(1).optional(),python:z$1.string().min(1).optional(),java:z$1.string().min(1).optional(),csharp:z$1.string().min(1).optional(),rust:z$1.string().min(1).optional()}).strict(),CU=z$1.object({canonical:z$1.string().min(1),aliases:z$1.array(z$1.string().min(1)),kind:PU,appliesTo:z$1.array(xU).min(1),composes:z$1.string().min(1).optional(),perLanguage:IU.optional(),description:z$1.string().min(1)}).strict().refine(t=>t.kind!=="meta"||t.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),EU=z$1.object({version:z$1.number().int().positive(),functions:z$1.array(CU).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let a of [r.canonical,...r.aliases]){let i=n.get(a);i!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${a}" (also on "${i}")`,path:["functions"]}),n.set(a,r.canonical);}});EU.parse({version:3,functions:[{canonical:"checkEntitlement",aliases:["can"],kind:"method",appliesTo:["web-client"],description:"Check whether the user is entitled to a feature/handle; returns the rich EntitlementResult (allowed, status, reason, limits, enforcement)."},{canonical:"gate",aliases:[],kind:"meta",appliesTo:["web-client"],composes:"checkEntitlement",description:"Gate an action behind an entitlement: checks the handle, runs fn when allowed, otherwise returns the entitlement so the caller can surface a paywall."},{canonical:"trackEvent",aliases:["track"],kind:"method",appliesTo:["web-client"],description:"Emit a product/analytics event powering frequency caps, attribution, and experiments."},{canonical:"updateUsage",aliases:["update"],kind:"method",appliesTo:["web-client"],description:"Patch customer-reported usage balances for client-side metering display (the advertised update({ usage }) verb)."},{canonical:"resetIdentity",aliases:["reset"],kind:"method",appliesTo:["web-client"],description:"Clear the current user and revert to the anonymous identity (e.g. on sign-out)."},{canonical:"identify",aliases:[],kind:"method",appliesTo:["web-client"],description:"Associate the session with a known user id and optional traits/context."},{canonical:"getPlacement",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a single placement decision for a surface."},{canonical:"getPlacementDecision",aliases:[],kind:"method",appliesTo:["web-client"],description:"Resolve a placement decision from an explicit decision input (headless)."},{canonical:"SurfaceSlotComponent",aliases:["Slot","RTSlot"],kind:"component",appliesTo:["web-client"],description:"React slot component that renders the resolved placement; advertised as <Slot> (<RTSlot> is the deprecated prior name)."},{canonical:"AccessGateSurfaceSlot",aliases:["Gate"],kind:"component",appliesTo:["web-client"],description:"React component that gates content behind an entitlement, rendering an upsell placement when denied; advertised as <Gate>."}]});var RU=[{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 kU(){let t=[];for(let[e,n]of Object.entries(GS))for(let[r,a]of Object.entries(n.fields)){let i=a.reference;if(i){if(!i.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${i.table} has no onDelete policy`);t.push({from:e,field:r,to:i.table,by:i.by,kind:i.kind,onDelete:i.onDelete,resolution:"playbook"});}}return t}function AU(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(AU([...kU(),...RU]));
|
|
2
|
+
export{Ph as BrowserRuntime,Ql as BrowserStorage,u_ as CONTROL_PLANE_EVENT_SOURCE,d_ as CONTROL_PLANE_SOURCE_KEY,Xf as CapEnforcer,Jd as DEFAULT_BRANDING,Qa as DEFAULT_THEME,vd as DecisionEngine,Wl as DomainProviderRegistry,Nu as EntitlementGate,$1 as FIXED_BANNER_TEMPLATE_IDS,W1 as FIXED_SURFACE_TEMPLATE_IDS,Z1 as GATED_SURFACE_TEMPLATE_IDS,H1 as GENERAL_BANNER_TEMPLATE_IDS,Y1 as GENERAL_MODAL_TEMPLATE_IDS,G1 as GENERAL_TOAST_TEMPLATE_IDS,po as InMemoryStorage,Jf as InteractionTracker,Q1 as MESSAGE_SURFACE_TEMPLATE_IDS,Lu as PlacementController,cl as PlacementTypeRegistry,vS as RECOGNIZED_UPDATE_KEYS,Sh as RevTurbineApiError,_h as RevTurbineCustomerSdk,Ku as RevTurbineServer,Wc as RuntimeMode,s_ as SERVER_TRAITS_DOMAIN,Vu as SdkSession,Zl as ServerUserContextProvider,Ll as applyValueMaps,kS as bucketSubject,np as buildControlPlaneEvent,k1 as clearPersistedTheme,AS as createAnalyticsProvider,V1 as createBasicExperimentProvider,MH as createChainedPlacementRequest,OH as createCustomEndpointRuntimeConfig,UH as createEntitlementPlacementRequest,bC as createHydrationProviders,r1 as createLocalRuntimeConfig,wS as createPostHogAnalyticsProvider,K1 as createPostHogIntegration,F1 as createRevTurbineApiClient,LH as createSemanticEvent,jH as createServerRuntimeConfig,DH as createSlotPlacementRequest,Tm as createStaticPlacementContentLookupProvider,Ws as createStaticPlacementResolver,vC as createStaticProviders,qH as createStrictLocalRuntimeConfig,FH as createTreatmentInteraction,wH as defineUiPathResolvers,cm as deriveLocalTrialStatusFromInstance,nd as deriveReverseTrialGrants,Qc as entitlementResultDenies,ql as evaluateSegments,mm as evaluateTrialStatus,Bh as findActiveTrialInstance,rd as findLatestStartedTrialInstance,$O as getDefaultRegistry,w1 as initRevTurbine,Fr as isBrowser,uo as isServer,xh as loadTheme,ml as mergeTheme,Nh as normalizeConfigArtifactOrThrow,KO as parsePromotion,zO as parseUiPath,HO as resetDefaultRegistry,Xd as resolveBranding,BO as resolveContent,Fu as resolveLocalPlaybook,Od as resolvePayloadForUser,Im as resolvePayloadForUserWithProvider,Gi as resolvePersistentStorage,rp as resolveSessionStorage,nS as resolveTokens};//# sourceMappingURL=headless.js.map
|
|
3
3
|
//# sourceMappingURL=headless.js.map
|