@revturbine/sdk 0.2.85 → 0.2.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/headless.d.ts +11 -97
- package/dist/headless.js +2 -2
- package/dist/headless.js.map +1 -1
- package/dist/index.d.ts +28 -145
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types/web-sdk/customer-side.d.ts.map +1 -1
- package/dist/types/web-sdk/headless.d.ts +0 -1
- package/dist/types/web-sdk/headless.d.ts.map +1 -1
- package/dist/types/web-sdk/react/RevTurbineProvider.d.ts +2 -30
- package/dist/types/web-sdk/react/RevTurbineProvider.d.ts.map +1 -1
- package/dist/types/web-sdk/react/useEntitlement.d.ts +12 -11
- package/dist/types/web-sdk/react/useEntitlement.d.ts.map +1 -1
- package/dist/types/web-sdk/react/usePlacement.d.ts +6 -12
- package/dist/types/web-sdk/react/usePlacement.d.ts.map +1 -1
- package/package.json +66 -70
- package/dist/server.d.ts +0 -5334
- package/dist/server.js +0 -3
- package/dist/server.js.map +0 -1
- package/dist/types/web-sdk/server/index.d.ts +0 -173
- package/dist/types/web-sdk/server/index.d.ts.map +0 -1
- package/dist/types/web-sdk/views.d.ts +0 -65
- package/dist/types/web-sdk/views.d.ts.map +0 -1
package/dist/headless.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {z}from'zod';var _I=Object.defineProperty;var bI=(n,e,t)=>e in n?_I(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var T=(n,e,t)=>bI(n,typeof e!="symbol"?e+"":e,t);function vI(){try{return "production"}catch{return}}function yI(){try{return typeof process<"u"}catch{return false}}function so(){let n=vI();if(n!==void 0)return n!=="production";if(yI())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var Ed="1.0.0",Pg=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],xI=["slot_configs","content_overrides"];function SI(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function II(n,e){if(!so())return;let t=xI.filter(r=>r in n);t.length!==0&&console.warn(`[RevTurbine] ${e} uses deprecated Playbook projection(s): ${t.join(", ")}. Move activation/triggers to local runtime state and content to Message Blocks/Placement Payloads.`);}function PI(n,e){for(let t of Pg)if(!Array.isArray(n[t]))throw new Error(`Invalid ${e}: missing array "${t}"`)}function TI(n){return n.artifact_type==="playbook"&&n.format_version===Ed&&typeof n.playbook_handle=="string"&&n.playbook_handle.length>0&&(n.playbook_version_id===null||typeof n.playbook_version_id=="string")&&typeof n.tenant_id=="string"&&n.tenant_id.length>0&&typeof n.environment_id=="string"&&n.environment_id.length>0&&Pg.every(e=>Array.isArray(n[e]))}function CI(n){return (n.project_id===void 0||typeof n.project_id=="string"&&n.project_id.length>0)&&(n.exported_at===void 0||typeof n.exported_at=="string")&&(n.schema_version===void 0||typeof n.schema_version=="string"&&n.schema_version.length>0)&&(n.bundle_schema_version===void 0||Number.isInteger(n.bundle_schema_version)&&Number(n.bundle_schema_version)>=0)}function Tg(n,e,t){if(n===void 0)return;if(!SI(n))throw new Error(`Invalid ${e}: expected top-level object`);II(n,e),PI(n,e);let r="artifact_type"in n||"format_version"in n;if(r&&n.artifact_type!=="playbook")throw new Error(`Invalid ${e}: unsupported "artifact_type"`);if(r&&n.format_version!==Ed)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(n.format_version)}`);if(!r&&n.version!==Ed)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(n.version)}`);let i=typeof n.tenant_id=="string"&&n.tenant_id.length>0?n.tenant_id:r?void 0:t?.tenantId,s=typeof n.environment_id=="string"&&n.environment_id.length>0?n.environment_id:r?void 0:t?.environmentId;if(!i)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!s)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(n.playbook_handle!==void 0&&(typeof n.playbook_handle!="string"||n.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!CI(n))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:a,change_set_id:o,...p}=n,b=r?n.playbook_version_id??null:o??null,l={...p,artifact_type:"playbook",format_version:Ed,playbook_handle:n.playbook_handle??"default",playbook_version_id:b,tenant_id:i,environment_id:s};if(!TI(l))throw new Error(`Invalid ${e}: malformed Playbook header`);return l}function ks(n,e,t){return Tg(n,e,t)}var Tm=864e5,kI=75;function Cg(n,e){return n==="converted"||n==="cancelled"?n:e&&n==="active"?"expired":n}function RI(n,e){return n==="expired"?"expired":n==="converted"?"converted":n==="cancelled"?"expired":n==="not_started"?"none":e>=kI?"running_out":"active"}function EI(n,e,t){let r=Math.max(0,e-n),i=Math.max(0,t-n),s=Math.max(0,e-t),a=Math.max(1,Math.round(r/Tm)),o=Math.min(a,Math.floor(i/Tm)),p=Math.max(0,Math.ceil(s/Tm)),b=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:t>=e,dayNumber:o,daysRemaining:p,daysTotal:a,progressPercent:b}}function wI(n,e){let t=Math.max(1,e),r=Math.max(0,n),i=Math.max(0,t-r),s=Math.min(100,Math.max(0,r/t*100));return {isExpiredByBounds:r>=t,usageConsumed:r,usageRemaining:i,usageLimit:t,progressPercent:s}}function wd(n){let{instance:e,rule:t,nowIso:r,basePlanHandle:i,usageBalances:s}=n,a=Date.parse(e.started_at),o=Date.parse(r);if(Number.isNaN(a)||Number.isNaN(o)||e.status==="not_started"||o<a)return;let p=e.trial_limit_type??"time",b=0,l=false,y,S,I,P,R,N;if(p==="usage"){let U=e.usage_entitlement_handle??(t&&"usage_entitlement_handle"in t?t.usage_entitlement_handle:void 0),Oe=e.usage_limit_value??(t&&"usage_limit_value"in t?t.usage_limit_value:void 0);if(typeof U!="string"||typeof Oe!="number"||Oe<1)return;let It=s?.[U]??0,Dn=wI(It,Oe);b=Dn.progressPercent,l=Dn.isExpiredByBounds,I=Dn.usageConsumed,P=Dn.usageRemaining,R=Dn.usageLimit,N=U;}else {let U=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(U))return;let Oe=EI(a,U,o);b=Oe.progressPercent,l=Oe.isExpiredByBounds,y=Oe.dayNumber,S=Oe.daysRemaining;}let Z=Cg(e.status,l),se=RI(Z,b),Pe;e.rule_type==="reverse_trial"?Pe=i:e.rule_type==="free_trial"&&t&&"plan_id"in t&&typeof t.plan_id=="string"&&(Pe=t.plan_id);let Y=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:Z==="active",trial_type:Y,...Pe!==void 0?{plan_handle:Pe}:{},state:se,trial_limit_type:p,progress_percent:b,...y!==void 0?{day_number:y}:{},...S!==void 0?{days_remaining:S}:{},...N!==void 0?{usage_entitlement_handle:N}:{},...I!==void 0?{usage_consumed:I}:{},...P!==void 0?{usage_remaining:P}:{},...R!==void 0?{usage_limit:R}:{}}}function kg(n,e,t){let r=Date.parse(e);if(Number.isNaN(r))return;let i,s=-1/0;for(let a of n){let o=Date.parse(a.started_at);if(Number.isNaN(o)||r<o)continue;let p=false;if((a.trial_limit_type??"time")==="usage")t&&typeof a.usage_entitlement_handle=="string"&&typeof a.usage_limit_value=="number"&&(p=(t[a.usage_entitlement_handle]??0)>=a.usage_limit_value);else if(a.expires_at){let l=Date.parse(a.expires_at);Number.isNaN(l)||(p=r>=l);}let b=Cg(a.status,p);b!=="active"&&b!=="converted"||o>s&&(i=a,s=o);}return i}function Cm(n,e){return n.rule_type!=="reverse_trial"||n.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 km(n,e){let t=Date.parse(e);if(Number.isNaN(t))return;let r,i=-1/0;for(let s of n){if(s.status!=="active"&&s.status!=="expired"&&s.status!=="converted")continue;let a=Date.parse(s.started_at);Number.isNaN(a)||t<a||a>i&&(r=s,i=a);}return r}function Ad(n){let{freeTrialRules:e,reverseTrialRules:t,instances:r,nowIso:i,usageBalances:s,basePlanHandle:a}=n,o=km(r,i);if(!o)return {trial:void 0,reverseGrants:null};if(o.rule_type==="reverse_trial"){let l=(t??[]).find(I=>I.id===o.rule_id),y=wd({instance:o,...l!==void 0?{rule:l}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),S=l!==void 0?Cm(o,l):null;return {trial:y,reverseGrants:S}}let p=(e??[]).find(l=>l.id===o.rule_id);return {trial:wd({instance:o,...p!==void 0?{rule:p}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),reverseGrants:null}}function Te(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function Nl(n){return Array.isArray(n)?n.filter(e=>e.trim().length>0):[]}function Kn(...n){for(let e of n)if(typeof e=="string"&&e.trim().length>0)return e}function vn(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=Number(n);return Number.isFinite(e)?e:null}return null}function ao(n){return n.trim().toLowerCase().replace(/\/+$/,"")||"/"}function Rm(n,e){return String(n||"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||`slot-${e??"unknown"}`}function Hl(n){let e=String(n||"").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 Em(n){if(!Te(n))return null;let e=Number(n.count),t=typeof n.period=="string"?n.period:"";return !Number.isFinite(e)||e<=0||t!=="session"&&t!=="day"&&t!=="week"&&t!=="month"&&t!=="lifetime"?null:{count:e,period:t}}function wm(n){let e=n.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function Rg(n){let e=n.trim().toLowerCase();return e?e==="starter"||e==="free"?["starter","free"]:e==="professional"||e==="pro"?["professional","pro"]:e==="enterprise"?["enterprise"]:[e]:[]}function Eg(n){let e=n,t=Te(e.target)?e.target:void 0,r=Array.isArray(t?.plan_ids)?t.plan_ids.filter(a=>typeof a=="string"):[];if(r.length>0)return r;let i=Te(n.content)?n.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(a=>typeof a=="string"):[]}function Am(n,e){let t=Eg(n);if(t.length===0||!e)return true;let r=Rg(e);return r.length===0?true:t.some(i=>{let s=i.toLowerCase();return r.some(a=>s===a||s.endsWith(`_${a}`)||s.includes(a))})}function Om(n,e){if(e.length===0)return null;let t=[...e].sort((i,s)=>i.tier_position!==s.tier_position?i.tier_position-s.tier_position:i.sort_order!==s.sort_order?i.sort_order-s.sort_order:i.source_id.localeCompare(s.source_id)),r=t.findIndex(i=>i.unique_handle===n);return r===-1||r===t.length-1?null:t[r+1].unique_handle}function oo(n){return n.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function jm(n){return n.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function Fm(n){return n==="minutes"||n==="minute"||n==="credits"||n==="credit"||n==="seats"||n==="seat"||n==="units"||n==="unit"}function Es(n){if(!n)return {};let e={};for(let[t,r]of Object.entries(n))Te(r)&&typeof r.amount=="number"?e[t]=r.amount:typeof r=="number"&&(e[t]=r);return e}function Ra(n,e){if(!n||!Array.isArray(n.plans))return;let t;if(typeof e=="string"&&e.trim().length>0?t=e.trim():Te(e)&&typeof e.id=="string"&&e.id.trim().length>0&&(t=e.id.trim()),!t)return;let r=t.toLowerCase();for(let i of n.plans){if(!Te(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let a=typeof i.name=="string"?i.name.trim():"";if(a.length>0)return a}}}function Od(n){let e=n;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function Ys(n){let e=String(n||"").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 zl(n){let e=n,t=Te(n.content)?n.content:{};return [vn(e.score),vn(e.ltv_propensity_score),vn(t.score),vn(t.ltv_propensity_score),vn(t.ranking_score)].find(i=>i!==null)??0}function jd(n){let e=n,t=Te(n.content)?n.content:{};return [vn(e.priority),vn(e.placement_priority),vn(t.priority),vn(t.placement_priority)].find(i=>i!==null)??0}function Lm(n){let e=Te(n.content)?n.content:{};return [vn(e.usage_percent),vn(e.trial_percent_elapsed),vn(e.threshold_percent)].find(r=>r!==null)??zl(n)}var AI=new Set(["trial_started","trial_ended","trial_converted"]),OI=new Set(["trial_progress","trial_ending"]);function Vm(n){let e=Te(n.content)?n.content:{},t=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(t&&AI.has(t))return 1;if(t&&OI.has(t))return 3;let r=[vn(e.usage_percent),vn(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function Kl(n){let e=n,t=Te(n.content)?n.content:{};return [vn(e.server_order),vn(e.order),vn(e.rank),vn(e.order_index),vn(t.server_order),vn(t.order),vn(t.rank),vn(t.order_index)].find(i=>i!==null)??null}function Um(n){let e=Te(n.content)?n.content:{},t=e.template_version;if(typeof t=="string"&&t.trim().length>0)return t.trim();let r=vn(t);if(r!==null)return String(r);let i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let s=vn(i);return s!==null?String(s):null}function Bm(n){let t=(Te(n.content)?n.content:{}).supersedes_template_version;if(Array.isArray(t))return t.map(i=>typeof i=="string"?i.trim():vn(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof t=="string"&&t.trim().length>0)return [t.trim()];let r=vn(t);return r!==null?[String(r)]:[]}function Rs(n){return n==null||typeof n!="object"?JSON.stringify(n):Array.isArray(n)?`[${n.map(t=>Rs(t)).join(",")}]`:`{${Object.entries(n).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>`${JSON.stringify(t)}:${Rs(r)}`).join(",")}}`}function qm(n){return Te(n)?{in_trial:typeof n.in_trial=="boolean"?n.in_trial:false,...typeof n.trial_type=="string"?{trial_type:n.trial_type}:{},...typeof n.plan_handle=="string"?{plan_handle:n.plan_handle}:{},...typeof n.day_number=="number"?{day_number:n.day_number}:{},...typeof n.days_remaining=="number"?{days_remaining:n.days_remaining}:{}}:{in_trial:false}}var FI=/^[a-z0-9._]{1,100}$/,Ws={Persisted:"persisted",Transient:"transient"},Qi={Internal:"internal",External:"external"},Li={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},LI="readOnly";function ni(n){let e={};for(let[t,r]of Object.entries(n.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[LI]===true||(e[t]=r);}return z.object(e)}function Ar(n){let e=ni(n),t=e.shape.handle;return t&&typeof t.regex=="function"?e.extend({handle:t.regex(FI)}):e}var {Unrestricted:Hr}=Li,{Transient:zr,Persisted:UI}=Ws,{Internal:Ea,External:ws}=Qi;z.object({page:z.coerce.number().int().min(1).default(1).meta(Hr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Hr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws});var En=z.object({created_at:z.string().datetime().meta({...Hr,readOnly:true}),updated_at:z.string().datetime().meta({...Hr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws}),xn=z.object({id:z.string().min(1).meta({...Hr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws}),wn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Hr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ea});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws});var Dm=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":zr,"x-revturbine-schema-exposure":ws}),Ag=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws});var Fd=z.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":ws}),Og=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":ws});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ea});var As=z.string().min(1).max(200),rr=z.string().min(1).max(100),Ld=z.string().max(500).optional(),pi=z.record(z.string(),z.unknown()).default({}),wa=z.number().int().min(10).max(100).multipleOf(10),Vd=z.string().datetime().nullable().default(null),Jn=z.object({environment_id:z.string().min(1).default("production").meta({...Hr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ea}),ir=z.object({playbook_version_id:z.string().nullable().default(null).meta(Hr),is_current:z.boolean().default(true).meta({...Hr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Hr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Hr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Hr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Hr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ea}),BI=xn.merge(En).merge(wn).merge(Jn).extend({handle:rr.meta({...Hr,readOnly:true}),active:z.boolean().default(true).meta({...Hr,readOnly:true})});function Or(n){return BI.meta({id:n,"x-revturbine-schema-persistence":UI,"x-revturbine-schema-exposure":Ea})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":zr,"x-revturbine-schema-exposure":Ea});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":zr,"x-revturbine-schema-exposure":Ea});var jg=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":zr,"x-revturbine-schema-exposure":ws}),qI=new Set(Dm.options);function Ud(n,e){if(!Te(n))return null;let t=typeof n.output_id=="string"?n.output_id:"";if(!t)return null;let r=Te(n.surface)?n.surface:{},i=qI.has(r.type)?r.type:"custom",s=Te(n.cta_path)?n.cta_path:Te(n.ui_path)?n.ui_path:{};return {output_id:t,category:typeof n.category=="string"?n.category:"unknown",surface:{...typeof r.template=="string"?{template:r.template}:{},type:i,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:Te(n.content)?n.content:{},...Te(n.promotion)?{promotion:n.promotion}:{},cta_path:s,ui_path:s,rule_id:typeof n.rule_id=="string"?n.rule_id:"",decision_id:typeof n.decision_id=="string"?n.decision_id:e(),config_version:typeof n.config_version=="string"?n.config_version:"unknown",present_upsell:typeof n.present_upsell=="boolean"?n.present_upsell:false}}var DI="__no_dim__";function Vg(n,e,t){if(n.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let s of n){let a=t(s)??DI,o=i.get(a)??[];o.push(s),i.set(a,o);}for(let s of i.values())if(!s.some(a=>r.has(a)))return false;return true}var MI=999999;function NI(n){return n==null||n==="unlimited"||n===MI}function Gl(n){return NI(n)?Number.POSITIVE_INFINITY:typeof n=="number"&&Number.isFinite(n)?n:void 0}function HI(n,e){switch(n.kind){case "plan":return e.currentPlanId!=null&&n.id===e.currentPlanId||e.currentPlanHandle!=null&&n.id===e.currentPlanHandle;case "plan_variation":return e.currentPlanVariationId!=null&&n.id===e.currentPlanVariationId;case "addon":return e.addonIds?.includes(n.id)??false;case "addon_variation":return e.addonVariationIds?.includes(n.id)??false;default:return false}}function Ug(n,e,t){return n.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(a=>HI(a,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),s=Vg(r.segmentIds,e.segmentIds,a=>t?.[a]);return {rule:r,matchesPlan:i,matchesSegment:s,matched:i&&s}})}function Bg(n){let e=n.fields??{};switch(n.kind){case "usage_limit":return Gl(e.limit_value)??0;case "credits":return Gl(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return Gl(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function qg(n,e){let t,r=Number.NEGATIVE_INFINITY;for(let i of n){let s=e(i);(t===void 0||s>r)&&(t=i,r=s);}return t}function zI(n){return qg(n,e=>Bg(e.rule))?.rule}function Mm(n,e,t){let r=n.entitlementRules[e];if(!r||r.length===0)return;let i=Ug(r,t,n.segmentDimensions);return zI(i.filter(s=>s.matched))}function KI(n){let e=n.segment_ids;if(Array.isArray(e))return e.filter(r=>typeof r=="string");let t=n.segment_id??n.segmentId;return typeof t=="string"&&t!=="all"?[t]:[]}function GI(n,e,t){let r=new Map;for(let i of t)typeof i.handle=="string"&&r.set(i.handle,typeof i.dimension_id=="string"?i.dimension_id:void 0);return Vg(KI(n),e,i=>r.get(i))}function Fg(n,e,t){if(!n)return {status:"allowed",allowed:true};switch(e){case "hard_block":return {status:"denied",allowed:false,reason:t};case "soft_block":return {status:"denied",allowed:false,reason:`${t}_soft_block`};case "degrade":return {status:"limited",allowed:true,reason:`${t}_degraded`};case "allow_overage":return {status:"allowed",allowed:true,reason:`${t}_overage`};default:return {status:"limited",allowed:false,reason:t}}}function $l(n){let{handle:e,context:t,exportedConfig:r,currentPlanHandle:i,segmentIds:s,usageBalances:a,userUsage:o,trialGrantedEntitlementHandles:p,effectivePlanHandle:b}=n,y=(r.entitlements??[]).find(rt=>typeof rt?.unique_handle=="string"&&rt.unique_handle===e),S=typeof y?.unique_handle=="string"?y.unique_handle:e,I=typeof y?.unique_handle=="string"?y.unique_handle:void 0,P=!!(p&&p.size>0&&(p.has(e)||p.has(S)||I!==void 0&&p.has(I)));if(P&&(b===void 0||b===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let N=String((P&&b?b:i)||"").toLowerCase(),se=(r.plans??[]).find(rt=>typeof rt.unique_handle=="string"&&rt.unique_handle.toLowerCase()===N),Pe=typeof se?.unique_handle=="string"?se.unique_handle:N||void 0,U=(r.entitlement_rules??[]).filter(rt=>{if((typeof rt.entitlement_id=="string"?rt.entitlement_id:typeof rt.entitlementId=="string"?rt.entitlementId:"")!==S)return false;let Mn=Array.isArray(rt.targets)?rt.targets.filter(ht=>Te(ht)&&ht.kind==="plan"&&typeof ht.id=="string").map(ht=>ht.id):Array.isArray(rt.plan_ids)?rt.plan_ids.filter(ht=>typeof ht=="string"):Array.isArray(rt.planIds)?rt.planIds.filter(ht=>typeof ht=="string"):[];return !(Pe!==void 0&&!Mn.includes(Pe)||!GI(rt,s,r.segments??[]))});if(U.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let Oe=(()=>{let rt=(r.entitlements??[]).find(yn=>yn.unique_handle===S);return rt&&typeof rt.type=="string"?rt.type:void 0})(),It=rt=>{let yn=Te(rt)?rt:{},ht={...Te(yn.type_fields)?yn.type_fields:Te(yn.typeFields)?yn.typeFields:{},...yn};return typeof ht.kind!="string"&&Oe&&(ht.kind=Oe),ht},Dn=qg(U,rt=>{let yn=It(rt);return Bg({kind:typeof yn.kind=="string"?yn.kind:"",fields:yn})})??U[0],W=It(Dn);typeof W.kind=="string"?W.kind:void 0;let Xt=rt=>{let yn=o?.[rt];if(Te(yn)&&typeof yn.amount=="number")return yn.amount},Jt=t?.used??(Number.isFinite(a[e])?a[e]:void 0)??(Number.isFinite(a[S])?a[S]:void 0)??Xt(e)??Xt(S)??0;return Bd(W,Jt)}function Lg(n,e,t){return {...n,limit:e,used:t,remaining:Math.max(0,e-t)}}function Dg(n){return n==="feature"||n==="usage_limit"||n==="limit"||n==="credits"||n==="capability_tier"}function Bd(n,e){let t=typeof n.kind=="string"?n.kind:void 0;if(t==="feature"){let r=n.enabled!==false;return {status:r?"allowed":"denied",allowed:r,reason:r?void 0:"feature_not_enabled_for_plan"}}if(t==="usage_limit"||t==="limit"){let r=Gl(n.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?Lg(Fg(e>=r,n.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(t==="credits"){let r=n.allowance_value!==void 0?n.allowance_value:n.allowance,i=r===void 0?void 0:Gl(r),s=Number(n.initial_grant),a=i!==void 0&&i>=0?i:Number.isFinite(s)&&s>=0?s:void 0;return a!==void 0&&Number.isFinite(a)?Lg(Fg(e>=a,n.enforcement,"credit_balance_exhausted"),a,e):{status:"allowed",allowed:true}}if(t==="capability_tier"){let r=typeof n.tier_name=="string"?n.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function Nm(n,e,t,r,i=80){let s=e.get(n);if(s)return s;if(t.get(n)?.status==="limited"&&Number.isFinite(r[n])){let o=Number(r[n]);if(o>0)return {limit:o,warningPercent:i}}return null}var $I=0;function ZI(){return `core_${Date.now()}_${++$I}`}function Mg(n,e,t){return {header:n,body:e,cta_label:t,title:n,cta:t}}var Hm=class{constructor(n){this.registry=n.registry,this.interactionTracker=n.interactionTracker,this.capEnforcer=n.capEnforcer,this.options=n.options??{},this.placements=n.placements??new Map,this.placementResolver=n.placementResolver;}async evaluate(n){let e=ZI(),t=this.placements.get(n.placementId);if(this.interactionTracker){let s=this.interactionTracker.checkSuppression(n.placementId,n.userId);if(s.suppressed)return {placementId:n.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Mg(`${t?.name??n.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let i={__providers:await this.registry.resolveAll()};if(n.traits&&(i.traits=n.traits),this.placementResolver){let s=await this.placementResolver(n,t,i);if(s.visible&&s.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let a=this.capEnforcer.enforce(s.output);if(!a.allowed)return {...s,visible:false,reasonCodes:[...s.reasonCodes,a.reason??"suppressed_by_cap"],suppressionReason:a.reason}}return s}return {placementId:n.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:Mg("No resolver","No placement resolver configured.","")}}async evaluateBatch(n){return Promise.all(n.map(e=>this.evaluate(e)))}async checkEntitlement(n,e){let t=await this.registry.resolveAll();return this.deriveEntitlementResult(n,t,e)}trackInteraction(n){this.interactionTracker?.track(n);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(n,e,t){let r=this.options.defaultEntitlementPolicy??"allow",i=e.entitlements;if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let s=i.entries[n];if(!s)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let a=i.usage?.[n];if(e.rules){let o=Mm(e.rules,n,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(o){let p={kind:o.kind,...o.fields};if(Dg(p.kind))return Bd(p,t?.used??a?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return a&&t?.used!==void 0&&a.limit>0&&t.used>=a.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:a.limit,used:t.used,remaining:Math.max(0,a.limit-t.used)}:{status:s.status,allowed:s.status==="allowed",reason:s.reason,limit:a?.limit,used:a?.used,remaining:a?.remaining}}};function qd(n){let e="";return n.forEach(t=>{e+=String.fromCharCode(t);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Zl(n){let e=2166136261;for(let i=0;i<n.length;i+=1)e^=n.charCodeAt(i),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let t=new Uint8Array(8),r=new DataView(t.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),qd(t)}var zm={async sha256Base64Url(n){return Zl(n)},randomHex(n){let e="0123456789abcdef",t="";for(let r=0;r<n;r+=1)t+=e[Math.floor(Math.random()*16)];return t}};var Ng=z.enum(["session","day","week","month"]),Hg=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(Hg),cap:z.object({count:z.number().int().min(1),period:Ng})});function YI(n,e){switch(n){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 Kg(n,e){return `${n}:${e}`}function Yl(n){let{now:e}=n;if(n.sessionCooldownMinutes!=null&&n.sessionCooldownMinutes>0&&n.lastSessionPresentationAt!=null&&e-n.lastSessionPresentationAt<n.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(n.rules&&n.candidate){let t=n.candidate,r=n.counters??new Map;for(let i of n.rules){if(!i.group.some(p=>p.kind==="template"?p.id===t.templateId:p.kind==="slot"?p.id===t.slotId:false))continue;let a=Kg(i.id,i.cap.period);if((r.get(a)??0)>=i.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:i.id}}}if(n.perPayload){let{policies:t,seenAt:r,cooldownUntil:i}=n.perPayload;if(i!=null&&Number.isFinite(i)&&i>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let s of t)for(let a of s.rules){let o=YI(a.period,e);if(r.filter(b=>b>=o&&b<=e).length>=a.count)return {allowed:false,reason:`suppressed_by_payload_cap_${a.period}`}}}return {allowed:true}}async function Km(n,e){let t=ao(n.pageRoute),r=[n.tenantId,t,n.placementName.trim().toLowerCase(),String(n.placementScopeKey||"").trim().toLowerCase()].join("::");if(e)try{return (await e.sha256Base64Url(r)).slice(0,22)}catch{}return Zl(r).slice(0,22)}function Gm(n){return [n.slotId||"",n.surfaceType||"",n.entitlementHandle||"",n.planHandle||"",n.placementHandle||""].join("::")}function $m(n){let e=Rs({placementId:n.placementId,userId:n.userId,contextMode:n.contextMode??"auto",overrides:n.overrides??{},traits:n.traits??{},route:ao(n.route),...n.runtimeContextFingerprint?{runtimeContextFingerprint:n.runtimeContextFingerprint}:{}});return `${n.tenantId}:${n.placementId}:${n.userId}:${Zl(e)}`}function $g(n){if(n.length<=1)return n;let e=new Set;for(let r of n){let i=r.surface.template;if(!i)continue;let s=Bm(r);if(s.length!==0)for(let a of n){if(a.output_id===r.output_id||a.surface.template!==i)continue;let o=Um(a);o&&s.includes(o)&&e.add(a.output_id);}}let t=new Map;for(let r of n){if(!r.surface.template)continue;let i=t.get(r.surface.template)??[];i.push(r),t.set(r.surface.template,i);}for(let r of t.values()){if(r.length<=1)continue;let i=r.map(a=>{let o=Te(a.content)?a.content:{};return {output:a,order:vn(o.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(a=>Number.isFinite(a.order));if(i.length<=1)continue;let s=i.reduce((a,o)=>o.order>a.order?o:a);for(let a of i)a.output.output_id!==s.output.output_id&&e.add(a.output.output_id);}return n.filter(r=>!e.has(r.output_id))}function Gg(n){let t=(Te(n.content)?n.content:{}).__trigger_entitlement_handle;return typeof t=="string"&&t.length>0?t:null}function WI(n,e,t){if(t===1){let r=n.surface.slot_id,i=e.surface.slot_id;if(typeof r=="string"&&r&&typeof i=="string"&&i)return {leftKey:r,rightKey:i}}else if(t===0){let r=Gg(n),i=Gg(e);if(r&&i)return {leftKey:r,rightKey:i}}return {leftKey:n.surface.type??"",rightKey:e.surface.type??""}}function Dd(n){if(n.length<=1)return n;let e=new Set;for(let t=0;t<n.length;t+=1)for(let r=t+1;r<n.length;r+=1){let i=n[t],s=n[r];if(i.surface.type!==s.surface.type)continue;let a=Ys(i.category),o=Ys(s.category);if(a!==o){a<o?e.add(s.output_id):e.add(i.output_id);continue}if(a===0||a===1){let{leftKey:p,rightKey:b}=WI(i,s,a);p===b&&e.add(s.output_id);}}return n.filter(t=>!e.has(t.output_id))}function Zm(n,e=false,t){let r=n;if(t?.fixedOnly&&(r=r.filter(p=>Ys(p.category)===1)),r.length===0)return null;let i=$g(r);if(i.length===0)return null;let s=i.some(p=>Kl(p)!==null),a=s?i:Dd(i);return a.length===0?null:[...a].sort((p,b)=>{if(s){let R=Kl(p),N=Kl(b);if(R!==null&&N!==null&&R!==N)return R-N;if(R!==null&&N===null)return -1;if(R===null&&N!==null)return 1}let l=Ys(p.category),y=Ys(b.category),S=l-y;if(S!==0)return S;if(l===2){let R=Vm(p)-Vm(b);if(R!==0)return R;let N=Lm(b)-Lm(p);if(N!==0)return N}let I=zl(b)-zl(p);if(I!==0)return I;let P=jd(b)-jd(p);return P!==0?P:p.output_id.localeCompare(b.output_id)})[0]??null}function XI(n,e,t){return {header:n,body:e,cta_label:t,title:n,cta:t}}function Ym(n,e,t,r){let i=Te(r)?r:{},s=Te(i.decision)?i.decision:{},a=Te(i.content)?i.content:Te(s.content)?s.content:{},o=typeof s.visible=="boolean"?s.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:n,requestId:typeof i.request_id=="string"?i.request_id:e,visible:o,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(p=>typeof p=="string"):[],content:XI(typeof a.title=="string"?a.title:`${t} recommendation`,typeof a.body=="string"?a.body:"Treatment selected by RevTurbine decisioning.",typeof a.cta=="string"?a.cta:"Continue")}}function Md(n){let e=[],t=[n,n.content,Te(n.content)?n.content.payload:void 0,Te(n.content)?n.content.placement:void 0,Te(n.content)?n.content.surface:void 0];for(let r of t){if(!Te(r))continue;let i=Te(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=Em(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),p=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...p!==void 0?{cooldownMs:p}:{}});}return e}function Wm(n,e,t,r,i="impression"){if(Ys(n.category)<=1)return {allowed:true};let s=Md(n);if(s.length===0)return {allowed:true};let a={...t??{seenAt:[]},seenAt:(t?.seenAt??[]).filter(y=>Number.isFinite(y)&&y>0)},o=Yl({perPayload:{policies:s,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!o.allowed)return {allowed:false,reason:o.reason,updatedState:a};let p=[...a.seenAt,r],b=i==="dismiss"?s.map(y=>y.cooldownMs).filter(y=>typeof y=="number"&&Number.isFinite(y)&&y>0):[],l=b.length>0?r+Math.max(...b):void 0;return {allowed:true,updatedState:{seenAt:p,...l!==void 0?{cooldownUntil:l}:{}}}}function lo(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"&&n.trim().length>0){let e=Number(n);if(Number.isFinite(e))return e}}function Wl(n){return n.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function JI(n,e){let t=lo(n.limit_value??n.usage_limit??n.limit??n.allowance??n.initial_grant);if(t!==void 0)return t;let r=n.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let i=(e??"").toLowerCase();for(let[s,a]of Object.entries(r))if(s.toLowerCase()===i)return lo(a)}}function QI(n){let e=lo(n.warning_threshold_percent??n.warning_percentage??n.threshold_percent??n.threshold);if(e!==void 0)return Math.max(0,Math.min(100,e))}function Zg(n){let e={},t=n.providers;if(n.userId&&(e.user_id=n.userId),n.base)for(let[I,P]of Object.entries(n.base))(typeof P=="string"||typeof P=="number")&&(e[I]=P);let r=t?.plan?.currentPlanHandle,i=t?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let s=t?.plan?.trialDaysRemaining;s!==void 0&&Number.isFinite(s)&&(e.trial_days_remaining=s);let a=t?.plan?.trialDaysTotal;a!==void 0&&Number.isFinite(a)&&(e.trial_days_total=a);let o=t?.traits?.traits??{};for(let[I,P]of Object.entries(o))(typeof P=="string"||typeof P=="number")&&(e[I]=P);let p=t?.entitlements?.usage??{};for(let[I,P]of Object.entries(p)){let R=Wl(I);if(!R)continue;let N=lo(P.used),Z=lo(P.remaining),se=lo(P.limit);if(N!==void 0&&(e[`${R}_usage_current`]=N,e.usage_current===void 0&&(e.usage_current=N),e.current_usage===void 0&&(e.current_usage=N)),se!==void 0&&(e[`${R}_usage_limit`]=se,e.usage_limit===void 0&&(e.usage_limit=se),e.current_limit===void 0&&(e.current_limit=se)),Z!==void 0)e[`${R}_usage_remaining`]=Z,e.usage_remaining===void 0&&(e.usage_remaining=Z);else if(N!==void 0&&se!==void 0){let Y=Math.max(0,se-N);e[`${R}_usage_remaining`]=Y,e.usage_remaining===void 0&&(e.usage_remaining=Y);}if(N!==void 0&&se!==void 0&&se>0){let Y=Math.min(100,Math.round(N/se*100));e[`${R}_usage_percent`]=Y,e.usage_percent===void 0&&(e.usage_percent=Y);}let Pe=P.reset_date;typeof Pe=="string"&&Pe.length>0&&(e[`${R}_reset_date`]=Pe,e.reset_date===void 0&&(e.reset_date=Pe));}let b=t?.rules?.entitlementRules??{};for(let[I,P]of Object.entries(b)){if(!Array.isArray(P)||P.length===0)continue;let R=P.find(Y=>Y.kind==="usage_limit"||Y.kind==="usage_rate"||Y.kind==="credits"||Y.kind==="seat");if(!R)continue;let N=Wl(I);if(!N)continue;let Z=R.fields??{},se=JI(Z,r);se!==void 0&&e[`${N}_usage_limit`]===void 0&&(e[`${N}_usage_limit`]=se);let Pe=QI(Z);Pe!==void 0&&(e[`${N}_usage_warning_threshold_percent`]=Pe);}n.userName&&n.userName.length>0&&(e.user_name=n.userName);let l=t?.plan?.currentPlanPrice;typeof l=="string"&&l.length>0&&(e.plan_price=l),n.upgradePlan?.name&&(e.upgrade_plan_name=n.upgradePlan.name),n.upgradePlan?.price&&(e.upgrade_plan_price=n.upgradePlan.price),n.trialPlanName&&n.trialPlanName.length>0&&(e.trial_plan_name=n.trialPlanName),n.promoDiscount&&n.promoDiscount.length>0&&(e.promo_discount=n.promoDiscount),n.featuresLostOnDowngrade&&n.featuresLostOnDowngrade.length>0&&(e.features_lost_on_downgrade=n.featuresLostOnDowngrade);let y=n.effectiveGrants;if(y)for(let[I,P]of Object.entries(y)){if(P.allocation==="per_user"||P.allocation==="per_user_pooled"||!P.allocation){let R=Wl(I);if(!R)continue;P.used!==void 0&&e[`${R}_usage_current`]===void 0&&(e[`${R}_usage_current`]=P.used),P.limit!==void 0&&e[`${R}_usage_limit`]===void 0&&(e[`${R}_usage_limit`]=P.limit);}if(P.enforcement&&(P.status==="limited"||P.status==="denied")){let R=Wl(I);R&&e[`${R}_enforcement`]===void 0&&(e[`${R}_enforcement`]=P.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=P.enforcement);}}let S=t?.rules?.entitlementRules??{};for(let[I,P]of Object.entries(S)){if(!Array.isArray(P))continue;let R=Wl(I);if(R)for(let N of P){if(N.kind==="credits"){let Z=e[`${R}_usage_remaining`];Z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=Z);}if(N.kind==="seat"){let Z=e[`${R}_usage_current`],se=e[`${R}_usage_limit`];Z!==void 0&&e.seat_count===void 0&&(e.seat_count=Z),se!==void 0&&e.seat_limit===void 0&&(e.seat_limit=se);}}}if(n.featureInteractions&&y){let{invokedFeatureHandles:I,interactionCounts:P,topFeaturesByEngagement:R}=n.featureInteractions,N=new Set(I),Z=new Set;for(let[Y,U]of Object.entries(y))(U.status==="denied"||U.status==="limited")&&Z.add(Y);let se=0,Pe=0;for(let Y of I)Z.has(Y)&&(se++,P&&(Pe+=P[Y]??0));if(e.gated_features_used_count=se,P&&(e.gated_action_count=Pe),R){let Y=R.find(U=>!N.has(U)&&Z.has(U));Y&&(e.top_unused_gated_feature=Y);}if(t?.plan?.trialActive){let Y=0;for(let U of I)U in y&&Y++;e.trial_features_used=Y;}}return e}function Xm(n,e){let t={};for(let[r,i]of Object.entries(e))i!==void 0&&(t[r]=i);return {...n,...t,custom:{...n.custom||{},...e.custom||{}},entitlements:{...n.entitlements||{},...e.entitlements||{}},usage:{...n.usage||{},...e.usage||{}},personalization:{...n.personalization||{},...e.personalization||{}}}}function Nd(n,e,t){let r={};for(let[i,s]of Object.entries(n))(typeof s=="string"||typeof s=="number"||typeof s=="boolean")&&(r[i]=s);e&&r.plan===void 0&&(r.plan=e);for(let[i,s]of Object.entries(t))r[i]===void 0&&(r[i]=s);return r}function Hd(n,e,t){let r=Ra(e,n.plan),i=r??(typeof n.plan=="object"&&n.plan?.id?n.plan.id:void 0),s={...n.custom??{}};for(let[o,p]of Object.entries(n.entitlements??{}))s[o]===void 0&&(s[o]=p);r&&s.plan_name===void 0&&(s.plan_name=r),i&&s.plan===void 0&&(s.plan=i);let a={...Es(n.usage),...t??{}};for(let[o,p]of Object.entries(a))s[o]===void 0&&(s[o]=p);return {effectivePlan:i,traits:s,usage:a,segmentTraits:Nd(s,i,a)}}function eP(n){return {plan:n.plan??null,usage:n.usage??{},custom:n.custom??{},trial:n.trial??null,instances:n.instances??[]}}function Jm(n,e=zm){return e.sha256Base64Url(Rs(eP(n)))}function Qm(n){let{context:e,exportedConfig:t,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:s}=n,a={};for(let[Z,se]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(Z)||(a[Z]=se);let o={...a},p=Ra(t,e.plan);p?o.plan_name=p:typeof e.plan=="object"&&e.plan?.name&&(o.plan_name=e.plan.name);let b={...Es(e.usage),...r},l=Object.entries(b).filter(([,Z])=>Number.isFinite(Z)).sort(([Z],[se])=>Z.localeCompare(se)),y,S,I,P,R=[];for(let[Z,se]of l){let Pe=i.get(Z)??oo(Z);if(!Pe)continue;let U=s(Z)?.limit,Oe=U!==void 0?Math.max(0,U-se):void 0,It=U!==void 0&&U>0?Math.min(100,Math.round(se/U*100)):void 0;o[`${Pe}_usage_current`]=se,U!==void 0&&(o[`${Pe}_usage_limit`]=U),Oe!==void 0&&(o[`${Pe}_usage_remaining`]=Oe),It!==void 0&&(o[`${Pe}_usage_percent`]=It),R.push({prefix:Pe,current:se,...U!==void 0?{limit:U}:{},...Oe!==void 0?{remaining:Oe}:{},...It!==void 0?{percent:It}:{}}),y===void 0&&(y=se,S=U,I=Oe,P=It);}let N=R.find(Z=>Z.prefix==="core")??R.find(Z=>Z.limit!==void 0)??R[0];return N&&(y=N.current,S=N.limit,I=N.remaining,P=N.percent),y!==void 0&&(o.usage_current=y),S!==void 0&&(o.usage_limit=S),I!==void 0&&(o.usage_remaining=I),P!==void 0&&(o.usage_percent=P),o}function ep(n,e,t){let r=[];for(let[i,s]of Object.entries(e)){let a=n[i]||0;if(!Number.isFinite(s)||s<=a)continue;let o=t(i);if(!o)continue;let p=a/o.limit*100,b=s/o.limit*100;b>=o.warningPercent&&p<o.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:o.warningPercent}),s>=o.limit&&a<o.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(b)),threshold:100});}return r}function tp(n,e,t=3){if(!n.in_trial)return e==="none"?"none":"expired";let r=Number(n.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=t)return "expiring";let i=Number(n.day_number);if(Number.isFinite(i)&&i>0&&Number.isFinite(r)){let s=i+Math.max(0,r);if(s>0&&i>=Math.ceil(s/2))return "midpoint"}return "none"}var Yg="__self__",tP={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},np={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:Yg,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:tP},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 Wg=["high","medium","low"];function Xl(n,e){return n==="active"?Wg.includes(e):n===e}var nP="activity_level";function Xg(n,e){let t=e[n.field];if(t===void 0)return false;let r=String(t),i=n.value,s=n.field===nP;switch(n.operator){case "eq":return s?Xl(i,r):r===i;case "neq":return s?!Xl(i,r):r!==i;case "gt":return Number(r)>Number(i);case "lt":return Number(r)<Number(i);case "gte":return Number(r)>=Number(i);case "lte":return Number(r)<=Number(i);case "contains":return r.includes(i);case "in":{let a=i.split(",").map(o=>o.trim());return s?a.some(o=>Xl(o,r)):a.includes(r)}default:return false}}function Jl(n,e,t={}){return n.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(t,r.experiment_id))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>Xg(s,e))}).map(r=>r.handle)}function Jg(n){let e={};for(let t of n)t.experiment_id&&(e[t.handle]=t.experiment_id);return e}function Qg(n,e,t={}){for(let r of e){let i=n[r];if(!i)continue;let s=t[i];if(typeof s=="string")return {experiment_id:i,variant_key:s}}}function rp(n,e){let t=String(n.field||""),r=String(n.operator||""),i=String(n.value||""),s=e[t],a=typeof s=="string"||typeof s=="number"||typeof s=="boolean"?s:null,o=Xg(n,e);return {field:t,operator:r,expected:i,actual:a,matched:o}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function mp(n,e){return n.target_plan_ids.length>0&&e.currentPlanId&&!n.target_plan_ids.includes(e.currentPlanId)?{eligible:false,reason:"plan_mismatch"}:n.target_billing_periods.length>0&&e.billingPeriod&&!n.target_billing_periods.includes(e.billingPeriod)?{eligible:false,reason:"billing_period_mismatch"}:(n.category==="upsell"||n.category==="trial_conversion")&&e.planHandle==="enterprise"?{eligible:false,reason:"enterprise_upsell_suppressed"}:{eligible:true}}var n_={Named:"named",Minted:"minted"},r_="x-revturbine-schema-identity";function ts(n="handle"){return {[r_]:{kind:n_.Named,handleField:n}}}function Ui(n="handle"){return {[r_]:{kind:n_.Minted,handleField:n}}}var pn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Vi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},iP="x-revturbine-context",sP="x-revturbine-in-config",aP="x-revturbine-sdk-input",oP="x-revturbine-source",lP="x-revturbine-deprecation",cP={[pn.Playbook]:Vi.Customer,[pn.Branding]:Vi.Customer,[pn.Billing]:Vi.Stripe,[pn.Metering]:Vi.Customer,[pn.CustomerOperations]:Vi.Runtime,[pn.EventIngestion]:Vi.Runtime};function Gn(n,e){return {[iP]:n,[sP]:e.inConfig??n===pn.Playbook,[aP]:e.sdkInput,[oP]:e.source??cP[n]}}function ip(n){return {deprecated:true,[lP]:{since:n.since,replacement:n.replacement,remove_after:n.removeAfter,reason:n.reason}}}var Qt=n=>z.object({items:z.array(n)}),Qn=z.object({error:z.string(),code:z.string(),request_id:z.string()}),E=n=>n,en=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:pe}=Li,{Persisted:pp,Transient:ri}=Ws,{Internal:i_,External:Kr}=Qi,s_=Gn(pn.Playbook,{sdkInput:true}),dP=Gn(pn.Playbook,{inConfig:false,sdkInput:false}),a_=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),Gd=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),uP=z.enum(Ag).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),mP=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),o_=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),sp=z.object({entitlement_id:z.string().min(1).meta(pe),entitlement_handle:z.string().min(1).meta(pe),status:uP.meta(pe),limit:z.number().optional().meta(pe),used:z.number().optional().meta(pe),allocation:Gd.optional().meta(pe),enforcement:o_.optional().meta(pe),source:mP.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":ri,"x-revturbine-schema-exposure":Kr,...Li.Operational});z.object({account:z.record(z.string(),sp).optional().meta(pe),instance:z.record(z.string(),sp).optional().meta(pe),user:z.record(z.string(),sp).optional().meta(pe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr,...Li.Operational});var pP=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),fP=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),l_=z.object({kind:fP.meta(pe),id:z.string().min(1).meta(pe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),hP=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),ho=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...pe,readOnly:true}),name:As.meta(pe),handle:rr.meta(pe),customer_facing_description:z.string().max(500).optional().meta(pe),type:Fd.meta(pe),unit:z.string().max(100).optional().meta(pe),period_scope:a_.optional().meta(pe),allocation:Gd.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:pi.meta(pe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":pp,"x-revturbine-schema-exposure":Kr,...s_,...ts()}),gP=Or("EntitlementAnchor"),So=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...pe,readOnly:true}),handle:rr.meta({...pe,readOnly:true}),entitlement_id:z.string().min(1).meta(pe),targets:z.array(l_).min(1).meta(pe),segment_ids:z.array(z.string()).default([]).meta(pe),visibility:pP.default("public").meta(pe),period_scope:a_.optional().meta(pe),instance:z.string().max(100).optional().meta(pe),reset_period:hP.optional().meta(pe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(pe),enforcement:o_.optional().meta(pe),warning_threshold_percent:wa.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:Gd.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":pp,"x-revturbine-schema-exposure":i_,...s_,...Ui()}),_P=Or("EntitlementRuleAnchor");So.superRefine((n,e)=>{n.reset_period==="billing_period"&&n.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let t=n.allowance_value;(t==="unlimited"||typeof t=="number"&&t>0)&&n.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 bP=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),vP=z.object({code:bP.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":ri,"x-revturbine-schema-exposure":Kr}),ap=So.extend({warnings:z.array(vP).optional().meta(pe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ri,"x-revturbine-schema-exposure":Kr}),op=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({handle:rr.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":pp,"x-revturbine-schema-exposure":i_,...dP,...Ui()}),yP=ni(ho),xP=ni(So);({"/api/entitlement-anchors":{get:E({operationId:"listEntitlementAnchors",requestParams:{query:en},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:Qt(gP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:E({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:Qt(_P)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:E({operationId:"listEntitlements",requestParams:{query:en},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:Qt(ho)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:E({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ar(ho)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:E({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:E({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:yP}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ho}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:E({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:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:E({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:en},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:Qt(So)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:E({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ar(So)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:E({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:xP}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:E({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:E({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ap}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:E({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:en},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:Qt(op)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:E({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ar(op)}}},responses:{201:{description:"Created",content:{"application/json":{schema:op}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:$e}=Li,{Persisted:ic,Transient:sc}=Ws,{Internal:ns}=Qi,c_=Gn(pn.Playbook,{sdkInput:true}),d_=Gn(pn.Playbook,{inConfig:false,sdkInput:true}),SP=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":ns}),fp=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":ns}),u_=z.object({name:As.meta($e),handle:rr.meta($e),plan_id:z.string().nullable().optional().meta($e),segment_id:z.string().nullable().optional().meta($e),trial_limit_type:fp.default("time").meta($e),duration_days:z.number().int().min(1).max(365).nullable().optional().meta($e),grace_period_days:z.number().int().min(0).default(0).meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),require_payment_method:z.boolean().default(false).meta($e),auto_convert:z.boolean().default(true).meta($e),convert_to_plan_id:z.string().optional().meta($e),fallback_plan_id:z.string().optional().meta($e),limit_per_customer:z.number().int().min(1).default(1).meta($e),is_active:z.boolean().default(true).meta($e),metadata:pi.meta($e)}),uo=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...$e,readOnly:true})}).merge(u_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":ic,"x-revturbine-schema-exposure":ns,...c_,...ts()}),IP=Or("FreeTrialRuleAnchor"),PP=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":ns}),m_=z.object({name:As.meta($e),handle:rr.meta($e),premium_plan_id:z.string().min(1).meta($e),fallback_plan_id:z.string().min(1).meta($e),segment_id:z.string().nullable().optional().meta($e),trial_limit_type:fp.default("time").meta($e),duration_days:z.number().int().min(1).max(365).nullable().optional().meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),start_policy:PP.default("signup").meta($e),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta($e),entitlements_during_trial:z.array(z.string()).default([]).meta($e),is_active:z.boolean().default(true).meta($e),metadata:pi.meta($e)}),mo=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...$e,readOnly:true})}).merge(m_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":ic,"x-revturbine-schema-exposure":ns,...c_,...ts()}),TP=Or("ReverseTrialRuleAnchor"),p_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":ns}),f_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":ns}),po=xn.merge(En).merge(wn).extend({trial_limit_policy:p_.default("1_per_lifetime").meta($e),eligibility_scope:f_.default("per_customer").meta($e)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":ic,"x-revturbine-schema-exposure":ns,...d_}),fo=xn.merge(En).merge(wn).extend({trial_limit_policy:p_.default("1_per_lifetime").meta($e),eligibility_scope:f_.default("per_customer").meta($e)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":ic,"x-revturbine-schema-exposure":ns,...d_}),zd=xn.merge(En).merge(wn).extend({customer_id:z.string().min(1).meta($e),rule_id:z.string().min(1).meta($e),rule_type:z.enum(["free_trial","reverse_trial"]).meta($e),plan_id:z.string().min(1).meta($e),status:SP.default("active").meta($e),started_at:z.string().datetime().meta({...$e,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta($e),trial_limit_type:fp.default("time").meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),converted_at:Vd.meta($e),cancelled_at:Vd.meta($e),metadata:pi.meta($e)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":ic,"x-revturbine-schema-exposure":ns});({"/api/free-trial-rule-anchors":{get:E({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:Qt(IP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:E({operationId:"listFreeTrialRules",requestParams:{query:en},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:Qt(uo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:E({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:uo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:E({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:uo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:uo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:E({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:E({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:Qt(TP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:E({operationId:"listReverseTrialRules",requestParams:{query:en},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:Qt(mo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:E({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:mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:E({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:E({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:E({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:Qt(po)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:E({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:E({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:po.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:po}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:E({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:Qt(fo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:E({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:E({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:fo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:E({operationId:"listTrialInstances",requestParams:{query:en},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:Qt(zd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:E({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:zd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:E({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:zd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:E({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:zd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:zt,Financial:Kd}=Li,{Persisted:ac,Transient:$d}=Ws,{External:Os}=Qi,CP=Gn(pn.Playbook,{sdkInput:true}),kP=Gn(pn.Playbook,{sdkInput:false}),hp=Gn(pn.Billing,{sdkInput:false}),Js=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":$d,"x-revturbine-schema-exposure":Os}),oc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":$d,"x-revturbine-schema-exposure":Os}),Zd=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":$d,"x-revturbine-schema-exposure":Os}),go=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),name:As.meta(zt),handle:rr.meta(zt),tier_position:z.number().int().min(0).default(0).meta(zt),sort_order:z.number().int().default(0).meta(zt),visibility:Js.default("public").meta(zt),metadata:pi.meta(zt)}).meta({id:"Plan","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Os,...CP,...ts()}),RP=Or("PlanAnchor"),_o=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),handle:rr.meta({...zt,readOnly:true}),plan_id:z.string().min(1).meta(zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z.string().nullable().default(null).meta(zt),price_amount:z.number().min(0).meta(Kd),pricing_model:oc.meta(zt),visibility:Js.default("public").meta(zt),stripe_price_id:z.string().optional().meta(zt),price_source:Zd.default("static").meta(zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Os,...hp,...Ui()}),EP=Or("PlanVariationAnchor"),bo=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),name:As.meta(zt),handle:rr.meta(zt),sort_order:z.number().int().default(0).meta(zt),visibility:Js.default("public").meta(zt),metadata:pi.meta(zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Os,...kP,...ts()}),wP=Or("AddOnAnchor"),vo=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),handle:rr.meta({...zt,readOnly:true}),addon_id:z.string().min(1).meta(zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z.string().nullable().default(null).meta(zt),price_amount:z.number().min(0).meta(Kd),pricing_model:oc.meta(zt),visibility:Js.default("public").meta(zt),stripe_price_id:z.string().optional().meta(zt),price_source:Zd.default("static").meta(zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Os,...hp,...Ui()}),AP=Or("AddOnVariationAnchor"),OP=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":$d,"x-revturbine-schema-exposure":Os}),yo=xn.merge(En).merge(wn).extend({stripe_price_id:z.string().min(1).meta(zt),stripe_product_id:z.string().min(1).meta(zt),billing_period:OP.meta(zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Kd),currency:Og.meta(Kd),pricing_model:oc.meta(zt),nickname:z.string().nullable().default(null).meta(zt),is_mock:z.boolean().default(false).meta(zt),last_updated_from_stripe:Vd.meta(zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Os,...hp}),jP=ni(go),FP=ni(_o),LP=ni(bo),VP=ni(vo),UP=ni(yo);({"/api/plan-anchors":{get:E({operationId:"listPlanAnchors",requestParams:{query:en},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:Qt(RP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:E({operationId:"listPlans",requestParams:{query:en},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:Qt(go)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:E({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ar(go)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:go}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:E({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:go}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:E({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:jP}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:go}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:E({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:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:E({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:E({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:Qt(EP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:E({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:en},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:Qt(_o)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:E({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ar(_o)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:E({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:_o}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:E({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:FP}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:_o}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:E({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:E({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:Qt(wP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:E({operationId:"listAddOns",requestParams:{query:en},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:Qt(bo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:E({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ar(bo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:E({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:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:E({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:LP}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:bo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:E({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:E({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:Qt(AP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:E({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:en},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:Qt(vo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:E({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ar(vo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:vo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:E({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:vo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:E({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:VP}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:vo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:E({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:E({operationId:"listStripePrices",requestParams:{query:en},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:Qt(yo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:E({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ar(yo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:E({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:yo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:E({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:UP}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:yo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:E({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:f}=Li,{Persisted:Io,Transient:Je}=Ws,{Internal:xi,External:Ct}=Qi,gt=Gn(pn.Playbook,{sdkInput:true}),xo=Gn(pn.Playbook,{sdkInput:false}),Xs=Gn(pn.Playbook,{inConfig:false,sdkInput:false}),h_=Gn(pn.Playbook,{inConfig:false,sdkInput:true}),Ql=Gn(pn.Playbook,{inConfig:false,sdkInput:true,source:Vi.CodeConstant}),lp=Gn(pn.Playbook,{inConfig:false,sdkInput:true,source:Vi.Runtime}),cp=Gn(pn.Playbook,{inConfig:false,sdkInput:false,source:Vi.Runtime}),BP=Gn(pn.Billing,{sdkInput:false}),qP=Gn(pn.Metering,{sdkInput:false}),DP=Gn(pn.Branding,{inConfig:true,sdkInput:true}),MP=Gn(pn.Branding,{sdkInput:false}),NP="1.0.0",ec=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),name:As.meta(f),handle:rr.meta(f),description:Ld.meta(f),is_default:z.boolean().default(false).meta(f),entitlement_ids:z.array(z.string()).default([]).meta(f),metadata:pi.meta(f)}).meta({id:"SeatType","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...Xs,...ts()}),HP=Or("SeatTypeAnchor"),tc=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:rr.meta(f),label:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().nullable().default(null).meta(f),example_value:z.string().nullable().default(null).meta(f),value_map:z.record(z.string(),z.string()).default({}).meta(f),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(f),metadata:pi.meta(f)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...Xs,...ts()}),zP=Or("PersonalizationTokenAnchor"),KP=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),dp=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({handle:rr.meta({...f,readOnly:true}),stripe_account_id:z.string().min(1).meta(f),live_mode:z.boolean().default(false).meta(f),onboarding_state:KP.default("not_started").meta({...f,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...f,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...f,readOnly:true}),details_submitted:z.boolean().default(false).meta({...f,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...f,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...f,readOnly:true}),sync_products:z.boolean().default(true).meta(f),sync_prices:z.boolean().default(true).meta(f),sync_subscriptions:z.boolean().default(true).meta(f),sync_invoices:z.boolean().default(false).meta(f),default_currency:z.string().length(3).default("USD").meta(f),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(f),last_sync_at:z.string().optional().meta({...f,readOnly:true}),metadata:pi.meta(f)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...BP,...Ui()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(f),workspace_name:z.string().optional().meta(f),logo_url:z.string().optional().meta(f),support_email:z.string().optional().meta(f)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...MP});var nc=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({handle:rr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),meter_key:z.string().min(1).max(100).meta(f),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(f),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(f),stripe_meter_id:z.string().nullable().default(null).meta(f),is_active:z.boolean().default(true).meta(f),metadata:pi.meta(f)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...qP,...Ui()}),e_=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),rc=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:rr.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),soft_limit_percent:z.number().min(0).max(100).default(80).meta(f),hard_limit_percent:z.number().min(0).max(100).default(100).meta(f),soft_limit_action:e_.default("warn").meta(f),hard_limit_action:e_.default("block").meta(f),grace_period_hours:z.number().int().min(0).default(0).meta(f),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...h_,...Ui()}),GP=Or("UsageEnforcementSettingsAnchor"),$P=z.object({kind:z.enum(["template","slot"]).meta(f),id:z.string().min(1).meta(f),label:z.string().min(1).optional().meta(f)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),ZP=z.object({id:z.string().min(1).meta(f),group:z.array($P).min(1).meta(f),cap:z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month"]).meta(f)}).meta(f)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),YP=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),g_=z.object({capRules:z.array(ZP).default([]).meta(f),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(f),remindLaterMinutes:z.number().int().min(0).default(60).meta(f),testMode:YP.default("off").meta(f)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xi}),up=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:rr.meta({...f,readOnly:true}),global_frequency_cap:g_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(f)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Io,"x-revturbine-schema-exposure":xi,...h_,...Ui()}),WP=Or("PlacementSettingsAnchor"),XP=z.object({field:z.string().min(1).meta(f),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(f),value:z.string().meta(f)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),JP=z.object({name:z.string().min(1).meta(f),handle:z.string().min(1).meta(f),predicates:z.array(XP).optional().meta(f),dimension_id:z.string().optional().meta(f),experiment_id:z.string().min(1).optional().meta(f)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),QP=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),tier_position:z.number().int().min(0).default(0).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Js.default("public").meta(f)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),e0=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Js.default("public").meta(f)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...xo}),t0=z.object({handle:z.string().min(1).meta(f),plan_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:oc.meta(f),visibility:Js.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Zd.meta(f)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...Xs}),n0=z.object({handle:z.string().min(1).meta(f),addon_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:oc.meta(f),visibility:Js.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:Zd.meta(f)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...Xs}),r0=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),is_default:z.boolean().default(false).meta(f),entitlement_handles:z.array(z.string()).default([]).meta(f)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),i0=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().nullable().default(null).meta(f),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),soft_limit_action:z.string().meta(f),hard_limit_action:z.string().meta(f),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(f),notification_channels:z.array(z.string()).default([]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),s0=z.object({handle:z.string().min(1).meta(f),global_frequency_cap:g_.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),a0=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:z.string().nullable().default(null).meta(f),visibility_toggle:z.boolean().default(true).meta(f),source_type:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),o0=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().min(1).meta(f),meter_handle:z.string().min(1).meta(f),limit:z.number().int().min(0).nullable().default(null).meta(f),reset_period:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),l0=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),type:Fd.meta(f),unit:z.string().optional().meta(f),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),__=z.object({id:z.string().min(1).meta(f),entitlement_id:z.string().min(1).meta(f),targets:z.array(l_).min(1).meta(f),segment_ids:z.array(z.string()).default([]).meta(f),kind:Fd.optional().meta({...f,readOnly:true}),unit:z.string().optional().meta({...f,readOnly:true}),tier_name:z.string().optional().meta({...f,readOnly:true}),tier_description:z.string().optional().meta({...f,readOnly:true}),...So.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(f),allocation:Gd.optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),c0=z.object({slot_id:z.string().min(1).meta(f),active:z.boolean().meta(f),triggers:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),d0=z.object({id:z.string().min(1).meta(f),label:z.string().min(1).meta(f),description:z.string().meta(f),surface_type:z.string().meta(f),placement_handle:z.string().min(1).meta(f),template:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),u0=z.object({name:z.string().min(1).meta(f),type:z.string().optional().meta(f),required:z.boolean().optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),m0=z.object({id:z.string().min(1).meta(f),surface_type:z.string().meta(f),fields:z.array(u0).optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),p0=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":Je,"x-revturbine-schema-exposure":Ct}),f0=z.object({name:z.string().min(1).meta(f),action_type:p0.meta(f),plan_handle:z.string().optional().meta(f),promotion_id:z.string().optional().meta(f),placement_handle:z.string().optional().meta(f),url:z.string().optional().meta(f),tour_id:z.string().optional().meta(f),target_billing_period:z.enum(["monthly","annual"]).optional().meta(f),description:z.string().optional().meta(f)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),h0=z.object({id:z.string().meta(f),name:z.string().meta(f),discount:z.string().meta(f),type:z.string().meta(f),status:z.string().meta(f)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),g0=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(f),label:z.string().min(1).meta(f),description:z.string().optional().meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().optional().meta(f),example_value:z.string().optional().meta(f),value_map:z.record(z.string(),z.string()).optional().meta(f),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(f)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),t_=z.object({header:z.string().optional().meta(f),body:z.string().optional().meta(f),cta_label:z.string().optional().meta(f),secondary_cta_label:z.string().optional().meta(f)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),_0=z.object({block_id:z.string().min(1).meta(f),tenant_id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),surface_template_id:z.string().optional().meta(f),default_content:t_.meta(f),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:t_})).optional().meta(f),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(f),tokens_used:z.array(z.string()).optional().meta(f),status:z.enum(["draft","active","archived"]).meta(f),created_at:z.string().datetime().meta({...f,readOnly:true}),updated_at:z.string().datetime().meta({...f,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),b0=z.object({label:z.string().meta(f),path:jg.meta(f),config:z.record(z.string(),z.string()).optional().meta(f)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),b_=z.object({template_id:z.string().min(1).meta(f),fields:z.record(z.string(),z.string()).meta(f),ctas:z.array(b0).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),v_=z.object({plan_ids:z.array(z.string()).meta(f),billing_cadences:z.array(z.string()).optional().meta(f),segment_chips:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),v0=z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month","lifetime"]).meta(f)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),y_=z.object({max_per_period:v0.optional().meta(f),cooldown_days:z.number().int().min(0).optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),y0=z.object({id:z.string().min(1).meta(f),target:v_.meta(f),surfaces:z.array(b_).meta(f),caps:y_.optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().optional().meta({...f,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(f),recommendation_plan_override:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),x0=z.discriminatedUnion("type",[z.object({type:z.literal("surface_render"),slot_id:z.string().min(1)}),z.object({type:z.literal("entitlement_gate"),entitlement_handle:z.string().min(1),tier_threshold:z.string().optional()}),z.object({type:z.literal("usage_threshold"),entitlement_handle:z.string().min(1),threshold_percent:wa}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:wa}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:wa}),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":Je,"x-revturbine-schema-exposure":Ct}),S0=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct}),I0=z.object({id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:S0.meta(f),trigger:x0.meta(f),payloads:z.array(y0).meta(f),order:z.number().int().min(0).meta(f)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),P0=z.object({payload_id:z.string().min(1).meta(f),placement_id:z.string().min(1).meta(f),target:v_.meta(f),caps:y_.optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().meta({...f,readOnly:true}),updated_at:z.string().datetime().optional().meta({...f,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(f),surfaces:z.array(b_).optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(f)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),T0=z.object({kind:z.string().min(1).meta(f),schema_version:z.number().int().nonnegative().meta(f),config:z.unknown().meta(f)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),C0=xn.merge(u_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...Xs}),k0=xn.merge(m_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...Xs}),R0=z.object({plans:z.array(QP).meta({...f,...gt}),addons:z.array(e0).optional().meta({...f,...xo}),entitlements:z.array(l0).meta({...f,...gt}),entitlement_rules:z.array(__).meta({...f,...gt}),segments:z.array(JP).meta({...f,...gt}),content_ui_paths:z.array(f0).meta({...f,...gt}),slot_configs:z.array(c0).optional().meta({...f,...gt,...ip({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...f,...gt,...ip({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...f,...DP,...ip({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(d0).optional().meta({...f,...gt}),message_blocks:z.array(_0).optional().meta({...f,...gt}),placement_payloads:z.array(P0).optional().meta({...f,...gt}),placements:z.array(I0).optional().meta({...f,...gt}),content_promotions:z.array(h0).optional().meta({...f,...gt}),personalization_tokens:z.array(g0).optional().meta({...f,...gt}),surface_templates:z.array(m0).optional().meta({...f,...gt}),free_trial_rules:z.array(C0).optional().meta({...f,...xo}),reverse_trial_rules:z.array(k0).optional().meta({...f,...xo}),plan_variations:z.array(t0).optional().meta({...f,...xo}),addon_variations:z.array(n0).optional().meta({...f,...xo}),extension_rules:z.array(T0).optional().meta({...f,...gt}),seat_types:z.array(r0).optional().meta({...f,...gt}),enforcement_defaults:z.array(i0).optional().meta({...f,...gt}),placement_settings:z.array(s0).optional().meta({...f,...gt}),segment_dimensions:z.array(a0).optional().meta({...f,...gt}),meter_bindings:z.array(o0).optional().meta({...f,...gt}),experiments:z.array(z.unknown()).max(0).optional().meta({...f,...Xs}),signal_catalog:z.object({}).strict().optional().meta({...f,...Xs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt}),E0=z.object({artifact_type:z.literal("playbook").meta({...f,...Ql,readOnly:true}),format_version:z.literal(NP).meta({...f,...Ql,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...f,...Ql}),playbook_version_id:z.string().nullable().default(null).meta({...f,...lp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...f,...cp,readOnly:true}),environment_id:z.string().min(1).optional().meta({...f,...cp,readOnly:true}),project_id:z.string().min(1).optional().meta({...f,...cp,readOnly:true}),exported_at:z.string().datetime().optional().meta({...f,...lp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...f,...Ql,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...f,...Ql,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...lp}),x_=E0.extend(R0.shape).meta({"x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt});function w0(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function S_(n){if(!w0(n))return n;let e={...n};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}var I_=z.preprocess(S_,x_).meta({id:"Playbook","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt});z.preprocess(S_,x_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":Ct,...gt});({"/api/seat-type-anchors":{get:E({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:Qt(HP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:E({operationId:"listSeatTypes",requestParams:{query:en},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:Qt(ec)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:E({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ar(ec)}}},responses:{201:{description:"Created",content:{"application/json":{schema:ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:E({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",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:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:E({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:E({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:Qt(zP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:E({operationId:"listPersonalizationTokens",requestParams:{query:en},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:Qt(tc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:E({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ar(tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:E({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",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:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:E({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:E({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ni(dp)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:dp}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:E({operationId:"listMeteringConfigs",requestParams:{query:en},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:Qt(nc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:E({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ar(nc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:E({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:nc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:E({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:E({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:Qt(GP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:E({operationId:"listUsageEnforcementSettings",requestParams:{query:en},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:Qt(rc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:E({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ar(rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:E({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:rc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:E({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:E({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:Qt(WP)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:E({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:ni(up)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:up}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var rs=new Int32Array(2),Yd=new Float32Array(rs.buffer),Wd=new Float64Array(rs.buffer),Po=new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var lc;(function(n){n[n.UTF8_BYTES=1]="UTF8_BYTES",n[n.UTF16_STRING=2]="UTF16_STRING";})(lc||(lc={}));var Qs=class n{constructor(e){this.bytes_=e,this.position_=0,this.text_decoder_=new TextDecoder;}static allocate(e){return new n(new Uint8Array(e))}clear(){this.position_=0;}bytes(){return this.bytes_}position(){return this.position_}setPosition(e){this.position_=e;}capacity(){return this.bytes_.length}readInt8(e){return this.readUint8(e)<<24>>24}readUint8(e){return this.bytes_[e]}readInt16(e){return this.readUint16(e)<<16>>16}readUint16(e){return this.bytes_[e]|this.bytes_[e+1]<<8}readInt32(e){return this.bytes_[e]|this.bytes_[e+1]<<8|this.bytes_[e+2]<<16|this.bytes_[e+3]<<24}readUint32(e){return this.readInt32(e)>>>0}readInt64(e){return BigInt.asIntN(64,BigInt(this.readUint32(e))+(BigInt(this.readUint32(e+4))<<BigInt(32)))}readUint64(e){return BigInt.asUintN(64,BigInt(this.readUint32(e))+(BigInt(this.readUint32(e+4))<<BigInt(32)))}readFloat32(e){return rs[0]=this.readInt32(e),Yd[0]}readFloat64(e){return rs[Po?0:1]=this.readInt32(e),rs[Po?1:0]=this.readInt32(e+4),Wd[0]}writeInt8(e,t){this.bytes_[e]=t;}writeUint8(e,t){this.bytes_[e]=t;}writeInt16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8;}writeUint16(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8;}writeInt32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24;}writeUint32(e,t){this.bytes_[e]=t,this.bytes_[e+1]=t>>8,this.bytes_[e+2]=t>>16,this.bytes_[e+3]=t>>24;}writeInt64(e,t){this.writeInt32(e,Number(BigInt.asIntN(32,t))),this.writeInt32(e+4,Number(BigInt.asIntN(32,t>>BigInt(32))));}writeUint64(e,t){this.writeUint32(e,Number(BigInt.asUintN(32,t))),this.writeUint32(e+4,Number(BigInt.asUintN(32,t>>BigInt(32))));}writeFloat32(e,t){Yd[0]=t,this.writeInt32(e,rs[0]);}writeFloat64(e,t){Wd[0]=t,this.writeInt32(e,rs[Po?0:1]),this.writeInt32(e+4,rs[Po?1:0]);}getBufferIdentifier(){if(this.bytes_.length<this.position_+4+4)throw new Error("FlatBuffers: ByteBuffer is too short to contain an identifier.");let e="";for(let t=0;t<4;t++)e+=String.fromCharCode(this.readInt8(this.position_+4+t));return e}__offset(e,t){let r=e-this.readInt32(e);return t<this.readInt16(r)?this.readInt16(r+t):0}__union(e,t){return e.bb_pos=t+this.readInt32(t),e.bb=this,e}__string(e,t){e+=this.readInt32(e);let r=this.readInt32(e);e+=4;let i=this.bytes_.subarray(e,e+r);return t===lc.UTF8_BYTES?i:this.text_decoder_.decode(i)}__union_with_string(e,t){return typeof e=="string"?this.__string(t):this.__union(e,t)}__indirect(e){return e+this.readInt32(e)}__vector(e){return e+this.readInt32(e)+4}__vector_len(e){return this.readInt32(e+this.readInt32(e))}__has_identifier(e){if(e.length!=4)throw new Error("FlatBuffers: file identifier must be length "+4);for(let t=0;t<4;t++)if(e.charCodeAt(t)!=this.readInt8(this.position()+4+t))return false;return true}createScalarList(e,t){let r=[];for(let i=0;i<t;++i){let s=e(i);s!==null&&r.push(s);}return r}createObjList(e,t){let r=[];for(let i=0;i<t;++i){let s=e(i);s!==null&&r.push(s.unpack());}return r}};var vp=14,P_=11,yp=2,fc=4294967295;var Rp=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}key(){return this.bb.readUint32(this.bb_pos)}value(){return this.bb.readUint32(this.bb_pos+4)}static sizeOf(){return 8}static createContentOverrideEntry(n,e,t){return n.prep(4,8),n.writeInt32(t),n.writeInt32(e),n.offset()}},Ep=class is{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsContentPromotion(e,t){return (t||new is).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsContentPromotion(e,t){return e.setPosition(e.position()+4),(t||new is).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}discount(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}type(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}status(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}static startContentPromotion(e){e.startObject(5);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addName(e,t){e.addFieldInt32(1,t,0);}static addDiscount(e,t){e.addFieldInt32(2,t,0);}static addType(e,t){e.addFieldInt32(3,t,0);}static addStatus(e,t){e.addFieldInt32(4,t,0);}static endContentPromotion(e){return e.endObject()}static createContentPromotion(e,t,r,i,s,a){return is.startContentPromotion(e),is.addSourceId(e,t),is.addName(e,r),is.addDiscount(e,i),is.addType(e,s),is.addStatus(e,a),is.endContentPromotion(e)}},wp=class ii{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsContentUiPath(e,t){return (t||new ii).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsContentUiPath(e,t){return e.setPosition(e.position()+4),(t||new ii).__init(e.readInt32(e.position())+e.position(),e)}name(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}actionType(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint8(this.bb_pos+e):0}planHandle(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}promotionIdx(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}placementHandle(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}url(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}tourId(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint32(this.bb_pos+e):0}targetBillingPeriod(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.readUint8(this.bb_pos+e):0}description(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.readUint32(this.bb_pos+e):0}static startContentUiPath(e){e.startObject(9);}static addName(e,t){e.addFieldInt32(0,t,0);}static addActionType(e,t){e.addFieldInt8(1,t,0);}static addPlanHandle(e,t){e.addFieldInt32(2,t,0);}static addPromotionIdx(e,t){e.addFieldInt32(3,t,0);}static addPlacementHandle(e,t){e.addFieldInt32(4,t,0);}static addUrl(e,t){e.addFieldInt32(5,t,0);}static addTourId(e,t){e.addFieldInt32(6,t,0);}static addTargetBillingPeriod(e,t){e.addFieldInt8(7,t,0);}static addDescription(e,t){e.addFieldInt32(8,t,0);}static endContentUiPath(e){return e.endObject()}static createContentUiPath(e,t,r,i,s,a,o,p,b,l){return ii.startContentUiPath(e),ii.addName(e,t),ii.addActionType(e,r),ii.addPlanHandle(e,i),ii.addPromotionIdx(e,s),ii.addPlacementHandle(e,a),ii.addUrl(e,o),ii.addTourId(e,p),ii.addTargetBillingPeriod(e,b),ii.addDescription(e,l),ii.endContentUiPath(e)}},Xd=class si{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsEnforcementDefault(e,t){return (t||new si).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsEnforcementDefault(e,t){return e.setPosition(e.position()+4),(t||new si).__init(e.readInt32(e.position())+e.position(),e)}handle(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}entitlementHandle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}softLimitPercent(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}hardLimitPercent(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}softLimitAction(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}hardLimitAction(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}gracePeriodHours(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}notificationChannels(e){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}notificationChannelsLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}notificationChannelsArray(){let e=this.bb.__offset(this.bb_pos,18);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}isActive(){let e=this.bb.__offset(this.bb_pos,20);return e?!!this.bb.readInt8(this.bb_pos+e):false}static startEnforcementDefault(e){e.startObject(9);}static addHandle(e,t){e.addFieldInt32(0,t,0);}static addEntitlementHandle(e,t){e.addFieldInt32(1,t,0);}static addSoftLimitPercent(e,t){e.addFieldInt64(2,t,BigInt("0"));}static addHardLimitPercent(e,t){e.addFieldInt64(3,t,BigInt("0"));}static addSoftLimitAction(e,t){e.addFieldInt32(4,t,0);}static addHardLimitAction(e,t){e.addFieldInt32(5,t,0);}static addGracePeriodHours(e,t){e.addFieldInt64(6,t,BigInt("0"));}static addNotificationChannels(e,t){e.addFieldOffset(7,t,0);}static createNotificationChannelsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startNotificationChannelsVector(e,t){e.startVector(4,t,4);}static addIsActive(e,t){e.addFieldInt8(8,+t,0);}static endEnforcementDefault(e){return e.endObject()}static createEnforcementDefault(e,t,r,i,s,a,o,p,b,l){return si.startEnforcementDefault(e),si.addHandle(e,t),si.addEntitlementHandle(e,r),si.addSoftLimitPercent(e,i),si.addHardLimitPercent(e,s),si.addSoftLimitAction(e,a),si.addHardLimitAction(e,o),si.addGracePeriodHours(e,p),si.addNotificationChannels(e,b),si.addIsActive(e,l),si.endEnforcementDefault(e)}},dc=class Bi{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsEntitlement(e,t){return (t||new Bi).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsEntitlement(e,t){return e.setPosition(e.position()+4),(t||new Bi).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}uniqueHandle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}type(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint8(this.bb_pos+e):0}unit(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}tierHandles(e){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}tierHandlesLength(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__vector_len(this.bb_pos+e):0}tierHandlesArray(){let e=this.bb.__offset(this.bb_pos,14);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startEntitlement(e){e.startObject(6);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addUniqueHandle(e,t){e.addFieldInt32(1,t,0);}static addName(e,t){e.addFieldInt32(2,t,0);}static addType(e,t){e.addFieldInt8(3,t,0);}static addUnit(e,t){e.addFieldInt32(4,t,0);}static addTierHandles(e,t){e.addFieldOffset(5,t,0);}static createTierHandlesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startTierHandlesVector(e,t){e.startVector(4,t,4);}static endEntitlement(e){return e.endObject()}static createEntitlement(e,t,r,i,s,a,o){return Bi.startEntitlement(e),Bi.addSourceId(e,t),Bi.addUniqueHandle(e,r),Bi.addName(e,i),Bi.addType(e,s),Bi.addUnit(e,a),Bi.addTierHandles(e,o),Bi.endEntitlement(e)}},Jd=class ja{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsRuleTarget(e,t){return (t||new ja).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsRuleTarget(e,t){return e.setPosition(e.position()+4),(t||new ja).__init(e.readInt32(e.position())+e.position(),e)}kind(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint8(this.bb_pos+e):0}id(e){let t=this.bb.__offset(this.bb_pos,6);return t?this.bb.__string(this.bb_pos+t,e):null}static startRuleTarget(e){e.startObject(2);}static addKind(e,t){e.addFieldInt8(0,t,0);}static addId(e,t){e.addFieldOffset(1,t,0);}static endRuleTarget(e){return e.endObject()}static createRuleTarget(e,t,r){return ja.startRuleTarget(e),ja.addKind(e,t),ja.addId(e,r),ja.endRuleTarget(e)}},Ap=class qi{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsCreditsFields(e,t){return (t||new qi).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsCreditsFields(e,t){return e.setPosition(e.position()+4),(t||new qi).__init(e.readInt32(e.position())+e.position(),e)}allowance(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}rollover(){let e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):false}maxRollover(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}maxBalance(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readInt64(this.bb_pos+e):BigInt("-1")}initialGrant(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readInt64(this.bb_pos+e):BigInt("-1")}enforcement(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint8(this.bb_pos+e):0}static startCreditsFields(e){e.startObject(6);}static addAllowance(e,t){e.addFieldInt64(0,t,BigInt("0"));}static addRollover(e,t){e.addFieldInt8(1,+t,0);}static addMaxRollover(e,t){e.addFieldInt64(2,t,BigInt("0"));}static addMaxBalance(e,t){e.addFieldInt64(3,t,BigInt("-1"));}static addInitialGrant(e,t){e.addFieldInt64(4,t,BigInt("-1"));}static addEnforcement(e,t){e.addFieldInt8(5,t,0);}static endCreditsFields(e){return e.endObject()}static createCreditsFields(e,t,r,i,s,a,o){return qi.startCreditsFields(e),qi.addAllowance(e,t),qi.addRollover(e,r),qi.addMaxRollover(e,i),qi.addMaxBalance(e,s),qi.addInitialGrant(e,a),qi.addEnforcement(e,o),qi.endCreditsFields(e)}},Op=class Co{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsFeatureFields(e,t){return (t||new Co).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsFeatureFields(e,t){return e.setPosition(e.position()+4),(t||new Co).__init(e.readInt32(e.position())+e.position(),e)}enabled(){let e=this.bb.__offset(this.bb_pos,4);return e?!!this.bb.readInt8(this.bb_pos+e):false}static startFeatureFields(e){e.startObject(1);}static addEnabled(e,t){e.addFieldInt8(0,+t,0);}static endFeatureFields(e){return e.endObject()}static createFeatureFields(e,t){return Co.startFeatureFields(e),Co.addEnabled(e,t),Co.endFeatureFields(e)}},jp=class Fa{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSeatsFields(e,t){return (t||new Fa).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSeatsFields(e,t){return e.setPosition(e.position()+4),(t||new Fa).__init(e.readInt32(e.position())+e.position(),e)}includedCount(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}seatTypeSourceId(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}static startSeatsFields(e){e.startObject(2);}static addIncludedCount(e,t){e.addFieldInt64(0,t,BigInt("0"));}static addSeatTypeSourceId(e,t){e.addFieldInt32(1,t,0);}static endSeatsFields(e){return e.endObject()}static createSeatsFields(e,t,r){return Fa.startSeatsFields(e),Fa.addIncludedCount(e,t),Fa.addSeatTypeSourceId(e,r),Fa.endSeatsFields(e)}},Fp=class ko{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsTieredFields(e,t){return (t||new ko).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsTieredFields(e,t){return e.setPosition(e.position()+4),(t||new ko).__init(e.readInt32(e.position())+e.position(),e)}tierValue(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}static startTieredFields(e){e.startObject(1);}static addTierValue(e,t){e.addFieldInt32(0,t,0);}static endTieredFields(e){return e.endObject()}static createTieredFields(e,t){return ko.startTieredFields(e),ko.addTierValue(e,t),ko.endTieredFields(e)}},Lp=class La{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsUsageLimitFields(e,t){return (t||new La).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsUsageLimitFields(e,t){return e.setPosition(e.position()+4),(t||new La).__init(e.readInt32(e.position())+e.position(),e)}limitValue(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}enforcement(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint8(this.bb_pos+e):0}static startUsageLimitFields(e){e.startObject(2);}static addLimitValue(e,t){e.addFieldInt64(0,t,BigInt("0"));}static addEnforcement(e,t){e.addFieldInt8(1,t,0);}static endUsageLimitFields(e){return e.endObject()}static createUsageLimitFields(e,t,r){return La.startUsageLimitFields(e),La.addLimitValue(e,t),La.addEnforcement(e,r),La.endUsageLimitFields(e)}},Qd=class fi{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsEntitlementRule(e,t){return (t||new fi).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsEntitlementRule(e,t){return e.setPosition(e.position()+4),(t||new fi).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}entitlementIdx(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}planIdxs(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}planIdxsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}planIdxsArray(){let e=this.bb.__offset(this.bb_pos,8);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}segmentIdxs(e){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}segmentIdxsLength(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__vector_len(this.bb_pos+e):0}segmentIdxsArray(){let e=this.bb.__offset(this.bb_pos,10);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}typeFieldsType(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint8(this.bb_pos+e):0}typeFields(e){let t=this.bb.__offset(this.bb_pos,14);return t?this.bb.__union(e,this.bb_pos+t):null}allocation(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint8(this.bb_pos+e):0}targets(e,t){let r=this.bb.__offset(this.bb_pos,18);return r?(t||new Jd).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}targetsLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}static startEntitlementRule(e){e.startObject(8);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addEntitlementIdx(e,t){e.addFieldInt32(1,t,0);}static addPlanIdxs(e,t){e.addFieldOffset(2,t,0);}static createPlanIdxsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startPlanIdxsVector(e,t){e.startVector(4,t,4);}static addSegmentIdxs(e,t){e.addFieldOffset(3,t,0);}static createSegmentIdxsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startSegmentIdxsVector(e,t){e.startVector(4,t,4);}static addTypeFieldsType(e,t){e.addFieldInt8(4,t,0);}static addTypeFields(e,t){e.addFieldOffset(5,t,0);}static addAllocation(e,t){e.addFieldInt8(6,t,0);}static addTargets(e,t){e.addFieldOffset(7,t,0);}static createTargetsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startTargetsVector(e,t){e.startVector(4,t,4);}static endEntitlementRule(e){return e.endObject()}static createEntitlementRule(e,t,r,i,s,a,o,p,b){return fi.startEntitlementRule(e),fi.addSourceId(e,t),fi.addEntitlementIdx(e,r),fi.addPlanIdxs(e,i),fi.addSegmentIdxs(e,s),fi.addTypeFieldsType(e,a),fi.addTypeFields(e,o),fi.addAllocation(e,p),fi.addTargets(e,b),fi.endEntitlementRule(e)}},Vp=class ea{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsExtensionRule(e,t){return (t||new ea).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsExtensionRule(e,t){return e.setPosition(e.position()+4),(t||new ea).__init(e.readInt32(e.position())+e.position(),e)}kind(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}schemaVersion(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}config(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint8(this.bb.__vector(this.bb_pos+t)+e):0}configLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}configArray(){let e=this.bb.__offset(this.bb_pos,8);return e?new Uint8Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startExtensionRule(e){e.startObject(3);}static addKind(e,t){e.addFieldInt32(0,t,0);}static addSchemaVersion(e,t){e.addFieldInt32(1,t,0);}static addConfig(e,t){e.addFieldOffset(2,t,0);}static createConfigVector(e,t){e.startVector(1,t.length,1);for(let r=t.length-1;r>=0;r--)e.addInt8(t[r]);return e.endVector()}static startConfigVector(e,t){e.startVector(1,t,1);}static endExtensionRule(e){return e.endObject()}static createExtensionRule(e,t,r,i){return ea.startExtensionRule(e),ea.addKind(e,t),ea.addSchemaVersion(e,r),ea.addConfig(e,i),ea.endExtensionRule(e)}},eu=class ss{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsFreeTrialRule(e,t){return (t||new ss).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsFreeTrialRule(e,t){return e.setPosition(e.position()+4),(t||new ss).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}handle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}planId(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}usageEntitlementHandle(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}usageLimitValue(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}static startFreeTrialRule(e){e.startObject(5);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addHandle(e,t){e.addFieldInt32(1,t,0);}static addPlanId(e,t){e.addFieldInt32(2,t,0);}static addUsageEntitlementHandle(e,t){e.addFieldInt32(3,t,0);}static addUsageLimitValue(e,t){e.addFieldInt64(4,t,BigInt("0"));}static endFreeTrialRule(e){return e.endObject()}static createFreeTrialRule(e,t,r,i,s,a){return ss.startFreeTrialRule(e),ss.addSourceId(e,t),ss.addHandle(e,r),ss.addPlanId(e,i),ss.addUsageEntitlementHandle(e,s),ss.addUsageLimitValue(e,a),ss.endFreeTrialRule(e)}},tu=class Pr{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsHeader(e,t){return (t||new Pr).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsHeader(e,t){return e.setPosition(e.position()+4),(t||new Pr).__init(e.readInt32(e.position())+e.position(),e)}magic(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.__string(this.bb_pos+t,e):null}schemaVersion(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}runtimeAbi(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}configVersion(e){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.__string(this.bb_pos+t,e):null}exportedAtMs(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}builtAtMs(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}sourceSha256(e){let t=this.bb.__offset(this.bb_pos,16);return t?this.bb.__string(this.bb_pos+t,e):null}tenantId(e){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.__string(this.bb_pos+t,e):null}changeSetId(e){let t=this.bb.__offset(this.bb_pos,20);return t?this.bb.__string(this.bb_pos+t,e):null}packageSchemaVersion(e){let t=this.bb.__offset(this.bb_pos,22);return t?this.bb.__string(this.bb_pos+t,e):null}environmentId(e){let t=this.bb.__offset(this.bb_pos,24);return t?this.bb.__string(this.bb_pos+t,e):null}playbookHandle(e){let t=this.bb.__offset(this.bb_pos,26);return t?this.bb.__string(this.bb_pos+t,e):null}static startHeader(e){e.startObject(12);}static addMagic(e,t){e.addFieldOffset(0,t,0);}static addSchemaVersion(e,t){e.addFieldInt32(1,t,0);}static addRuntimeAbi(e,t){e.addFieldInt32(2,t,0);}static addConfigVersion(e,t){e.addFieldOffset(3,t,0);}static addExportedAtMs(e,t){e.addFieldInt64(4,t,BigInt("0"));}static addBuiltAtMs(e,t){e.addFieldInt64(5,t,BigInt("0"));}static addSourceSha256(e,t){e.addFieldOffset(6,t,0);}static addTenantId(e,t){e.addFieldOffset(7,t,0);}static addChangeSetId(e,t){e.addFieldOffset(8,t,0);}static addPackageSchemaVersion(e,t){e.addFieldOffset(9,t,0);}static addEnvironmentId(e,t){e.addFieldOffset(10,t,0);}static addPlaybookHandle(e,t){e.addFieldOffset(11,t,0);}static endHeader(e){let t=e.endObject();return e.requiredField(t,4),e.requiredField(t,10),t}static createHeader(e,t,r,i,s,a,o,p,b,l,y,S,I){return Pr.startHeader(e),Pr.addMagic(e,t),Pr.addSchemaVersion(e,r),Pr.addRuntimeAbi(e,i),Pr.addConfigVersion(e,s),Pr.addExportedAtMs(e,a),Pr.addBuiltAtMs(e,o),Pr.addSourceSha256(e,p),Pr.addTenantId(e,b),Pr.addChangeSetId(e,l),Pr.addPackageSchemaVersion(e,y),Pr.addEnvironmentId(e,S),Pr.addPlaybookHandle(e,I),Pr.endHeader(e)}},Up=class ta{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMessageBlockChild(e,t){return (t||new ta).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMessageBlockChild(e,t){return e.setPosition(e.position()+4),(t||new ta).__init(e.readInt32(e.position())+e.position(),e)}slot(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}blockIdx(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}blockSourceId(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}static startMessageBlockChild(e){e.startObject(3);}static addSlot(e,t){e.addFieldInt32(0,t,0);}static addBlockIdx(e,t){e.addFieldInt32(1,t,0);}static addBlockSourceId(e,t){e.addFieldInt32(2,t,0);}static endMessageBlockChild(e){return e.endObject()}static createMessageBlockChild(e,t,r,i){return ta.startMessageBlockChild(e),ta.addSlot(e,t),ta.addBlockIdx(e,r),ta.addBlockSourceId(e,i),ta.endMessageBlockChild(e)}},nu=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}key(){return this.bb.readUint32(this.bb_pos)}value(){return this.bb.readUint32(this.bb_pos+4)}static sizeOf(){return 8}static createMessageBlockField(n,e,t){return n.prep(4,8),n.writeInt32(t),n.writeInt32(e),n.offset()}},Va=class as{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMessageBlockContent(e,t){return (t||new as).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMessageBlockContent(e,t){return e.setPosition(e.position()+4),(t||new as).__init(e.readInt32(e.position())+e.position(),e)}header(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}body(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}ctaLabel(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}secondaryCtaLabel(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}extra(e,t){let r=this.bb.__offset(this.bb_pos,12);return r?(t||new nu).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}extraLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}static startMessageBlockContent(e){e.startObject(5);}static addHeader(e,t){e.addFieldInt32(0,t,0);}static addBody(e,t){e.addFieldInt32(1,t,0);}static addCtaLabel(e,t){e.addFieldInt32(2,t,0);}static addSecondaryCtaLabel(e,t){e.addFieldInt32(3,t,0);}static addExtra(e,t){e.addFieldOffset(4,t,0);}static startExtraVector(e,t){e.startVector(8,t,4);}static endMessageBlockContent(e){return e.endObject()}static createMessageBlockContent(e,t,r,i,s,a){return as.startMessageBlockContent(e),as.addHeader(e,t),as.addBody(e,r),as.addCtaLabel(e,i),as.addSecondaryCtaLabel(e,s),as.addExtra(e,a),as.endMessageBlockContent(e)}},ru=class xp{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMessageBlockSegmentOverride(e,t){return (t||new xp).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMessageBlockSegmentOverride(e,t){return e.setPosition(e.position()+4),(t||new xp).__init(e.readInt32(e.position())+e.position(),e)}segmentValue(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}content(e){let t=this.bb.__offset(this.bb_pos,6);return t?(e||new Va).__init(this.bb.__indirect(this.bb_pos+t),this.bb):null}static startMessageBlockSegmentOverride(e){e.startObject(2);}static addSegmentValue(e,t){e.addFieldInt32(0,t,0);}static addContent(e,t){e.addFieldOffset(1,t,0);}static endMessageBlockSegmentOverride(e){return e.endObject()}},iu=class Sp{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMessageBlock(e,t){return (t||new Sp).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMessageBlock(e,t){return e.setPosition(e.position()+4),(t||new Sp).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}tenantId(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}surfaceTemplateIdx(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}defaultContent(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new Va).__init(this.bb.__indirect(this.bb_pos+t),this.bb):null}segmentOverrides(e,t){let r=this.bb.__offset(this.bb_pos,14);return r?(t||new ru).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}segmentOverridesLength(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__vector_len(this.bb_pos+e):0}childBlocks(e,t){let r=this.bb.__offset(this.bb_pos,16);return r?(t||new Up).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}childBlocksLength(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__vector_len(this.bb_pos+e):0}tokensUsed(e){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}tokensUsedLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}tokensUsedArray(){let e=this.bb.__offset(this.bb_pos,18);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}status(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.readUint8(this.bb_pos+e):0}createdAt(){let e=this.bb.__offset(this.bb_pos,22);return e?this.bb.readUint32(this.bb_pos+e):0}updatedAt(){let e=this.bb.__offset(this.bb_pos,24);return e?this.bb.readUint32(this.bb_pos+e):0}static startMessageBlock(e){e.startObject(11);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addTenantId(e,t){e.addFieldInt32(1,t,0);}static addName(e,t){e.addFieldInt32(2,t,0);}static addSurfaceTemplateIdx(e,t){e.addFieldInt32(3,t,0);}static addDefaultContent(e,t){e.addFieldOffset(4,t,0);}static addSegmentOverrides(e,t){e.addFieldOffset(5,t,0);}static createSegmentOverridesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSegmentOverridesVector(e,t){e.startVector(4,t,4);}static addChildBlocks(e,t){e.addFieldOffset(6,t,0);}static createChildBlocksVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startChildBlocksVector(e,t){e.startVector(4,t,4);}static addTokensUsed(e,t){e.addFieldOffset(7,t,0);}static createTokensUsedVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startTokensUsedVector(e,t){e.startVector(4,t,4);}static addStatus(e,t){e.addFieldInt8(8,t,0);}static addCreatedAt(e,t){e.addFieldInt32(9,t,0);}static addUpdatedAt(e,t){e.addFieldInt32(10,t,0);}static endMessageBlock(e){return e.endObject()}},su=class os{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsMeterBinding(e,t){return (t||new os).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsMeterBinding(e,t){return e.setPosition(e.position()+4),(t||new os).__init(e.readInt32(e.position())+e.position(),e)}handle(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}entitlementHandle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}meterHandle(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}limit(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}resetPeriod(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}static startMeterBinding(e){e.startObject(5);}static addHandle(e,t){e.addFieldInt32(0,t,0);}static addEntitlementHandle(e,t){e.addFieldInt32(1,t,0);}static addMeterHandle(e,t){e.addFieldInt32(2,t,0);}static addLimit(e,t){e.addFieldInt64(3,t,BigInt("0"));}static addResetPeriod(e,t){e.addFieldInt32(4,t,0);}static endMeterBinding(e){return e.endObject()}static createMeterBinding(e,t,r,i,s,a){return os.startMeterBinding(e),os.addHandle(e,t),os.addEntitlementHandle(e,r),os.addMeterHandle(e,i),os.addLimit(e,s),os.addResetPeriod(e,a),os.endMeterBinding(e)}},Bp=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}key(){return this.bb.readUint32(this.bb_pos)}value(){return this.bb.readUint32(this.bb_pos+4)}static sizeOf(){return 8}static createTokenValueEntry(n,e,t){return n.prep(4,8),n.writeInt32(t),n.writeInt32(e),n.offset()}},qp=class hi{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPersonalizationToken(e,t){return (t||new hi).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPersonalizationToken(e,t){return e.setPosition(e.position()+4),(t||new hi).__init(e.readInt32(e.position())+e.position(),e)}token(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}label(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}description(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}category(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint8(this.bb_pos+e):0}dataSource(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}exampleValue(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}valueMap(e,t){let r=this.bb.__offset(this.bb_pos,16);return r?(t||new Bp).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}valueMapLength(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__vector_len(this.bb_pos+e):0}format(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.readUint8(this.bb_pos+e):0}static startPersonalizationToken(e){e.startObject(8);}static addToken(e,t){e.addFieldInt32(0,t,0);}static addLabel(e,t){e.addFieldInt32(1,t,0);}static addDescription(e,t){e.addFieldInt32(2,t,0);}static addCategory(e,t){e.addFieldInt8(3,t,0);}static addDataSource(e,t){e.addFieldInt32(4,t,0);}static addExampleValue(e,t){e.addFieldInt32(5,t,0);}static addValueMap(e,t){e.addFieldOffset(6,t,0);}static startValueMapVector(e,t){e.startVector(8,t,4);}static addFormat(e,t){e.addFieldInt8(7,t,0);}static endPersonalizationToken(e){return e.endObject()}static createPersonalizationToken(e,t,r,i,s,a,o,p,b){return hi.startPersonalizationToken(e),hi.addToken(e,t),hi.addLabel(e,r),hi.addDescription(e,i),hi.addCategory(e,s),hi.addDataSource(e,a),hi.addExampleValue(e,o),hi.addValueMap(e,p),hi.addFormat(e,b),hi.endPersonalizationToken(e)}},au=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}type(){return this.bb.readUint8(this.bb_pos)}trialType(){return this.bb.readUint8(this.bb_pos+1)}slotIdx(){return this.bb.readUint32(this.bb_pos+4)}entitlementIdx(){return this.bb.readUint32(this.bb_pos+8)}tierThreshold(){return this.bb.readUint32(this.bb_pos+12)}qualifier(){return this.bb.readUint32(this.bb_pos+16)}thresholdPercent(){return this.bb.readFloat32(this.bb_pos+20)}progressPercent(){return this.bb.readFloat32(this.bb_pos+24)}daysBeforeEnd(){return this.bb.readInt32(this.bb_pos+28)}static sizeOf(){return 32}static createPlacementTrigger(n,e,t,r,i,s,a,o,p,b){return n.prep(4,32),n.writeInt32(b),n.writeFloat32(p),n.writeFloat32(o),n.writeInt32(a),n.writeInt32(s),n.writeInt32(i),n.writeInt32(r),n.pad(2),n.writeInt8(t),n.writeInt8(e),n.offset()}},hc=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}hasMaxPerPeriod(){return !!this.bb.readInt8(this.bb_pos)}maxPerPeriod(){return this.bb.readUint8(this.bb_pos+1)}maxPerPeriodCount(){return this.bb.readUint32(this.bb_pos+4)}cooldownDays(){return this.bb.readInt32(this.bb_pos+8)}static sizeOf(){return 12}static createPayloadCaps(n,e,t,r,i){return n.prep(4,12),n.writeInt32(i),n.writeInt32(r),n.pad(2),n.writeInt8(t),n.writeInt8(+!!e),n.offset()}},ou=class js{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsCtaConfig(e,t){return (t||new js).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsCtaConfig(e,t){return e.setPosition(e.position()+4),(t||new js).__init(e.readInt32(e.position())+e.position(),e)}label(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}path(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}configKeys(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}configKeysLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}configKeysArray(){let e=this.bb.__offset(this.bb_pos,8);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}configValues(e){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}configValuesLength(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__vector_len(this.bb_pos+e):0}configValuesArray(){let e=this.bb.__offset(this.bb_pos,10);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startCtaConfig(e){e.startObject(4);}static addLabel(e,t){e.addFieldInt32(0,t,0);}static addPath(e,t){e.addFieldInt32(1,t,0);}static addConfigKeys(e,t){e.addFieldOffset(2,t,0);}static createConfigKeysVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startConfigKeysVector(e,t){e.startVector(4,t,4);}static addConfigValues(e,t){e.addFieldOffset(3,t,0);}static createConfigValuesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startConfigValuesVector(e,t){e.startVector(4,t,4);}static endCtaConfig(e){return e.endObject()}static createCtaConfig(e,t,r,i,s){return js.startCtaConfig(e),js.addLabel(e,t),js.addPath(e,r),js.addConfigKeys(e,i),js.addConfigValues(e,s),js.endCtaConfig(e)}},Dp=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}key(){return this.bb.readUint32(this.bb_pos)}value(){return this.bb.readUint32(this.bb_pos+4)}static sizeOf(){return 8}static createSurfaceFieldEntry(n,e,t){return n.prep(4,8),n.writeInt32(t),n.writeInt32(e),n.offset()}},Oo=class Fs{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPayloadSurface(e,t){return (t||new Fs).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPayloadSurface(e,t){return e.setPosition(e.position()+4),(t||new Fs).__init(e.readInt32(e.position())+e.position(),e)}templateIdx(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}templateSourceId(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}fields(e,t){let r=this.bb.__offset(this.bb_pos,8);return r?(t||new Dp).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}fieldsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}ctas(e,t){let r=this.bb.__offset(this.bb_pos,10);return r?(t||new ou).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}ctasLength(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__vector_len(this.bb_pos+e):0}static startPayloadSurface(e){e.startObject(4);}static addTemplateIdx(e,t){e.addFieldInt32(0,t,0);}static addTemplateSourceId(e,t){e.addFieldInt32(1,t,0);}static addFields(e,t){e.addFieldOffset(2,t,0);}static startFieldsVector(e,t){e.startVector(8,t,4);}static addCtas(e,t){e.addFieldOffset(3,t,0);}static createCtasVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startCtasVector(e,t){e.startVector(4,t,4);}static endPayloadSurface(e){return e.endObject()}static createPayloadSurface(e,t,r,i,s){return Fs.startPayloadSurface(e),Fs.addTemplateIdx(e,t),Fs.addTemplateSourceId(e,r),Fs.addFields(e,i),Fs.addCtas(e,s),Fs.endPayloadSurface(e)}},lu=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}kind(){return this.bb.readUint8(this.bb_pos)}segmentIdx(){return this.bb.readUint32(this.bb_pos+4)}planIdx(){return this.bb.readUint32(this.bb_pos+8)}literal(){return this.bb.readUint32(this.bb_pos+12)}static sizeOf(){return 16}static createSegmentChip(n,e,t,r,i){return n.prep(4,16),n.writeInt32(i),n.writeInt32(r),n.writeInt32(t),n.pad(3),n.writeInt8(e),n.offset()}},gc=class na{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPayloadTarget(e,t){return (t||new na).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPayloadTarget(e,t){return e.setPosition(e.position()+4),(t||new na).__init(e.readInt32(e.position())+e.position(),e)}planIdxs(e){let t=this.bb.__offset(this.bb_pos,4);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}planIdxsLength(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.__vector_len(this.bb_pos+e):0}planIdxsArray(){let e=this.bb.__offset(this.bb_pos,4);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}segmentChips(e,t){let r=this.bb.__offset(this.bb_pos,6);return r?(t||new lu).__init(this.bb.__vector(this.bb_pos+r)+e*16,this.bb):null}segmentChipsLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}billingCadences(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}billingCadencesLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}billingCadencesArray(){let e=this.bb.__offset(this.bb_pos,8);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startPayloadTarget(e){e.startObject(3);}static addPlanIdxs(e,t){e.addFieldOffset(0,t,0);}static createPlanIdxsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startPlanIdxsVector(e,t){e.startVector(4,t,4);}static addSegmentChips(e,t){e.addFieldOffset(1,t,0);}static startSegmentChipsVector(e,t){e.startVector(16,t,4);}static addBillingCadences(e,t){e.addFieldOffset(2,t,0);}static createBillingCadencesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startBillingCadencesVector(e,t){e.startVector(4,t,4);}static endPayloadTarget(e){return e.endObject()}static createPayloadTarget(e,t,r,i){return na.startPayloadTarget(e),na.addPlanIdxs(e,t),na.addSegmentChips(e,r),na.addBillingCadences(e,i),na.endPayloadTarget(e)}},cu=class Ip{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsStudioPayload(e,t){return (t||new Ip).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsStudioPayload(e,t){return e.setPosition(e.position()+4),(t||new Ip).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}target(e){let t=this.bb.__offset(this.bb_pos,6);return t?(e||new gc).__init(this.bb.__indirect(this.bb_pos+t),this.bb):null}surfaces(e,t){let r=this.bb.__offset(this.bb_pos,8);return r?(t||new Oo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}surfacesLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}caps(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new hc).__init(this.bb_pos+t,this.bb):null}createdAt(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}recommendationStrategy(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint8(this.bb_pos+e):0}recommendationPlanOverride(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint32(this.bb_pos+e):0}surfaceSlotIds(e){let t=this.bb.__offset(this.bb_pos,18);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}surfaceSlotIdsLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}surfaceSlotIdsArray(){let e=this.bb.__offset(this.bb_pos,18);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}remindLaterMinutes(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.readInt32(this.bb_pos+e):-1}static startStudioPayload(e){e.startObject(9);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addTarget(e,t){e.addFieldOffset(1,t,0);}static addSurfaces(e,t){e.addFieldOffset(2,t,0);}static createSurfacesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSurfacesVector(e,t){e.startVector(4,t,4);}static addCaps(e,t){e.addFieldStruct(3,t,0);}static addCreatedAt(e,t){e.addFieldInt32(4,t,0);}static addRecommendationStrategy(e,t){e.addFieldInt8(5,t,0);}static addRecommendationPlanOverride(e,t){e.addFieldInt32(6,t,0);}static addSurfaceSlotIds(e,t){e.addFieldOffset(7,t,0);}static createSurfaceSlotIdsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startSurfaceSlotIdsVector(e,t){e.startVector(4,t,4);}static addRemindLaterMinutes(e,t){e.addFieldInt32(8,t,-1);}static endStudioPayload(e){return e.endObject()}},Eo=class Pp{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPlacement(e,t){return (t||new Pp).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPlacement(e,t){return e.setPosition(e.position()+4),(t||new Pp).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}category(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint8(this.bb_pos+e):0}trigger(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new au).__init(this.bb_pos+t,this.bb):null}payloads(e,t){let r=this.bb.__offset(this.bb_pos,12);return r?(t||new cu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}payloadsLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}order(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}static startPlacement(e){e.startObject(6);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addName(e,t){e.addFieldInt32(1,t,0);}static addCategory(e,t){e.addFieldInt8(2,t,0);}static addTrigger(e,t){e.addFieldStruct(3,t,0);}static addPayloads(e,t){e.addFieldOffset(4,t,0);}static createPayloadsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPayloadsVector(e,t){e.startVector(4,t,4);}static addOrder(e,t){e.addFieldInt32(5,t,0);}static endPlacement(e){return e.endObject()}},du=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}messageBlockIdx(){return this.bb.readUint32(this.bb_pos)}uiPathIdx(){return this.bb.readUint32(this.bb_pos+4)}promotionIdx(){return this.bb.readUint32(this.bb_pos+8)}contentPayloadSourceId(){return this.bb.readUint32(this.bb_pos+12)}static sizeOf(){return 16}static createContentLink(n,e,t,r,i){return n.prep(4,16),n.writeInt32(i),n.writeInt32(r),n.writeInt32(t),n.writeInt32(e),n.offset()}},uu=class Tp{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPlacementPayload(e,t){return (t||new Tp).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPlacementPayload(e,t){return e.setPosition(e.position()+4),(t||new Tp).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}placementIdx(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}placementSourceId(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}target(e){let t=this.bb.__offset(this.bb_pos,10);return t?(e||new gc).__init(this.bb.__indirect(this.bb_pos+t),this.bb):null}caps(e){let t=this.bb.__offset(this.bb_pos,12);return t?(e||new hc).__init(this.bb_pos+t,this.bb):null}createdAt(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}updatedAt(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint32(this.bb_pos+e):0}sourceMode(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.readUint8(this.bb_pos+e):0}surfaces(e,t){let r=this.bb.__offset(this.bb_pos,20);return r?(t||new Oo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}surfacesLength(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.__vector_len(this.bb_pos+e):0}contentLink(e){let t=this.bb.__offset(this.bb_pos,22);return t?(e||new du).__init(this.bb_pos+t,this.bb):null}surfaceSlotIds(e){let t=this.bb.__offset(this.bb_pos,24);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}surfaceSlotIdsLength(){let e=this.bb.__offset(this.bb_pos,24);return e?this.bb.__vector_len(this.bb_pos+e):0}surfaceSlotIdsArray(){let e=this.bb.__offset(this.bb_pos,24);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}remindLaterMinutes(){let e=this.bb.__offset(this.bb_pos,26);return e?this.bb.readInt32(this.bb_pos+e):-1}static startPlacementPayload(e){e.startObject(12);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addPlacementIdx(e,t){e.addFieldInt32(1,t,0);}static addPlacementSourceId(e,t){e.addFieldInt32(2,t,0);}static addTarget(e,t){e.addFieldOffset(3,t,0);}static addCaps(e,t){e.addFieldStruct(4,t,0);}static addCreatedAt(e,t){e.addFieldInt32(5,t,0);}static addUpdatedAt(e,t){e.addFieldInt32(6,t,0);}static addSourceMode(e,t){e.addFieldInt8(7,t,0);}static addSurfaces(e,t){e.addFieldOffset(8,t,0);}static createSurfacesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSurfacesVector(e,t){e.startVector(4,t,4);}static addContentLink(e,t){e.addFieldStruct(9,t,0);}static addSurfaceSlotIds(e,t){e.addFieldOffset(10,t,0);}static createSurfaceSlotIdsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startSurfaceSlotIdsVector(e,t){e.startVector(4,t,4);}static addRemindLaterMinutes(e,t){e.addFieldInt32(11,t,-1);}static endPlacementPayload(e){return e.endObject()}},mu=class gi{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPlacementSetting(e,t){return (t||new gi).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPlacementSetting(e,t){return e.setPosition(e.position()+4),(t||new gi).__init(e.readInt32(e.position())+e.position(),e)}handle(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}globalFrequencyCap(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}globalFrequencyCapPeriod(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}suppressForPaid(){let e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):false}suppressForTrial(){let e=this.bb.__offset(this.bb_pos,12);return e?!!this.bb.readInt8(this.bb_pos+e):false}defaultDismissCooldownHours(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}allowStacking(){let e=this.bb.__offset(this.bb_pos,16);return e?!!this.bb.readInt8(this.bb_pos+e):false}priorityCollisionStrategy(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.readUint32(this.bb_pos+e):0}static startPlacementSetting(e){e.startObject(8);}static addHandle(e,t){e.addFieldInt32(0,t,0);}static addGlobalFrequencyCap(e,t){e.addFieldInt32(1,t,0);}static addGlobalFrequencyCapPeriod(e,t){e.addFieldInt32(2,t,0);}static addSuppressForPaid(e,t){e.addFieldInt8(3,+t,0);}static addSuppressForTrial(e,t){e.addFieldInt8(4,+t,0);}static addDefaultDismissCooldownHours(e,t){e.addFieldInt64(5,t,BigInt("0"));}static addAllowStacking(e,t){e.addFieldInt8(6,+t,0);}static addPriorityCollisionStrategy(e,t){e.addFieldInt32(7,t,0);}static endPlacementSetting(e){return e.endObject()}static createPlacementSetting(e,t,r,i,s,a,o,p,b){return gi.startPlacementSetting(e),gi.addHandle(e,t),gi.addGlobalFrequencyCap(e,r),gi.addGlobalFrequencyCapPeriod(e,i),gi.addSuppressForPaid(e,s),gi.addSuppressForTrial(e,a),gi.addDefaultDismissCooldownHours(e,o),gi.addAllowStacking(e,p),gi.addPriorityCollisionStrategy(e,b),gi.endPlacementSetting(e)}},uc=class Di{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPlacementSlot(e,t){return (t||new Di).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPlacementSlot(e,t){return e.setPosition(e.position()+4),(t||new Di).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}label(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}description(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}surfaceType(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}placementHandle(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}template(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}static startPlacementSlot(e){e.startObject(6);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addLabel(e,t){e.addFieldInt32(1,t,0);}static addDescription(e,t){e.addFieldInt32(2,t,0);}static addSurfaceType(e,t){e.addFieldInt32(3,t,0);}static addPlacementHandle(e,t){e.addFieldInt32(4,t,0);}static addTemplate(e,t){e.addFieldInt32(5,t,0);}static endPlacementSlot(e){return e.endObject()}static createPlacementSlot(e,t,r,i,s,a,o){return Di.startPlacementSlot(e),Di.addSourceId(e,t),Di.addLabel(e,r),Di.addDescription(e,i),Di.addSurfaceType(e,s),Di.addPlacementHandle(e,a),Di.addTemplate(e,o),Di.endPlacementSlot(e)}},wo=class ls{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsPlan(e,t){return (t||new ls).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsPlan(e,t){return e.setPosition(e.position()+4),(t||new ls).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}uniqueHandle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}tierPosition(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}sortOrder(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}static startPlan(e){e.startObject(5);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addUniqueHandle(e,t){e.addFieldInt32(1,t,0);}static addName(e,t){e.addFieldInt32(2,t,0);}static addTierPosition(e,t){e.addFieldInt32(3,t,0);}static addSortOrder(e,t){e.addFieldInt32(4,t,0);}static endPlan(e){return e.endObject()}static createPlan(e,t,r,i,s,a){return ls.startPlan(e),ls.addSourceId(e,t),ls.addUniqueHandle(e,r),ls.addName(e,i),ls.addTierPosition(e,s),ls.addSortOrder(e,a),ls.endPlan(e)}},sa=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}start(){return this.bb.readUint32(this.bb_pos)}count(){return this.bb.readUint32(this.bb_pos+4)}static sizeOf(){return 8}static createRange(n,e,t){return n.prep(4,8),n.writeInt32(t),n.writeInt32(e),n.offset()}},pu=class _i{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsReverseTrialRule(e,t){return (t||new _i).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsReverseTrialRule(e,t){return e.setPosition(e.position()+4),(t||new _i).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}handle(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}premiumPlanId(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}fallbackPlanId(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint32(this.bb_pos+e):0}entitlementsDuringTrial(e){let t=this.bb.__offset(this.bb_pos,12);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}entitlementsDuringTrialLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}entitlementsDuringTrialArray(){let e=this.bb.__offset(this.bb_pos,12);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}isActive(){let e=this.bb.__offset(this.bb_pos,14);return e?!!this.bb.readInt8(this.bb_pos+e):false}usageEntitlementHandle(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint32(this.bb_pos+e):0}usageLimitValue(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.readInt64(this.bb_pos+e):BigInt("0")}static startReverseTrialRule(e){e.startObject(8);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addHandle(e,t){e.addFieldInt32(1,t,0);}static addPremiumPlanId(e,t){e.addFieldInt32(2,t,0);}static addFallbackPlanId(e,t){e.addFieldInt32(3,t,0);}static addEntitlementsDuringTrial(e,t){e.addFieldOffset(4,t,0);}static createEntitlementsDuringTrialVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startEntitlementsDuringTrialVector(e,t){e.startVector(4,t,4);}static addIsActive(e,t){e.addFieldInt8(5,+t,0);}static addUsageEntitlementHandle(e,t){e.addFieldInt32(6,t,0);}static addUsageLimitValue(e,t){e.addFieldInt64(7,t,BigInt("0"));}static endReverseTrialRule(e){return e.endObject()}static createReverseTrialRule(e,t,r,i,s,a,o,p,b){return _i.startReverseTrialRule(e),_i.addSourceId(e,t),_i.addHandle(e,r),_i.addPremiumPlanId(e,i),_i.addFallbackPlanId(e,s),_i.addEntitlementsDuringTrial(e,a),_i.addIsActive(e,o),_i.addUsageEntitlementHandle(e,p),_i.addUsageLimitValue(e,b),_i.endReverseTrialRule(e)}},fu=class Ls{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSeatType(e,t){return (t||new Ls).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSeatType(e,t){return e.setPosition(e.position()+4),(t||new Ls).__init(e.readInt32(e.position())+e.position(),e)}handle(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}isDefault(){let e=this.bb.__offset(this.bb_pos,8);return e?!!this.bb.readInt8(this.bb_pos+e):false}entitlementHandles(e){let t=this.bb.__offset(this.bb_pos,10);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}entitlementHandlesLength(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__vector_len(this.bb_pos+e):0}entitlementHandlesArray(){let e=this.bb.__offset(this.bb_pos,10);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startSeatType(e){e.startObject(4);}static addHandle(e,t){e.addFieldInt32(0,t,0);}static addName(e,t){e.addFieldInt32(1,t,0);}static addIsDefault(e,t){e.addFieldInt8(2,+t,0);}static addEntitlementHandles(e,t){e.addFieldOffset(3,t,0);}static createEntitlementHandlesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startEntitlementHandlesVector(e,t){e.startVector(4,t,4);}static endSeatType(e){return e.endObject()}static createSeatType(e,t,r,i,s){return Ls.startSeatType(e),Ls.addHandle(e,t),Ls.addName(e,r),Ls.addIsDefault(e,i),Ls.addEntitlementHandles(e,s),Ls.endSeatType(e)}},hu=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}fieldIdx(){return this.bb.readUint32(this.bb_pos)}op(){return this.bb.readUint8(this.bb_pos+4)}value(){return this.bb.readUint32(this.bb_pos+8)}static sizeOf(){return 12}static createSegmentPredicate(n,e,t,r){return n.prep(4,12),n.writeInt32(r),n.pad(3),n.writeInt8(t),n.writeInt32(e),n.offset()}},mc=class Si{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSegment(e,t){return (t||new Si).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSegment(e,t){return e.setPosition(e.position()+4),(t||new Si).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}slug(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}combinator(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.readUint8(this.bb_pos+e):0}predicates(e,t){let r=this.bb.__offset(this.bb_pos,12);return r?(t||new hu).__init(this.bb.__vector(this.bb_pos+r)+e*12,this.bb):null}predicatesLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}dimensionId(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.readUint32(this.bb_pos+e):0}experimentId(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.readUint32(this.bb_pos+e):0}static startSegment(e){e.startObject(7);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addName(e,t){e.addFieldInt32(1,t,0);}static addSlug(e,t){e.addFieldInt32(2,t,0);}static addCombinator(e,t){e.addFieldInt8(3,t,0);}static addPredicates(e,t){e.addFieldOffset(4,t,0);}static startPredicatesVector(e,t){e.startVector(12,t,4);}static addDimensionId(e,t){e.addFieldInt32(5,t,0);}static addExperimentId(e,t){e.addFieldInt32(6,t,0);}static endSegment(e){return e.endObject()}static createSegment(e,t,r,i,s,a,o,p){return Si.startSegment(e),Si.addSourceId(e,t),Si.addName(e,r),Si.addSlug(e,i),Si.addCombinator(e,s),Si.addPredicates(e,a),Si.addDimensionId(e,o),Si.addExperimentId(e,p),Si.endSegment(e)}},gu=class cs{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSegmentDimension(e,t){return (t||new cs).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSegmentDimension(e,t){return e.setPosition(e.position()+4),(t||new cs).__init(e.readInt32(e.position())+e.position(),e)}handle(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}name(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}category(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.readUint32(this.bb_pos+e):0}visibilityToggle(){let e=this.bb.__offset(this.bb_pos,10);return e?!!this.bb.readInt8(this.bb_pos+e):false}sourceType(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.readUint32(this.bb_pos+e):0}static startSegmentDimension(e){e.startObject(5);}static addHandle(e,t){e.addFieldInt32(0,t,0);}static addName(e,t){e.addFieldInt32(1,t,0);}static addCategory(e,t){e.addFieldInt32(2,t,0);}static addVisibilityToggle(e,t){e.addFieldInt8(3,+t,0);}static addSourceType(e,t){e.addFieldInt32(4,t,0);}static endSegmentDimension(e){return e.endObject()}static createSegmentDimension(e,t,r,i,s,a){return cs.startSegmentDimension(e),cs.addHandle(e,t),cs.addName(e,r),cs.addCategory(e,i),cs.addVisibilityToggle(e,s),cs.addSourceType(e,a),cs.endSegmentDimension(e)}},Mp=class ra{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSlotConfig(e,t){return (t||new ra).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSlotConfig(e,t){return e.setPosition(e.position()+4),(t||new ra).__init(e.readInt32(e.position())+e.position(),e)}slotIdx(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}active(){let e=this.bb.__offset(this.bb_pos,6);return e?!!this.bb.readInt8(this.bb_pos+e):false}triggers(e){let t=this.bb.__offset(this.bb_pos,8);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}triggersLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}triggersArray(){let e=this.bb.__offset(this.bb_pos,8);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}static startSlotConfig(e){e.startObject(3);}static addSlotIdx(e,t){e.addFieldInt32(0,t,0);}static addActive(e,t){e.addFieldInt8(1,+t,0);}static addTriggers(e,t){e.addFieldOffset(2,t,0);}static createTriggersVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startTriggersVector(e,t){e.startVector(4,t,4);}static endSlotConfig(e){return e.endObject()}static createSlotConfig(e,t,r,i){return ra.startSlotConfig(e),ra.addSlotIdx(e,t),ra.addActive(e,r),ra.addTriggers(e,i),ra.endSlotConfig(e)}},_u=class{constructor(){this.bb=null,this.bb_pos=0;}__init(n,e){return this.bb_pos=n,this.bb=e,this}name(){return this.bb.readUint32(this.bb_pos)}type(){return this.bb.readUint32(this.bb_pos+4)}required(){return !!this.bb.readInt8(this.bb_pos+8)}static sizeOf(){return 12}static createSurfaceTemplateField(n,e,t,r){return n.prep(4,12),n.pad(3),n.writeInt8(+!!r),n.writeInt32(t),n.writeInt32(e),n.offset()}},pc=class ia{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsSurfaceTemplate(e,t){return (t||new ia).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsSurfaceTemplate(e,t){return e.setPosition(e.position()+4),(t||new ia).__init(e.readInt32(e.position())+e.position(),e)}sourceId(){let e=this.bb.__offset(this.bb_pos,4);return e?this.bb.readUint32(this.bb_pos+e):0}surfaceType(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.readUint32(this.bb_pos+e):0}fields(e,t){let r=this.bb.__offset(this.bb_pos,8);return r?(t||new _u).__init(this.bb.__vector(this.bb_pos+r)+e*12,this.bb):null}fieldsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}static startSurfaceTemplate(e){e.startObject(3);}static addSourceId(e,t){e.addFieldInt32(0,t,0);}static addSurfaceType(e,t){e.addFieldInt32(1,t,0);}static addFields(e,t){e.addFieldOffset(2,t,0);}static startFieldsVector(e,t){e.startVector(12,t,4);}static endSurfaceTemplate(e){return e.endObject()}static createSurfaceTemplate(e,t,r,i){return ia.startSurfaceTemplate(e),ia.addSourceId(e,t),ia.addSurfaceType(e,r),ia.addFields(e,i),ia.endSurfaceTemplate(e)}},Cp=class Zt{constructor(){this.bb=null,this.bb_pos=0;}__init(e,t){return this.bb_pos=e,this.bb=t,this}static getRootAsRuleBundle(e,t){return (t||new Zt).__init(e.readInt32(e.position())+e.position(),e)}static getSizePrefixedRootAsRuleBundle(e,t){return e.setPosition(e.position()+4),(t||new Zt).__init(e.readInt32(e.position())+e.position(),e)}static bufferHasIdentifier(e){return e.__has_identifier("RVTB")}header(e){let t=this.bb.__offset(this.bb_pos,4);return t?(e||new tu).__init(this.bb.__indirect(this.bb_pos+t),this.bb):null}stringPool(e,t){let r=this.bb.__offset(this.bb_pos,6);return r?this.bb.__string(this.bb.__vector(this.bb_pos+r)+e*4,t):null}stringPoolLength(){let e=this.bb.__offset(this.bb_pos,6);return e?this.bb.__vector_len(this.bb_pos+e):0}predicateFields(e,t){let r=this.bb.__offset(this.bb_pos,8);return r?this.bb.__string(this.bb.__vector(this.bb_pos+r)+e*4,t):null}predicateFieldsLength(){let e=this.bb.__offset(this.bb_pos,8);return e?this.bb.__vector_len(this.bb_pos+e):0}plans(e,t){let r=this.bb.__offset(this.bb_pos,10);return r?(t||new wo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}plansLength(){let e=this.bb.__offset(this.bb_pos,10);return e?this.bb.__vector_len(this.bb_pos+e):0}entitlements(e,t){let r=this.bb.__offset(this.bb_pos,12);return r?(t||new dc).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}entitlementsLength(){let e=this.bb.__offset(this.bb_pos,12);return e?this.bb.__vector_len(this.bb_pos+e):0}entitlementRules(e,t){let r=this.bb.__offset(this.bb_pos,14);return r?(t||new Qd).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}entitlementRulesLength(){let e=this.bb.__offset(this.bb_pos,14);return e?this.bb.__vector_len(this.bb_pos+e):0}segments(e,t){let r=this.bb.__offset(this.bb_pos,16);return r?(t||new mc).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}segmentsLength(){let e=this.bb.__offset(this.bb_pos,16);return e?this.bb.__vector_len(this.bb_pos+e):0}placementSlots(e,t){let r=this.bb.__offset(this.bb_pos,18);return r?(t||new uc).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}placementSlotsLength(){let e=this.bb.__offset(this.bb_pos,18);return e?this.bb.__vector_len(this.bb_pos+e):0}slotConfigs(e,t){let r=this.bb.__offset(this.bb_pos,20);return r?(t||new Mp).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}slotConfigsLength(){let e=this.bb.__offset(this.bb_pos,20);return e?this.bb.__vector_len(this.bb_pos+e):0}surfaceTemplates(e,t){let r=this.bb.__offset(this.bb_pos,22);return r?(t||new pc).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}surfaceTemplatesLength(){let e=this.bb.__offset(this.bb_pos,22);return e?this.bb.__vector_len(this.bb_pos+e):0}placements(e,t){let r=this.bb.__offset(this.bb_pos,24);return r?(t||new Eo).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}placementsLength(){let e=this.bb.__offset(this.bb_pos,24);return e?this.bb.__vector_len(this.bb_pos+e):0}placementPayloads(e,t){let r=this.bb.__offset(this.bb_pos,26);return r?(t||new uu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}placementPayloadsLength(){let e=this.bb.__offset(this.bb_pos,26);return e?this.bb.__vector_len(this.bb_pos+e):0}contentUiPaths(e,t){let r=this.bb.__offset(this.bb_pos,28);return r?(t||new wp).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}contentUiPathsLength(){let e=this.bb.__offset(this.bb_pos,28);return e?this.bb.__vector_len(this.bb_pos+e):0}contentPromotions(e,t){let r=this.bb.__offset(this.bb_pos,30);return r?(t||new Ep).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}contentPromotionsLength(){let e=this.bb.__offset(this.bb_pos,30);return e?this.bb.__vector_len(this.bb_pos+e):0}personalizationTokens(e,t){let r=this.bb.__offset(this.bb_pos,32);return r?(t||new qp).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}personalizationTokensLength(){let e=this.bb.__offset(this.bb_pos,32);return e?this.bb.__vector_len(this.bb_pos+e):0}messageBlocks(e,t){let r=this.bb.__offset(this.bb_pos,34);return r?(t||new iu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}messageBlocksLength(){let e=this.bb.__offset(this.bb_pos,34);return e?this.bb.__vector_len(this.bb_pos+e):0}slotPlacementIndex(e,t){let r=this.bb.__offset(this.bb_pos,36);return r?(t||new sa).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}slotPlacementIndexLength(){let e=this.bb.__offset(this.bb_pos,36);return e?this.bb.__vector_len(this.bb_pos+e):0}themeJson(e){let t=this.bb.__offset(this.bb_pos,38);return t?this.bb.__string(this.bb_pos+t,e):null}contentOverrideKeys(e,t){let r=this.bb.__offset(this.bb_pos,40);return r?this.bb.__string(this.bb.__vector(this.bb_pos+r)+e*4,t):null}contentOverrideKeysLength(){let e=this.bb.__offset(this.bb_pos,40);return e?this.bb.__vector_len(this.bb_pos+e):0}contentOverrideEntries(e,t){let r=this.bb.__offset(this.bb_pos,42);return r?(t||new Rp).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}contentOverrideEntriesLength(){let e=this.bb.__offset(this.bb_pos,42);return e?this.bb.__vector_len(this.bb_pos+e):0}contentOverrideIndex(e,t){let r=this.bb.__offset(this.bb_pos,44);return r?(t||new sa).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}contentOverrideIndexLength(){let e=this.bb.__offset(this.bb_pos,44);return e?this.bb.__vector_len(this.bb_pos+e):0}compileTimeSegmentKeys(e,t){let r=this.bb.__offset(this.bb_pos,46);return r?this.bb.__string(this.bb.__vector(this.bb_pos+r)+e*4,t):null}compileTimeSegmentKeysLength(){let e=this.bb.__offset(this.bb_pos,46);return e?this.bb.__vector_len(this.bb_pos+e):0}compileTimeSegmentMembers(e){let t=this.bb.__offset(this.bb_pos,48);return t?this.bb.readUint32(this.bb.__vector(this.bb_pos+t)+e*4):0}compileTimeSegmentMembersLength(){let e=this.bb.__offset(this.bb_pos,48);return e?this.bb.__vector_len(this.bb_pos+e):0}compileTimeSegmentMembersArray(){let e=this.bb.__offset(this.bb_pos,48);return e?new Uint32Array(this.bb.bytes().buffer,this.bb.bytes().byteOffset+this.bb.__vector(this.bb_pos+e),this.bb.__vector_len(this.bb_pos+e)):null}compileTimeSegmentIndex(e,t){let r=this.bb.__offset(this.bb_pos,50);return r?(t||new sa).__init(this.bb.__vector(this.bb_pos+r)+e*8,this.bb):null}compileTimeSegmentIndexLength(){let e=this.bb.__offset(this.bb_pos,50);return e?this.bb.__vector_len(this.bb_pos+e):0}extensionRules(e,t){let r=this.bb.__offset(this.bb_pos,52);return r?(t||new Vp).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}extensionRulesLength(){let e=this.bb.__offset(this.bb_pos,52);return e?this.bb.__vector_len(this.bb_pos+e):0}seatTypes(e,t){let r=this.bb.__offset(this.bb_pos,54);return r?(t||new fu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}seatTypesLength(){let e=this.bb.__offset(this.bb_pos,54);return e?this.bb.__vector_len(this.bb_pos+e):0}enforcementDefaults(e,t){let r=this.bb.__offset(this.bb_pos,56);return r?(t||new Xd).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}enforcementDefaultsLength(){let e=this.bb.__offset(this.bb_pos,56);return e?this.bb.__vector_len(this.bb_pos+e):0}placementSettings(e,t){let r=this.bb.__offset(this.bb_pos,58);return r?(t||new mu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}placementSettingsLength(){let e=this.bb.__offset(this.bb_pos,58);return e?this.bb.__vector_len(this.bb_pos+e):0}segmentDimensions(e,t){let r=this.bb.__offset(this.bb_pos,60);return r?(t||new gu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}segmentDimensionsLength(){let e=this.bb.__offset(this.bb_pos,60);return e?this.bb.__vector_len(this.bb_pos+e):0}meterBindings(e,t){let r=this.bb.__offset(this.bb_pos,62);return r?(t||new su).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}meterBindingsLength(){let e=this.bb.__offset(this.bb_pos,62);return e?this.bb.__vector_len(this.bb_pos+e):0}freeTrialRules(e,t){let r=this.bb.__offset(this.bb_pos,64);return r?(t||new eu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}freeTrialRulesLength(){let e=this.bb.__offset(this.bb_pos,64);return e?this.bb.__vector_len(this.bb_pos+e):0}reverseTrialRules(e,t){let r=this.bb.__offset(this.bb_pos,66);return r?(t||new pu).__init(this.bb.__indirect(this.bb.__vector(this.bb_pos+r)+e*4),this.bb):null}reverseTrialRulesLength(){let e=this.bb.__offset(this.bb_pos,66);return e?this.bb.__vector_len(this.bb_pos+e):0}static startRuleBundle(e){e.startObject(32);}static addHeader(e,t){e.addFieldOffset(0,t,0);}static addStringPool(e,t){e.addFieldOffset(1,t,0);}static createStringPoolVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startStringPoolVector(e,t){e.startVector(4,t,4);}static addPredicateFields(e,t){e.addFieldOffset(2,t,0);}static createPredicateFieldsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPredicateFieldsVector(e,t){e.startVector(4,t,4);}static addPlans(e,t){e.addFieldOffset(3,t,0);}static createPlansVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPlansVector(e,t){e.startVector(4,t,4);}static addEntitlements(e,t){e.addFieldOffset(4,t,0);}static createEntitlementsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startEntitlementsVector(e,t){e.startVector(4,t,4);}static addEntitlementRules(e,t){e.addFieldOffset(5,t,0);}static createEntitlementRulesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startEntitlementRulesVector(e,t){e.startVector(4,t,4);}static addSegments(e,t){e.addFieldOffset(6,t,0);}static createSegmentsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSegmentsVector(e,t){e.startVector(4,t,4);}static addPlacementSlots(e,t){e.addFieldOffset(7,t,0);}static createPlacementSlotsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPlacementSlotsVector(e,t){e.startVector(4,t,4);}static addSlotConfigs(e,t){e.addFieldOffset(8,t,0);}static createSlotConfigsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSlotConfigsVector(e,t){e.startVector(4,t,4);}static addSurfaceTemplates(e,t){e.addFieldOffset(9,t,0);}static createSurfaceTemplatesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSurfaceTemplatesVector(e,t){e.startVector(4,t,4);}static addPlacements(e,t){e.addFieldOffset(10,t,0);}static createPlacementsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPlacementsVector(e,t){e.startVector(4,t,4);}static addPlacementPayloads(e,t){e.addFieldOffset(11,t,0);}static createPlacementPayloadsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPlacementPayloadsVector(e,t){e.startVector(4,t,4);}static addContentUiPaths(e,t){e.addFieldOffset(12,t,0);}static createContentUiPathsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startContentUiPathsVector(e,t){e.startVector(4,t,4);}static addContentPromotions(e,t){e.addFieldOffset(13,t,0);}static createContentPromotionsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startContentPromotionsVector(e,t){e.startVector(4,t,4);}static addPersonalizationTokens(e,t){e.addFieldOffset(14,t,0);}static createPersonalizationTokensVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPersonalizationTokensVector(e,t){e.startVector(4,t,4);}static addMessageBlocks(e,t){e.addFieldOffset(15,t,0);}static createMessageBlocksVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startMessageBlocksVector(e,t){e.startVector(4,t,4);}static addSlotPlacementIndex(e,t){e.addFieldOffset(16,t,0);}static startSlotPlacementIndexVector(e,t){e.startVector(8,t,4);}static addThemeJson(e,t){e.addFieldOffset(17,t,0);}static addContentOverrideKeys(e,t){e.addFieldOffset(18,t,0);}static createContentOverrideKeysVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startContentOverrideKeysVector(e,t){e.startVector(4,t,4);}static addContentOverrideEntries(e,t){e.addFieldOffset(19,t,0);}static startContentOverrideEntriesVector(e,t){e.startVector(8,t,4);}static addContentOverrideIndex(e,t){e.addFieldOffset(20,t,0);}static startContentOverrideIndexVector(e,t){e.startVector(8,t,4);}static addCompileTimeSegmentKeys(e,t){e.addFieldOffset(21,t,0);}static createCompileTimeSegmentKeysVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startCompileTimeSegmentKeysVector(e,t){e.startVector(4,t,4);}static addCompileTimeSegmentMembers(e,t){e.addFieldOffset(22,t,0);}static createCompileTimeSegmentMembersVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addInt32(t[r]);return e.endVector()}static startCompileTimeSegmentMembersVector(e,t){e.startVector(4,t,4);}static addCompileTimeSegmentIndex(e,t){e.addFieldOffset(23,t,0);}static startCompileTimeSegmentIndexVector(e,t){e.startVector(8,t,4);}static addExtensionRules(e,t){e.addFieldOffset(24,t,0);}static createExtensionRulesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startExtensionRulesVector(e,t){e.startVector(4,t,4);}static addSeatTypes(e,t){e.addFieldOffset(25,t,0);}static createSeatTypesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSeatTypesVector(e,t){e.startVector(4,t,4);}static addEnforcementDefaults(e,t){e.addFieldOffset(26,t,0);}static createEnforcementDefaultsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startEnforcementDefaultsVector(e,t){e.startVector(4,t,4);}static addPlacementSettings(e,t){e.addFieldOffset(27,t,0);}static createPlacementSettingsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startPlacementSettingsVector(e,t){e.startVector(4,t,4);}static addSegmentDimensions(e,t){e.addFieldOffset(28,t,0);}static createSegmentDimensionsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startSegmentDimensionsVector(e,t){e.startVector(4,t,4);}static addMeterBindings(e,t){e.addFieldOffset(29,t,0);}static createMeterBindingsVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startMeterBindingsVector(e,t){e.startVector(4,t,4);}static addFreeTrialRules(e,t){e.addFieldOffset(30,t,0);}static createFreeTrialRulesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startFreeTrialRulesVector(e,t){e.startVector(4,t,4);}static addReverseTrialRules(e,t){e.addFieldOffset(31,t,0);}static createReverseTrialRulesVector(e,t){e.startVector(4,t.length,4);for(let r=t.length-1;r>=0;r--)e.addOffset(t[r]);return e.endVector()}static startReverseTrialRulesVector(e,t){e.startVector(4,t,4);}static endRuleBundle(e){let t=e.endObject();return e.requiredField(t,4),e.requiredField(t,6),t}static finishRuleBundleBuffer(e,t){e.finish(t,"RVTB");}static finishSizePrefixedRuleBundleBuffer(e,t){e.finish(t,"RVTB",true);}static createRuleBundle(e,t,r,i,s,a,o,p,b,l,y,S,I,P,R,N,Z,se,Pe,Y,U,Oe,It,Dn,W,Pt,Xt,Jt,rt,yn,Mn,ht,rn){return Zt.startRuleBundle(e),Zt.addHeader(e,t),Zt.addStringPool(e,r),Zt.addPredicateFields(e,i),Zt.addPlans(e,s),Zt.addEntitlements(e,a),Zt.addEntitlementRules(e,o),Zt.addSegments(e,p),Zt.addPlacementSlots(e,b),Zt.addSlotConfigs(e,l),Zt.addSurfaceTemplates(e,y),Zt.addPlacements(e,S),Zt.addPlacementPayloads(e,I),Zt.addContentUiPaths(e,P),Zt.addContentPromotions(e,R),Zt.addPersonalizationTokens(e,N),Zt.addMessageBlocks(e,Z),Zt.addSlotPlacementIndex(e,se),Zt.addThemeJson(e,Pe),Zt.addContentOverrideKeys(e,Y),Zt.addContentOverrideEntries(e,U),Zt.addContentOverrideIndex(e,Oe),Zt.addCompileTimeSegmentKeys(e,It),Zt.addCompileTimeSegmentMembers(e,Dn),Zt.addCompileTimeSegmentIndex(e,W),Zt.addExtensionRules(e,Pt),Zt.addSeatTypes(e,Xt),Zt.addEnforcementDefaults(e,Jt),Zt.addPlacementSettings(e,rt),Zt.addSegmentDimensions(e,yn),Zt.addMeterBindings(e,Mn),Zt.addFreeTrialRules(e,ht),Zt.addReverseTrialRules(e,rn),Zt.endRuleBundle(e)}};function O0(n){switch(n){case 1:return "feature";case 2:return "usage_limit";case 3:return "credits";case 4:return "seats";case 5:return "tiered";default:return "unknown"}}function T_(n){switch(n){case 1:return "hard_block";case 5:return "soft_block";case 6:return "degrade";case 7:return "allow_overage";case 2:return "soft_warn";case 3:return "throttle";case 4:return "notify";default:return "unknown"}}function j0(n){switch(n){case 1:return "account_pool";case 2:return "per_instance";case 3:return "per_user";case 4:return "per_user_pooled";default:return "unknown"}}function F0(n){switch(n){case 1:return "eq";case 2:return "neq";case 3:return "gt";case 4:return "lt";case 5:return "gte";case 6:return "lte";case 7:return "contains";case 8:return "in";default:return "unknown"}}var L0={0:"plan",1:"plan_variation",2:"addon",3:"addon_variation"};function V0(n){switch(n){case 1:return "fixed";case 2:return "gated";case 3:return "usage_credit_seat";case 4:return "trials";case 5:return "other_conversion";case 6:return "retention";default:return "unknown"}}function U0(n){return n===1?"free":n===2?"reverse":"none"}function B0(n){switch(n){case 1:return "session";case 2:return "day";case 3:return "week";case 4:return "month";case 5:return "lifetime";default:return "unknown"}}function q0(n){switch(n){case 1:return "best_value";case 2:return "custom";default:return "next_tier_up"}}function D0(n){switch(n){case 1:return "open_checkout_modal";case 2:return "navigate_to_plans";case 3:return "open_upgrade_modal";case 4:return "open_placement";case 5:return "book_demo";case 6:return "open_feature_tour";case 7:return "extend_trial";case 8:return "switch_billing_period";case 9:return "custom_url";case 10:return "dismiss";case 11:return "contact_sales";case 12:return "complete_onboarding";case 13:return "invite_teammate";case 14:return "refer_friend";case 15:return "verify_work_email";case 16:return "update_payment_method";case 17:return "enable_auto_renewal";case 18:return "manage_subscription";default:return "unknown"}}function M0(n){switch(n){case 1:return "monthly";case 2:return "annual";default:return "unknown"}}function N0(n){switch(n){case 1:return "user";case 2:return "plan";case 3:return "usage";case 4:return "trial";case 5:return "billing";case 6:return "promotion";case 7:return "custom";default:return "unknown"}}function H0(n){switch(n){case 1:return "string";case 2:return "number";case 3:return "currency";case 4:return "percentage";case 5:return "date";default:return "unknown"}}function z0(n){switch(n){case 1:return "draft";case 2:return "active";case 3:return "archived";default:return "unknown"}}function Mi(n){return n<0n?null:Number(n)}function K0(n){let e=t=>n.stringPool(t)??"";return {header:$0(n),predicate_fields:_p(n.predicateFieldsLength(),t=>n.predicateFields(t)??""),plans:er(n.plansLength(),t=>Z0(n,t,e)),entitlements:er(n.entitlementsLength(),t=>Y0(n,t,e)),entitlement_rules:er(n.entitlementRulesLength(),t=>W0(n,t,e)),segments:er(n.segmentsLength(),t=>J0(n,t,e)),placement_slots:er(n.placementSlotsLength(),t=>Q0(n,t,e)),slot_configs:er(n.slotConfigsLength(),t=>eT(n,t,e)),surface_templates:er(n.surfaceTemplatesLength(),t=>tT(n,t,e)),placements:er(n.placementsLength(),t=>nT(n,t,e)),placement_payloads:er(n.placementPayloadsLength(),t=>aT(n,t,e)),content_ui_paths:er(n.contentUiPathsLength(),t=>oT(n,t,e)),content_promotions:er(n.contentPromotionsLength(),t=>lT(n,t,e)),personalization_tokens:er(n.personalizationTokensLength(),t=>cT(n,t,e)),message_blocks:er(n.messageBlocksLength(),t=>dT(n,t,e)),slot_placement_index:bp(n.slotPlacementIndexLength(),t=>n.slotPlacementIndex(t,new sa)),theme_json:n.themeJson()??"",content_override_keys:_p(n.contentOverrideKeysLength(),t=>n.contentOverrideKeys(t)??""),content_override_entries:er(n.contentOverrideEntriesLength(),t=>uT(n,t,e)),content_override_index:bp(n.contentOverrideIndexLength(),t=>n.contentOverrideIndex(t,new sa)),compile_time_segment_keys:_p(n.compileTimeSegmentKeysLength(),t=>n.compileTimeSegmentKeys(t)??""),compile_time_segment_members:G0(n.compileTimeSegmentMembersLength(),t=>n.compileTimeSegmentMembers(t)??0),compile_time_segment_index:bp(n.compileTimeSegmentIndexLength(),t=>n.compileTimeSegmentIndex(t,new sa)),extension_rules:er(n.extensionRulesLength(),t=>mT(n,t,e)),seat_types:er(n.seatTypesLength(),t=>pT(n,t,e)),enforcement_defaults:er(n.enforcementDefaultsLength(),t=>fT(n,t,e)),placement_settings:er(n.placementSettingsLength(),t=>hT(n,t,e)),segment_dimensions:er(n.segmentDimensionsLength(),t=>gT(n,t,e)),meter_bindings:er(n.meterBindingsLength(),t=>_T(n,t,e)),free_trial_rules:er(n.freeTrialRulesLength(),t=>bT(n,t,e)),reverse_trial_rules:er(n.reverseTrialRulesLength(),t=>vT(n,t,e))}}function er(n,e){let t=[];for(let r=0;r<n;r++)t.push(e(r));return t}function _p(n,e){let t=[];for(let r=0;r<n;r++)t.push(e(r));return t}function G0(n,e){let t=[];for(let r=0;r<n;r++)t.push(e(r));return t}function bp(n,e){let t=[];for(let r=0;r<n;r++){let i=e(r);t.push({start:i?i.start():0,count:i?i.count():0});}return t}function $0(n){let e=n.header(new tu);if(!e)throw new Error("decodeBundleToIR: header missing from bundle");return {schema_version:e.schemaVersion(),runtime_abi:e.runtimeAbi(),config_version:e.configVersion()??"",exported_at_ms:Number(e.exportedAtMs()),built_at_ms:Number(e.builtAtMs()),source_sha256:e.sourceSha256()??"",tenant_id:e.tenantId()??"",change_set_id:e.changeSetId()??"",package_schema_version:e.packageSchemaVersion()??"",environment_id:e.environmentId()??"",playbook_handle:e.playbookHandle()??""}}function Z0(n,e,t){let r=n.plans(e,new wo);return {source_id:t(r.sourceId()),unique_handle:t(r.uniqueHandle()),name:t(r.name()),tier_position:r.tierPosition(),sort_order:r.sortOrder()}}function Y0(n,e,t){let r=n.entitlements(e,new dc),i=[];for(let s=0;s<r.tierHandlesLength();s++)i.push(t(r.tierHandles(s)));return {source_id:t(r.sourceId()),unique_handle:t(r.uniqueHandle()),name:t(r.name()),type:O0(r.type()),unit:t(r.unit()),tier_handles:i}}function W0(n,e,t){let r=n.entitlementRules(e,new Qd),i=[];for(let o=0;o<r.planIdxsLength();o++)i.push(r.planIdxs(o));let s=[];for(let o=0;o<r.segmentIdxsLength();o++)s.push(r.segmentIdxs(o));let a=[];for(let o=0;o<r.targetsLength();o++){let p=r.targets(o,new Jd);p&&a.push({kind:L0[p.kind()]??"plan",id:p.id()??""});}return {source_id:t(r.sourceId()),entitlement_idx:r.entitlementIdx(),plan_idxs:i,segment_idxs:s,type_fields:X0(r,t),allocation:j0(r.allocation()),targets:a}}function X0(n,e){switch(n.typeFieldsType()){case 1:return {kind:"feature",enabled:n.typeFields(new Op)?.enabled()??false};case 2:{let t=n.typeFields(new Lp);return {kind:"usage_limit",limit_value:t?Mi(t.limitValue()):null,enforcement:T_(t?.enforcement()??0)}}case 3:{let t=n.typeFields(new Ap);return {kind:"credits",allowance:t?Mi(t.allowance()):null,rollover:t?.rollover()??false,max_balance:t?Mi(t.maxBalance()):null,initial_grant:t?Mi(t.initialGrant()):null,enforcement:T_(t?.enforcement()??0)}}case 4:{let t=n.typeFields(new jp);return {kind:"seats",included_count:t?Mi(t.includedCount()):null,seat_type_source_id:e(t?.seatTypeSourceId()??0)}}case 5:{let t=n.typeFields(new Fp);return {kind:"tiered",tier_value:e(t?.tierValue()??0)}}default:return {kind:"feature",enabled:false}}}function J0(n,e,t){let r=n.segments(e,new mc),i=[],s=new hu;for(let a=0;a<r.predicatesLength();a++){let o=r.predicates(a,s);o&&i.push({field_idx:o.fieldIdx(),op:F0(o.op()),value:t(o.value())});}return {source_id:t(r.sourceId()),name:t(r.name()),slug:t(r.slug()),combinator:r.combinator()===1?"or":"and",predicates:i,dimension_id:t(r.dimensionId()),experiment_id:t(r.experimentId())}}function Q0(n,e,t){let r=n.placementSlots(e,new uc);return {source_id:t(r.sourceId()),label:t(r.label()),description:t(r.description()),surface_type:t(r.surfaceType()),placement_handle:t(r.placementHandle()),template:t(r.template())}}function eT(n,e,t){let r=n.slotConfigs(e,new Mp),i=[];for(let s=0;s<r.triggersLength();s++)i.push(t(r.triggers(s)));return {slot_idx:r.slotIdx(),active:r.active(),triggers:i}}function tT(n,e,t){let r=n.surfaceTemplates(e,new pc),i=[],s=new _u;for(let a=0;a<r.fieldsLength();a++){let o=r.fields(a,s);o&&i.push({name:t(o.name()),type:t(o.type()),required:o.required()});}return {source_id:t(r.sourceId()),surface_type:t(r.surfaceType()),fields:i}}function nT(n,e,t){let r=n.placements(e,new Eo),i=[],s=new cu;for(let a=0;a<r.payloadsLength();a++)r.payloads(a,s)&&i.push(iT(s,t));return {source_id:t(r.sourceId()),name:t(r.name()),category:V0(r.category()),trigger:rT(r.trigger(new au),t),payloads:i,order:r.order()}}function rT(n,e){if(!n)return {kind:"unknown"};switch(n.type()){case 1:return {kind:"surface_render",slot_idx:n.slotIdx()};case 2:return {kind:"entitlement_gate",entitlement_idx:n.entitlementIdx(),tier_threshold:e(n.tierThreshold())};case 3:return {kind:"usage_threshold",entitlement_idx:n.entitlementIdx(),threshold_percent:n.thresholdPercent()};case 4:return {kind:"credit_threshold",entitlement_idx:n.entitlementIdx(),threshold_percent:n.thresholdPercent()};case 5:return {kind:"seat_threshold",entitlement_idx:n.entitlementIdx(),threshold_percent:n.thresholdPercent()};case 6:return {kind:"trial_started",trial_type:U0(n.trialType())};case 7:return {kind:"trial_progress",progress_percent:n.progressPercent()};case 8:return {kind:"trial_ending",days_before_end:n.daysBeforeEnd()};case 9:return {kind:"trial_ended"};case 10:return {kind:"trial_converted"};case 11:return {kind:"qualifier",qualifier:e(n.qualifier())};default:return {kind:"unknown"}}}function iT(n,e){let t=[],r=new Oo;for(let s=0;s<n.surfacesLength();s++)n.surfaces(s,r)&&t.push(B_(r,e));let i=[];for(let s=0;s<n.surfaceSlotIdsLength();s++)i.push(e(n.surfaceSlotIds(s)));return {source_id:e(n.sourceId()),target:V_(n.target(new gc),e),surfaces:t,caps:U_(n.caps(new hc)),created_at:e(n.createdAt()),recommendation_strategy:q0(n.recommendationStrategy()),recommendation_plan_override:e(n.recommendationPlanOverride()),surface_slot_ids:i,remind_later_minutes:n.remindLaterMinutes()}}function V_(n,e){if(!n)return {plan_idxs:[],segment_chips:[],billing_cadences:[]};let t=[];for(let a=0;a<n.planIdxsLength();a++)t.push(n.planIdxs(a));let r=[],i=new lu;for(let a=0;a<n.segmentChipsLength();a++){let o=n.segmentChips(a,i);o&&r.push(sT(o,e));}let s=[];for(let a=0;a<n.billingCadencesLength();a++)s.push(e(n.billingCadences(a)));return {plan_idxs:t,segment_chips:r,billing_cadences:s}}function sT(n,e){switch(n.kind()){case 1:return {kind:"segment",segment_idx:n.segmentIdx()};case 2:return {kind:"plan",plan_idx:n.planIdx()};case 3:return {kind:"literal",value:e(n.literal())};default:return {kind:"literal",value:""}}}function U_(n){return n?{has_max_per_period:n.hasMaxPerPeriod(),max_per_period_count:n.maxPerPeriodCount(),max_per_period:B0(n.maxPerPeriod()),cooldown_days:n.cooldownDays()}:{has_max_per_period:false,max_per_period_count:0,max_per_period:"unknown",cooldown_days:-1}}function B_(n,e){let t={},r=new Dp;for(let a=0;a<n.fieldsLength();a++){let o=n.fields(a,r);o&&(t[e(o.key())]=e(o.value()));}let i=[],s=new ou;for(let a=0;a<n.ctasLength();a++){let o=n.ctas(a,s);if(!o)continue;let p={},b=Math.min(o.configKeysLength(),o.configValuesLength());for(let l=0;l<b;l++)p[e(o.configKeys(l))]=e(o.configValues(l));i.push({label:e(o.label()),path:e(o.path()),config:p});}return {template_idx:n.templateIdx(),template_source_id:e(n.templateSourceId()),fields:t,ctas:i}}function aT(n,e,t){let r=n.placementPayloads(e,new uu),i=[],s=new Oo;for(let b=0;b<r.surfacesLength();b++)r.surfaces(b,s)&&i.push(B_(s,t));let a=[];for(let b=0;b<r.surfaceSlotIdsLength();b++)a.push(t(r.surfaceSlotIds(b)));let o=r.contentLink(new du),p={message_block_idx:o?o.messageBlockIdx():fc,ui_path_idx:o?o.uiPathIdx():0,promotion_idx:o?o.promotionIdx():0,content_payload_source_id:o?t(o.contentPayloadSourceId()):""};return {source_id:t(r.sourceId()),placement_idx:r.placementIdx(),placement_source_id:t(r.placementSourceId()),target:V_(r.target(new gc),t),caps:U_(r.caps(new hc)),created_at:t(r.createdAt()),updated_at:t(r.updatedAt()),source_mode:r.sourceMode()===1?"content_linked":"inline",surfaces:i,content_link:p,surface_slot_ids:a,remind_later_minutes:r.remindLaterMinutes()}}function oT(n,e,t){let r=n.contentUiPaths(e,new wp);return {name:t(r.name()),action_type:D0(r.actionType()),plan_handle:t(r.planHandle()),promotion_idx:r.promotionIdx(),placement_handle:t(r.placementHandle()),url:t(r.url()),tour_id:t(r.tourId()),target_billing_period:M0(r.targetBillingPeriod()),description:t(r.description())}}function lT(n,e,t){let r=n.contentPromotions(e,new Ep);return {source_id:t(r.sourceId()),name:t(r.name()),discount:t(r.discount()),type:t(r.type()),status:t(r.status())}}function cT(n,e,t){let r=n.personalizationTokens(e,new qp),i={},s=new Bp;for(let a=0;a<r.valueMapLength();a++){let o=r.valueMap(a,s);o&&(i[t(o.key())]=t(o.value()));}return {token:t(r.token()),label:t(r.label()),description:t(r.description()),category:N0(r.category()),data_source:t(r.dataSource()),example_value:t(r.exampleValue()),value_map:i,format:H0(r.format())}}function C_(n,e){if(!n)return {header:"",body:"",cta_label:"",secondary_cta_label:"",extra:{}};let t={},r=new nu;for(let i=0;i<n.extraLength();i++){let s=n.extra(i,r);s&&(t[e(s.key())]=e(s.value()));}return {header:e(n.header()),body:e(n.body()),cta_label:e(n.ctaLabel()),secondary_cta_label:e(n.secondaryCtaLabel()),extra:t}}function dT(n,e,t){let r=n.messageBlocks(e,new iu),i=[],s=new ru;for(let b=0;b<r.segmentOverridesLength();b++){let l=r.segmentOverrides(b,s);l&&i.push({segment_value:t(l.segmentValue()),content:C_(l.content(new Va),t)});}let a=[],o=new Up;for(let b=0;b<r.childBlocksLength();b++){let l=r.childBlocks(b,o);l&&a.push({slot:t(l.slot()),block_idx:l.blockIdx(),block_source_id:t(l.blockSourceId())});}let p=[];for(let b=0;b<r.tokensUsedLength();b++)p.push(t(r.tokensUsed(b)));return {source_id:t(r.sourceId()),tenant_id:t(r.tenantId()),name:t(r.name()),surface_template_idx:r.surfaceTemplateIdx(),default_content:C_(r.defaultContent(new Va),t),segment_overrides:i,child_blocks:a,tokens_used:p,status:z0(r.status()),created_at:t(r.createdAt()),updated_at:t(r.updatedAt())}}function uT(n,e,t){let r=n.contentOverrideEntries(e,new Rp);return {key:t(r.key()),value:t(r.value())}}function mT(n,e,t){let r=n.extensionRules(e,new Vp),i=r.configArray()??new Uint8Array(0);return {kind:t(r.kind()),schema_version:r.schemaVersion(),config:i}}function pT(n,e,t){let r=n.seatTypes(e,new fu),i=[];for(let s=0;s<r.entitlementHandlesLength();s++)i.push(t(r.entitlementHandles(s)));return {handle:t(r.handle()),name:t(r.name()),is_default:r.isDefault(),entitlement_handles:i}}function fT(n,e,t){let r=n.enforcementDefaults(e,new Xd),i=[];for(let s=0;s<r.notificationChannelsLength();s++)i.push(t(r.notificationChannels(s)));return {handle:t(r.handle()),entitlement_handle:t(r.entitlementHandle()),soft_limit_percent:Mi(r.softLimitPercent()),hard_limit_percent:Mi(r.hardLimitPercent()),soft_limit_action:t(r.softLimitAction()),hard_limit_action:t(r.hardLimitAction()),grace_period_hours:Mi(r.gracePeriodHours()),notification_channels:i,is_active:r.isActive()}}function hT(n,e,t){let r=n.placementSettings(e,new mu);return {handle:t(r.handle()),global_frequency_cap:t(r.globalFrequencyCap()),global_frequency_cap_period:t(r.globalFrequencyCapPeriod()),suppress_for_paid:r.suppressForPaid(),suppress_for_trial:r.suppressForTrial(),allow_stacking:r.allowStacking(),priority_collision_strategy:t(r.priorityCollisionStrategy())}}function gT(n,e,t){let r=n.segmentDimensions(e,new gu);return {handle:t(r.handle()),name:t(r.name()),category:t(r.category()),visibility_toggle:r.visibilityToggle(),source_type:t(r.sourceType())}}function _T(n,e,t){let r=n.meterBindings(e,new su);return {handle:t(r.handle()),entitlement_handle:t(r.entitlementHandle()),meter_handle:t(r.meterHandle()),limit:Mi(r.limit()),reset_period:t(r.resetPeriod())}}function bT(n,e,t){let r=n.freeTrialRules(e,new eu);return {source_id:t(r.sourceId()),handle:t(r.handle()),plan_id:t(r.planId()),usage_entitlement_handle:t(r.usageEntitlementHandle()),usage_limit_value:Mi(r.usageLimitValue())}}function vT(n,e,t){let r=n.reverseTrialRules(e,new pu),i=[];for(let s=0;s<r.entitlementsDuringTrialLength();s++)i.push(t(r.entitlementsDuringTrial(s)));return {source_id:t(r.sourceId()),handle:t(r.handle()),premium_plan_id:t(r.premiumPlanId()),fallback_plan_id:t(r.fallbackPlanId()),entitlements_during_trial:i,is_active:r.isActive(),usage_entitlement_handle:t(r.usageEntitlementHandle()),usage_limit_value:Mi(r.usageLimitValue())}}function yT(n){switch(n){case "feature":return "feature";case "usage_limit":return "usage_limit";case "credits":return "credits";case "seats":return "seat";case "tiered":return "capability_tier";default:return "price_per_unit"}}function k_(n){return n==="hard_block"||n==="soft_block"||n==="degrade"||n==="allow_overage"?n:void 0}function Ao(n){return n===fc}function xT(n){let e=l=>n.plans[l]?.unique_handle??"",t=l=>n.entitlements[l]?.unique_handle??"",r=l=>n.segments[l]?.slug??"",i=l=>n.placement_slots[l]?.source_id??"",s=l=>n.message_blocks[l]?.source_id??"",a=l=>n.content_promotions[l]?.source_id??"",o=l=>n.content_ui_paths[l]?.name??"",p=n.header,b={artifact_type:"playbook",format_version:p.config_version,playbook_version_id:p.change_set_id===""?null:p.change_set_id};if(p.playbook_handle&&(b.playbook_handle=p.playbook_handle),p.environment_id&&(b.environment_id=p.environment_id),p.tenant_id&&(b.tenant_id=p.tenant_id),p.package_schema_version&&(b.schema_version=p.package_schema_version),p.exported_at_ms&&(b.exported_at=new Date(p.exported_at_ms).toISOString()),b.plans=n.plans.map(l=>({unique_handle:l.unique_handle,name:l.name,tier_position:l.tier_position,sort_order:l.sort_order})),b.entitlements=n.entitlements.map(l=>{let y={unique_handle:l.unique_handle,name:l.name,type:yT(l.type)};return l.unit&&(y.unit=l.unit),l.tier_handles.length&&(y.tier_definitions=l.tier_handles.map(S=>({handle:S,name:S}))),y}),b.entitlement_rules=n.entitlement_rules.map(l=>{let y={id:l.source_id,entitlement_id:t(l.entitlement_idx)};return y.targets=l.targets.length?l.targets.map(S=>({kind:S.kind,id:S.id})):l.plan_idxs.map(S=>({kind:"plan",id:e(S)})),y.segment_ids=l.segment_idxs.map(S=>r(S)),l.allocation!=="unknown"&&(y.allocation=l.allocation),ST(y,l.type_fields),y}),b.segments=n.segments.map(l=>{let y={name:l.name,handle:l.slug,predicates:l.predicates.map(S=>({field:n.predicate_fields[S.field_idx]??"",operator:S.op==="unknown"?"eq":S.op,value:S.value}))};return l.dimension_id&&(y.dimension_id=l.dimension_id),y}),b.content_ui_paths=n.content_ui_paths.map(l=>{let y={name:l.name,action_type:l.action_type==="unknown"?"custom_url":l.action_type};return l.plan_handle&&(y.plan_handle=l.plan_handle),Ao(l.promotion_idx)||(y.promotion_id=a(l.promotion_idx)),l.placement_handle&&(y.placement_handle=l.placement_handle),l.url&&(y.url=l.url),l.tour_id&&(y.tour_id=l.tour_id),l.target_billing_period!=="unknown"&&(y.target_billing_period=l.target_billing_period),l.description&&(y.description=l.description),y}),n.placement_slots.length&&(b.placement_slots=n.placement_slots.map(l=>{let y={id:l.source_id,label:l.label,description:l.description,surface_type:l.surface_type,placement_handle:l.placement_handle};return l.template&&(y.template=l.template),y})),n.surface_templates.length&&(b.surface_templates=n.surface_templates.map(l=>({id:l.source_id,surface_type:l.surface_type,fields:l.fields.map(y=>{let S={name:y.name,required:y.required};return y.type&&(S.type=y.type),S})}))),n.placements.length&&(b.placements=n.placements.map(l=>({id:l.source_id,name:l.name,category:l.category==="unknown"?"fixed":l.category,trigger:IT(l.trigger,i,t),payloads:l.payloads.map(y=>PT(y,e,r)),order:l.order}))),n.placement_payloads.length&&(b.placement_payloads=n.placement_payloads.map(l=>{let y={payload_id:l.source_id,placement_id:l.placement_source_id,target:q_(l.target,e,r),created_at:l.created_at,source_mode:l.source_mode,surfaces:l.surfaces.map(P=>D_(P))};l.updated_at&&(y.updated_at=l.updated_at);let S=M_(l.caps);S&&(y.caps=S),l.surface_slot_ids.length&&(y.surface_slot_ids=l.surface_slot_ids),l.remind_later_minutes>=0&&(y.remind_later_minutes=l.remind_later_minutes);let I=TT(l.content_link,s,a,o);return I&&(y.content_link=I),y})),n.content_promotions.length&&(b.content_promotions=n.content_promotions.map(l=>({id:l.source_id,name:l.name,discount:l.discount,type:l.type,status:l.status}))),n.personalization_tokens.length&&(b.personalization_tokens=n.personalization_tokens.map(l=>{let y={token:l.token,label:l.label};return l.description&&(y.description=l.description),l.category!=="unknown"&&(y.category=l.category),l.data_source&&(y.data_source=l.data_source),l.example_value&&(y.example_value=l.example_value),Object.keys(l.value_map).length&&(y.value_map={...l.value_map}),l.format!=="unknown"&&(y.format=l.format),y})),n.message_blocks.length&&(b.message_blocks=n.message_blocks.map(l=>{let y={block_id:l.source_id,tenant_id:l.tenant_id,name:l.name,default_content:R_(l.default_content),status:l.status==="unknown"?"draft":l.status,created_at:l.created_at,updated_at:l.updated_at};return Ao(l.surface_template_idx)||(y.surface_template_id=n.surface_templates[l.surface_template_idx]?.source_id??""),l.segment_overrides.length&&(y.segment_overrides=l.segment_overrides.map(S=>({segment_value_id:S.segment_value,content:R_(S.content)}))),l.child_blocks.length&&(y.child_blocks=l.child_blocks.map(S=>({slot:S.slot,block_id:Ao(S.block_idx)?S.block_source_id:s(S.block_idx)}))),l.tokens_used.length&&(y.tokens_used=[...l.tokens_used]),y})),n.slot_configs.length&&(b.slot_configs=n.slot_configs.map(l=>({slot_id:i(l.slot_idx),active:l.active,triggers:[...l.triggers]}))),n.seat_types.length&&(b.seat_types=n.seat_types.map(l=>({handle:l.handle,name:l.name,is_default:l.is_default,entitlement_handles:[...l.entitlement_handles]}))),n.enforcement_defaults.length&&(b.enforcement_defaults=n.enforcement_defaults.map(l=>({handle:l.handle,entitlement_handle:l.entitlement_handle===""?null:l.entitlement_handle,soft_limit_percent:l.soft_limit_percent,hard_limit_percent:l.hard_limit_percent,soft_limit_action:l.soft_limit_action,hard_limit_action:l.hard_limit_action,grace_period_hours:l.grace_period_hours,notification_channels:[...l.notification_channels],is_active:l.is_active}))),n.placement_settings.length&&(b.placement_settings=n.placement_settings.map(l=>({handle:l.handle,global_frequency_cap:l.global_frequency_cap===""?null:JSON.parse(l.global_frequency_cap),global_frequency_cap_period:l.global_frequency_cap_period===""?null:l.global_frequency_cap_period,suppress_for_paid:l.suppress_for_paid,suppress_for_trial:l.suppress_for_trial,allow_stacking:l.allow_stacking,priority_collision_strategy:l.priority_collision_strategy===""?null:l.priority_collision_strategy}))),n.segment_dimensions.length&&(b.segment_dimensions=n.segment_dimensions.map(l=>({handle:l.handle,name:l.name,category:l.category===""?null:l.category,visibility_toggle:l.visibility_toggle,source_type:l.source_type===""?null:l.source_type}))),n.meter_bindings.length&&(b.meter_bindings=n.meter_bindings.map(l=>({handle:l.handle,entitlement_handle:l.entitlement_handle,meter_handle:l.meter_handle,limit:l.limit,reset_period:l.reset_period===""?null:l.reset_period}))),n.free_trial_rules.length&&(b.free_trial_rules=n.free_trial_rules.map(l=>{let y={id:l.source_id,handle:l.handle,name:l.handle};return l.plan_id&&(y.plan_id=l.plan_id),l.usage_entitlement_handle&&(y.usage_entitlement_handle=l.usage_entitlement_handle),l.usage_limit_value!=null&&(y.usage_limit_value=l.usage_limit_value),y})),n.reverse_trial_rules.length&&(b.reverse_trial_rules=n.reverse_trial_rules.map(l=>{let y={id:l.source_id,handle:l.handle,name:l.handle,premium_plan_id:l.premium_plan_id,fallback_plan_id:l.fallback_plan_id,is_active:l.is_active};return l.entitlements_during_trial.length&&(y.entitlements_during_trial=[...l.entitlements_during_trial]),l.usage_entitlement_handle&&(y.usage_entitlement_handle=l.usage_entitlement_handle),l.usage_limit_value!=null&&(y.usage_limit_value=l.usage_limit_value),y})),n.theme_json&&(b.theme=JSON.parse(n.theme_json)),n.content_override_keys.length){let l={};n.content_override_keys.forEach((y,S)=>{let I=n.content_override_index[S],P={};if(I)for(let R=I.start;R<I.start+I.count;R++){let N=n.content_override_entries[R];N&&(P[N.key]=N.value);}l[y]=P;}),b.content_overrides=l;}return I_.parse(b)}function ST(n,e){switch(e.kind){case "feature":n.enabled=e.enabled;return;case "usage_limit":{n.limit_value=e.limit_value===null?"unlimited":e.limit_value;let t=k_(e.enforcement);t&&(n.enforcement=t);return}case "credits":{e.allowance!==null&&(n.allowance_value=e.allowance,e.allowance>0&&(n.reset_period="month")),n.rollover_enabled=e.rollover,n.max_balance=e.max_balance,e.initial_grant!==null&&(n.initial_grant=e.initial_grant);let t=k_(e.enforcement);t&&(n.enforcement=t);return}case "seats":n.included_count=e.included_count===null?"unlimited":e.included_count,e.seat_type_source_id&&(n.seat_type_id=e.seat_type_source_id);return;case "tiered":e.tier_value&&(n.tier_value=e.tier_value);return}}function IT(n,e,t){switch(n.kind){case "surface_render":return {type:"surface_render",slot_id:e(n.slot_idx)};case "entitlement_gate":{let r={type:"entitlement_gate",entitlement_handle:t(n.entitlement_idx)};return n.tier_threshold&&(r.tier_threshold=n.tier_threshold),r}case "usage_threshold":case "credit_threshold":case "seat_threshold":return {type:n.kind,entitlement_handle:t(n.entitlement_idx),threshold_percent:n.threshold_percent};case "trial_started":{let r={type:"trial_started"};return n.trial_type!=="none"&&(r.trial_type=n.trial_type),r}case "trial_progress":return {type:"trial_progress",progress_percent:n.progress_percent};case "trial_ending":return {type:"trial_ending",days_before_end:n.days_before_end};case "trial_ended":return {type:"trial_ended"};case "trial_converted":return {type:"trial_converted"};case "qualifier":return {type:"qualifier",qualifier:n.qualifier};default:return {type:"surface_render",slot_id:""}}}function PT(n,e,t){let r={id:n.source_id,target:q_(n.target,e,t),surfaces:n.surfaces.map(s=>D_(s))},i=M_(n.caps);return i&&(r.caps=i),n.created_at&&(r.created_at=n.created_at),n.recommendation_strategy!=="next_tier_up"&&(r.recommendation_strategy=n.recommendation_strategy),n.recommendation_plan_override&&(r.recommendation_plan_override=n.recommendation_plan_override),n.surface_slot_ids.length&&(r.surface_slot_ids=[...n.surface_slot_ids]),n.remind_later_minutes>=0&&(r.remind_later_minutes=n.remind_later_minutes),r}function q_(n,e,t){let r={plan_ids:n.plan_idxs.map(i=>e(i)),segment_chips:n.segment_chips.map(i=>i.kind==="segment"?t(i.segment_idx):i.kind==="plan"?e(i.plan_idx):i.value)};return n.billing_cadences.length&&(r.billing_cadences=[...n.billing_cadences]),r}function D_(n){return {template_id:n.template_source_id,fields:{...n.fields},ctas:n.ctas.map(e=>{let t={label:e.label,path:e.path};return Object.keys(e.config).length&&(t.config={...e.config}),t})}}function M_(n){let e={};return n.has_max_per_period&&n.max_per_period!=="unknown"&&(e.max_per_period={count:n.max_per_period_count,period:n.max_per_period}),n.cooldown_days!==-1&&(e.cooldown_days=n.cooldown_days),Object.keys(e).length?e:void 0}function TT(n,e,t,r){let i={};return Ao(n.message_block_idx)||(i.message_block_id=e(n.message_block_idx)),Ao(n.ui_path_idx)||(i.ui_path_id=r(n.ui_path_idx)),Ao(n.promotion_idx)||(i.promotion_id=t(n.promotion_idx)),n.content_payload_source_id&&(i.content_payload_id=n.content_payload_source_id),Object.keys(i).length?i:void 0}function R_(n){let e={...n.extra};return n.header&&(e.header=n.header),n.body&&(e.body=n.body),n.cta_label&&(e.cta_label=n.cta_label),n.secondary_cta_label&&(e.secondary_cta_label=n.secondary_cta_label),e}var Np=class{constructor(n){let e=n instanceof ArrayBuffer?new Uint8Array(n):n;if(this.bb=new Qs(e),!Cp.bufferHasIdentifier(this.bb))throw new Error("BundleHandle: not a RVTB FlatBuffer (missing file identifier)");if(this.root=Cp.getRootAsRuleBundle(this.bb),this._header=kT(this.root),this._header.schemaVersion<P_||this._header.schemaVersion>vp)throw new Error(`BundleHandle: unsupported schema_version=${this._header.schemaVersion} (reader supports ${P_}..${vp})`);if(this._header.runtimeAbi!==yp)throw new Error(`BundleHandle: unsupported runtime_abi=${this._header.runtimeAbi} (reader supports ${yp})`)}header(){return this._header}toPlaybook(){return xT(K0(this.root))}pool(n){return n<0||n>=this.root.stringPoolLength()?"":this.root.stringPool(n)??""}*extensionRules(){let n=this.root.extensionRulesLength();for(let e=0;e<n;e++){let t=this.root.extensionRules(e);if(!t)continue;let r=t.configArray();yield {kind:this.pool(t.kind()),schemaVersion:t.schemaVersion(),config:r?new Uint8Array(r):new Uint8Array(0)};}}unknownExtensionKinds(n){let e=new Set,t=this.root.extensionRulesLength();for(let r=0;r<t;r++){let i=this.root.extensionRules(r);if(!i)continue;let s=this.pool(i.kind());s&&!n.has(s)&&e.add(s);}return e}predicateFieldsLength(){return this.root.predicateFieldsLength()}predicateField(n){return n<0||n>=this.root.predicateFieldsLength()?"":this.root.predicateFields(n)??""}plansLength(){return this.root.plansLength()}getPlan(n){if(n<0||n>=this.root.plansLength())return null;let e=this.root.plans(n,new wo);return e?{idx:n,sourceId:this.pool(e.sourceId()),uniqueHandle:this.pool(e.uniqueHandle()),name:this.pool(e.name()),tierPosition:e.tierPosition(),sortOrder:e.sortOrder()}:null}planIdxByHandle(n){if(!this._planByHandle){this._planByHandle=new Map;let e=new wo;for(let t=0;t<this.root.plansLength();t++)this.root.plans(t,e)&&this._planByHandle.set(this.pool(e.uniqueHandle()),t);}return this._planByHandle.get(n)??null}planIdxById(n){if(!this._planById){this._planById=new Map;let e=new wo;for(let t=0;t<this.root.plansLength();t++)this.root.plans(t,e)&&this._planById.set(this.pool(e.sourceId()),t);}return this._planById.get(n)??null}entitlementsLength(){return this.root.entitlementsLength()}getEntitlement(n){if(n<0||n>=this.root.entitlementsLength())return null;let e=this.root.entitlements(n,new dc);if(!e)return null;let t=[];for(let r=0;r<e.tierHandlesLength();r++)t.push(this.pool(e.tierHandles(r)));return {idx:n,sourceId:this.pool(e.sourceId()),uniqueHandle:this.pool(e.uniqueHandle()),name:this.pool(e.name()),type:UT(e.type()),unit:this.pool(e.unit()),tierHandles:t}}entitlementIdxByHandle(n){if(!this._entitlementByHandle){this._entitlementByHandle=new Map;let e=new dc;for(let t=0;t<this.root.entitlementsLength();t++)this.root.entitlements(t,e)&&this._entitlementByHandle.set(this.pool(e.uniqueHandle()),t);}return this._entitlementByHandle.get(n)??null}entitlementRulesLength(){return this.root.entitlementRulesLength()}getEntitlementRule(n){if(n<0||n>=this.root.entitlementRulesLength())return null;let e=this.root.entitlementRules(n,new Qd);if(!e)return null;let t=[];for(let s=0;s<e.planIdxsLength();s++)t.push(e.planIdxs(s));let r=[];for(let s=0;s<e.segmentIdxsLength();s++)r.push(e.segmentIdxs(s));let i=[];for(let s=0;s<e.targetsLength();s++){let a=e.targets(s,new Jd);a&&i.push({kind:BT[a.kind()]??"plan",id:a.id()??""});}return {idx:n,sourceId:this.pool(e.sourceId()),entitlementIdx:e.entitlementIdx(),planIdxs:t,segmentIdxs:r,typeFields:RT(e,this),allocation:qT(e.allocation()),targets:i}}segmentsLength(){return this.root.segmentsLength()}getSegment(n){if(n<0||n>=this.root.segmentsLength())return null;let e=this.root.segments(n,new mc);if(!e)return null;let t=[],r=new hu;for(let i=0;i<e.predicatesLength();i++){if(!e.predicates(i,r))continue;let s=r.fieldIdx();t.push({fieldIdx:s,field:this.predicateField(s),op:DT(r.op()),value:this.pool(r.value())});}return {idx:n,sourceId:this.pool(e.sourceId()),name:this.pool(e.name()),slug:this.pool(e.slug()),combinator:e.combinator()===1?"or":"and",predicates:t,dimensionId:this.pool(e.dimensionId()),experimentId:this.pool(e.experimentId())}}segmentIdxByHandle(n){if(!this._segmentByHandle){this._segmentByHandle=new Map;let e=new mc;for(let t=0;t<this.root.segmentsLength();t++)this.root.segments(t,e)&&this._segmentByHandle.set(this.pool(e.slug()),t);}return this._segmentByHandle.get(n)??null}slotsLength(){return this.root.placementSlotsLength()}getSlot(n){if(n<0||n>=this.root.placementSlotsLength())return null;let e=this.root.placementSlots(n,new uc);return e?{idx:n,sourceId:this.pool(e.sourceId()),label:this.pool(e.label()),description:this.pool(e.description()),surfaceType:this.pool(e.surfaceType()),placementHandle:this.pool(e.placementHandle()),template:this.pool(e.template())}:null}slotIdxById(n){if(!this._slotById){this._slotById=new Map;let e=new uc;for(let t=0;t<this.root.placementSlotsLength();t++)this.root.placementSlots(t,e)&&this._slotById.set(this.pool(e.sourceId()),t);}return this._slotById.get(n)??null}surfaceTemplatesLength(){return this.root.surfaceTemplatesLength()}getSurfaceTemplate(n){if(n<0||n>=this.root.surfaceTemplatesLength())return null;let e=this.root.surfaceTemplates(n,new pc);if(!e)return null;let t=[],r=new _u;for(let i=0;i<e.fieldsLength();i++)e.fields(i,r)&&t.push({name:this.pool(r.name()),type:this.pool(r.type()),required:r.required()});return {idx:n,sourceId:this.pool(e.sourceId()),surfaceType:this.pool(e.surfaceType()),fields:t}}surfaceTemplateIdxById(n){if(!this._surfaceTemplateById){this._surfaceTemplateById=new Map;let e=new pc;for(let t=0;t<this.root.surfaceTemplatesLength();t++)this.root.surfaceTemplates(t,e)&&this._surfaceTemplateById.set(this.pool(e.sourceId()),t);}return this._surfaceTemplateById.get(n)??null}poolOrNull(n){let e=this.pool(n);return e===""?null:e}seatTypesLength(){return this.root.seatTypesLength()}getSeatType(n){if(n<0||n>=this.root.seatTypesLength())return null;let e=this.root.seatTypes(n,new fu);if(!e)return null;let t=[];for(let r=0;r<e.entitlementHandlesLength();r++)t.push(this.pool(e.entitlementHandles(r)??0));return {handle:this.pool(e.handle()),name:this.pool(e.name()),is_default:e.isDefault(),entitlement_handles:t}}enforcementDefaultsLength(){return this.root.enforcementDefaultsLength()}getEnforcementDefault(n){if(n<0||n>=this.root.enforcementDefaultsLength())return null;let e=this.root.enforcementDefaults(n,new Xd);if(!e)return null;let t=[];for(let r=0;r<e.notificationChannelsLength();r++)t.push(this.pool(e.notificationChannels(r)??0));return {handle:this.pool(e.handle()),entitlement_handle:this.poolOrNull(e.entitlementHandle()),soft_limit_percent:To(e.softLimitPercent()),hard_limit_percent:To(e.hardLimitPercent()),soft_limit_action:this.pool(e.softLimitAction()),hard_limit_action:this.pool(e.hardLimitAction()),grace_period_hours:To(e.gracePeriodHours()),notification_channels:t,is_active:e.isActive()}}placementSettingsLength(){return this.root.placementSettingsLength()}getPlacementSetting(n){if(n<0||n>=this.root.placementSettingsLength())return null;let e=this.root.placementSettings(n,new mu);return e?{handle:this.pool(e.handle()),global_frequency_cap:CT(this.pool(e.globalFrequencyCap())),global_frequency_cap_period:this.poolOrNull(e.globalFrequencyCapPeriod()),suppress_for_paid:e.suppressForPaid(),suppress_for_trial:e.suppressForTrial(),allow_stacking:e.allowStacking(),priority_collision_strategy:this.poolOrNull(e.priorityCollisionStrategy())}:null}segmentDimensionsLength(){return this.root.segmentDimensionsLength()}getSegmentDimension(n){if(n<0||n>=this.root.segmentDimensionsLength())return null;let e=this.root.segmentDimensions(n,new gu);return e?{handle:this.pool(e.handle()),name:this.pool(e.name()),category:this.poolOrNull(e.category()),visibility_toggle:e.visibilityToggle(),source_type:this.poolOrNull(e.sourceType())}:null}meterBindingsLength(){return this.root.meterBindingsLength()}getMeterBinding(n){if(n<0||n>=this.root.meterBindingsLength())return null;let e=this.root.meterBindings(n,new su);return e?{handle:this.pool(e.handle()),entitlement_handle:this.pool(e.entitlementHandle()),meter_handle:this.pool(e.meterHandle()),limit:To(e.limit()),reset_period:this.poolOrNull(e.resetPeriod())}:null}freeTrialRulesLength(){return this.root.freeTrialRulesLength()}getFreeTrialRule(n){if(n<0||n>=this.root.freeTrialRulesLength())return null;let e=this.root.freeTrialRules(n,new eu);return e?{source_id:this.pool(e.sourceId()),handle:this.pool(e.handle()),plan_id:this.poolOrNull(e.planId()),usage_entitlement_handle:this.poolOrNull(e.usageEntitlementHandle()),usage_limit_value:To(e.usageLimitValue())}:null}reverseTrialRulesLength(){return this.root.reverseTrialRulesLength()}getReverseTrialRule(n){if(n<0||n>=this.root.reverseTrialRulesLength())return null;let e=this.root.reverseTrialRules(n,new pu);if(!e)return null;let t=[];for(let r=0;r<e.entitlementsDuringTrialLength();r++)t.push(this.pool(e.entitlementsDuringTrial(r)??0));return {source_id:this.pool(e.sourceId()),handle:this.pool(e.handle()),premium_plan_id:this.pool(e.premiumPlanId()),fallback_plan_id:this.pool(e.fallbackPlanId()),entitlements_during_trial:t,is_active:e.isActive(),usage_entitlement_handle:this.poolOrNull(e.usageEntitlementHandle()),usage_limit_value:To(e.usageLimitValue())}}placementsLength(){return this.root.placementsLength()}getPlacement(n){if(n<0||n>=this.root.placementsLength())return null;let e=this.root.placements(n,new Eo);if(!e)return null;let t=[],r=new cu;for(let s=0;s<e.payloadsLength();s++)e.payloads(s,r)&&t.push(wT(r,this));let i=e.trigger();return {idx:n,sourceId:this.pool(e.sourceId()),name:this.pool(e.name()),category:MT(e.category()),trigger:i?ET(i,this):{kind:"unknown"},payloads:t,order:e.order()}}placementIdxById(n){if(!this._placementById){this._placementById=new Map;let e=new Eo;for(let t=0;t<this.root.placementsLength();t++)this.root.placements(t,e)&&this._placementById.set(this.pool(e.sourceId()),t);}return this._placementById.get(n)??null}messageBlocksLength(){return this.root.messageBlocksLength()}getMessageBlock(n){if(n<0||n>=this.root.messageBlocksLength())return null;let e=this.root.messageBlocks(n,new iu);return e?LT(e,this):null}placementPayloadsLength(){return this.root.placementPayloadsLength()}getPlacementPayload(n){if(n<0||n>=this.root.placementPayloadsLength())return null;let e=this.root.placementPayloads(n,new uu);if(!e)return null;let t=e.contentLink(new du);return {sourceId:this.pool(e.sourceId()),placementSourceId:this.pool(e.placementSourceId()),sourceMode:e.sourceMode()===1?"content_linked":"inline",messageBlockIdx:t?t.messageBlockIdx():fc}}getPlacementsForSlot(n){if(n<0||n>=this.root.slotPlacementIndexLength())return [];let e=this.root.slotPlacementIndex(n,new sa);if(!e)return [];let t=this.surfaceRenderMembers(),r=e.start(),i=e.count();return t.slice(r,r+i)}surfaceRenderMembers(){if(this._slotPlacementMembers)return this._slotPlacementMembers;let n=[];for(let i=0;i<this.root.placementSlotsLength();i++)n.push([]);let e=new Eo,t=new au;for(let i=0;i<this.root.placementsLength();i++){if(!this.root.placements(i,e))continue;let s=e.trigger(t);if(s&&s.type()===1){let a=s.slotIdx();a>=0&&a<n.length&&n[a].push(i);}}let r=[];for(let i of n)for(let s of i)r.push(s);return this._slotPlacementMembers=r,r}};function To(n){return n<0n?null:Number(n)}function CT(n){if(n==="")return null;let e=JSON.parse(n);return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function kT(n){let e=n.header(new tu);if(!e)throw new Error("BundleHandle: header missing from bundle");return {schemaVersion:e.schemaVersion(),runtimeAbi:e.runtimeAbi(),configVersion:e.configVersion()??"",exportedAtMs:Number(e.exportedAtMs()),builtAtMs:Number(e.builtAtMs()),sourceSha256:e.sourceSha256()??"",tenantId:e.tenantId()??"",changeSetId:e.changeSetId()??"",packageSchemaVersion:e.packageSchemaVersion()??"",environmentId:e.environmentId()??"",playbookHandle:e.playbookHandle()??""}}function RT(n,e){switch(n.typeFieldsType()){case 1:return {kind:"feature",enabled:n.typeFields(new Op)?.enabled()??false};case 2:{let t=n.typeFields(new Lp),r=t?Number(t.limitValue()):-1;return {kind:"usage_limit",limitValue:r===-1?null:r,enforcement:w_(t?.enforcement()??0)}}case 3:{let t=n.typeFields(new Ap),r=t?Number(t.allowance()):-1,i=t?Number(t.maxBalance()):-1,s=t?Number(t.initialGrant()):-1;return {kind:"credits",allowance:r===-1?null:r,rollover:t?.rollover()??false,maxBalance:i===-1?null:i,initialGrant:s===-1?null:s,enforcement:w_(t?.enforcement()??0)}}case 4:{let t=n.typeFields(new jp),r=t?Number(t.includedCount()):-1;return {kind:"seats",includedCount:r===-1?null:r,seatTypeSourceId:e.pool(t?.seatTypeSourceId()??0)}}case 5:{let t=n.typeFields(new Fp);return {kind:"tiered",tierValue:e.pool(t?.tierValue()??0)}}default:return {kind:"unknown"}}}function ET(n,e){switch(n.type()){case 1:return {kind:"surface_render",slotIdx:n.slotIdx()};case 2:return {kind:"entitlement_gate",entitlementIdx:n.entitlementIdx(),tierThreshold:e.pool(n.tierThreshold())};case 3:return {kind:"usage_threshold",entitlementIdx:n.entitlementIdx(),thresholdPercent:n.thresholdPercent()};case 4:return {kind:"credit_threshold",entitlementIdx:n.entitlementIdx(),thresholdPercent:n.thresholdPercent()};case 5:return {kind:"seat_threshold",entitlementIdx:n.entitlementIdx(),thresholdPercent:n.thresholdPercent()};case 6:{let t=n.trialType();return {kind:"trial_started",trialType:t===1?"free":t===2?"reverse":"none"}}case 7:return {kind:"trial_progress",progressPercent:n.progressPercent()};case 8:return {kind:"trial_ending",daysBeforeEnd:n.daysBeforeEnd()};case 9:return {kind:"trial_ended"};case 10:return {kind:"trial_converted"};case 11:return {kind:"qualifier",qualifier:e.pool(n.qualifier())};default:return {kind:"unknown"}}}function wT(n,e){let t=n.target(),r=[],i=new Oo;for(let a=0;a<n.surfacesLength();a++)n.surfaces(a,i)&&r.push(jT(i,e));let s=[];for(let a=0;a<n.surfaceSlotIdsLength();a++)s.push(e.pool(n.surfaceSlotIds(a)));return {sourceId:e.pool(n.sourceId()),target:t?AT(t,e):{planIdxs:[],segmentChips:[],billingCadences:[]},surfaces:r,caps:VT(n.caps()),createdAt:e.pool(n.createdAt()),recommendationStrategy:NT(n.recommendationStrategy()),recommendationPlanOverride:e.pool(n.recommendationPlanOverride()),surfaceSlotIds:s,remindLaterMinutes:n.remindLaterMinutes()}}function AT(n,e){let t=[];for(let a=0;a<n.planIdxsLength();a++)t.push(n.planIdxs(a));let r=[],i=new lu;for(let a=0;a<n.segmentChipsLength();a++)n.segmentChips(a,i)&&r.push(OT(i,e));let s=[];for(let a=0;a<n.billingCadencesLength();a++)s.push(e.pool(n.billingCadences(a)));return {planIdxs:t,segmentChips:r,billingCadences:s}}function OT(n,e){switch(n.kind()){case 1:return {kind:"segment",segment_idx:n.segmentIdx()};case 2:return {kind:"plan",plan_idx:n.planIdx()};case 3:return {kind:"literal",value:e.pool(n.literal())};default:return {kind:"literal",value:""}}}function jT(n,e){let t={};for(let s=0;s<n.fieldsLength();s++){let a=n.fields(s);a&&(t[e.pool(a.key())]=e.pool(a.value()));}let r=[],i=new ou;for(let s=0;s<n.ctasLength();s++){if(!n.ctas(s,i))continue;let a={},o=Math.min(i.configKeysLength(),i.configValuesLength());for(let p=0;p<o;p++)a[e.pool(i.configKeys(p))]=e.pool(i.configValues(p));r.push({label:e.pool(i.label()),path:e.pool(i.path()),config:a});}return {templateIdx:n.templateIdx(),templateSourceId:e.pool(n.templateSourceId()),fields:t,ctas:r}}function E_(n,e){let t={};if(!n)return t;let r=e.pool(n.header());r&&(t.header=r);let i=e.pool(n.body());i&&(t.body=i);let s=e.pool(n.ctaLabel());s&&(t.cta_label=s);let a=e.pool(n.secondaryCtaLabel());a&&(t.secondary_cta_label=a);let o=new nu;for(let p=0;p<n.extraLength();p++){let b=n.extra(p,o);b&&(t[e.pool(b.key())]=e.pool(b.value()));}return t}function FT(n){switch(n){case 2:return "active";case 3:return "archived";default:return "draft"}}function LT(n,e){let t=[],r=new ru;for(let i=0;i<n.segmentOverridesLength();i++)n.segmentOverrides(i,r)&&t.push({segment_value_id:e.pool(r.segmentValue()),content:E_(r.content(new Va),e)});return {block_id:e.pool(n.sourceId()),tenant_id:e.pool(n.tenantId()),name:e.pool(n.name()),default_content:E_(n.defaultContent(new Va),e),segment_overrides:t,status:FT(n.status()),created_at:e.pool(n.createdAt()),updated_at:e.pool(n.updatedAt())}}function VT(n){return n?{hasMaxPerPeriod:n.hasMaxPerPeriod(),maxPerPeriodCount:n.maxPerPeriodCount(),maxPerPeriod:HT(n.maxPerPeriod()),cooldownDays:n.cooldownDays()}:{hasMaxPerPeriod:false,maxPerPeriodCount:0,maxPerPeriod:"unknown",cooldownDays:-1}}function UT(n){switch(n){case 1:return "feature";case 2:return "usage_limit";case 3:return "credits";case 4:return "seats";case 5:return "tiered";default:return "unknown"}}function w_(n){switch(n){case 1:return "hard_block";case 5:return "soft_block";case 6:return "degrade";case 7:return "allow_overage";case 2:return "soft_warn";case 3:return "throttle";case 4:return "notify";default:return "unknown"}}var BT={0:"plan",1:"plan_variation",2:"addon",3:"addon_variation"};function qT(n){switch(n){case 1:return "account_pool";case 2:return "per_instance";case 3:return "per_user";case 4:return "per_user_pooled";default:return "unknown"}}function DT(n){switch(n){case 1:return "eq";case 2:return "neq";case 3:return "gt";case 4:return "lt";case 5:return "gte";case 6:return "lte";case 7:return "contains";case 8:return "in";default:return "unknown"}}function MT(n){switch(n){case 1:return "fixed";case 2:return "gated";case 3:return "usage_credit_seat";case 4:return "trials";case 5:return "other_conversion";case 6:return "retention";default:return "unknown"}}function NT(n){switch(n){case 1:return "best_value";case 2:return "custom";default:return "next_tier_up"}}function HT(n){switch(n){case 1:return "session";case 2:return "day";case 3:return "week";case 4:return "month";case 5:return "lifetime";default:return "unknown"}}var N_=fc;function Hp(n){return !n||n.trialActive!==true||n.trialState==="expired"?null:typeof n.trialProgressPercent=="number"&&n.trialProgressPercent>=0?Math.min(100,n.trialProgressPercent):typeof n.trialDaysTotal=="number"&&typeof n.trialDaysRemaining=="number"&&n.trialDaysTotal>0?Math.max(0,n.trialDaysTotal-n.trialDaysRemaining)/n.trialDaysTotal*100:typeof n.trialUsageLimit=="number"&&typeof n.trialUsageConsumed=="number"&&n.trialUsageLimit>0?Math.min(100,Math.max(0,n.trialUsageConsumed/n.trialUsageLimit*100)):null}function kp(n,e){if(!n)return true;if(!e)return false;switch(n.kind){case "trial_started":{if(e.trialActive!==true)return false;let t=Hp(e);return t===null?false:t<=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<=n.daysBeforeEnd;case "trial_ended":return e.trialState==="expired";case "trial_converted":return e.trialState==="converted";default:return false}}function H_(n,e){let t=n.filter(a=>a.trialTrigger?.kind==="trial_progress");if(t.length===0)return null;let r=t.filter(a=>a.trialTrigger?.kind!=="trial_progress"?false:e>=a.trialTrigger.progressPercent);if(r.length===0)return null;let i=r[0];for(let a of r.slice(1)){let o=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1,p=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(o>p||o===p&&a.entryOrder<i.entryOrder)&&(i=a);}let s=r.filter(a=>a!==i).map(a=>a.ruleId).filter(a=>typeof a=="string"&&a.length>0);return {winner:i,supersededIds:s}}function z_(n){switch(n.kind){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof n.progressPercent=="number"?{kind:"trial_progress",progressPercent:n.progressPercent}:void 0;case "trial_ending":return typeof n.daysBeforeEnd=="number"?{kind:"trial_ending",daysBeforeEnd:n.daysBeforeEnd}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function K_(n){if(!(!n||typeof n.type!="string"))switch(n.type){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof n.progress_percent=="number"?{kind:"trial_progress",progressPercent:n.progress_percent}:void 0;case "trial_ending":return typeof n.days_before_end=="number"?{kind:"trial_ending",daysBeforeEnd:n.days_before_end}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function _c(n){let e=Array.isArray(n.payloads)?n.payloads:[],t=new Map((Array.isArray(n.messageBlocks)?n.messageBlocks:[]).map(a=>[a.block_id,a])),r=Array.isArray(n.uiPaths)?n.uiPaths:[],i=Array.isArray(n.promotions)?n.promotions:[],s=Array.isArray(n.tokens)?n.tokens:[];return {listPayloads:a=>e.filter(o=>o.surface_template_id===a),getMessageBlockById:a=>t.get(a),getUiPathById:a=>r.find(o=>o.id===a||o.name===a),getPromotionById:a=>i.find(o=>o.id===a||o.name===a),listPersonalizationTokens:()=>s}}function bc(n,e){let t={...n};for(let r of e){let i=n[r.token];if(i==null||!r.value_map)continue;let s=String(i),a=r.value_map[s];a!==void 0&&(t[r.token]=a);}return t}function zp(n,e){let t={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return n.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,i)=>{let s=e[i];if(s===void 0){let a=t[i];a&&(s=e[a]);}return s===void 0?r:String(s)})}function Kp(n,e){let t={};for(let[r,i]of Object.entries(n))typeof i=="string"?t[r]=zp(i,e):t[r]=i;return t}function G_(n,e){return Kp(n,e)}function Gp(n,e,t,r,i,s,a){let o=t.filter(S=>S.surface_template_id===n&&S.status==="active");if(o.length===0)return null;let p=new Map(r.map(S=>[S.block_id,S])),b=new Set(e.segmentIds),l=bc(s,i),y=a?.segmentDimensions;for(let S of o){let I=S.default_message_block_id,P,R=S.ui_path_id,N=S.promotion_id;if(S.segment_content_map){if(y&&Object.keys(y).length>0){let Y=new Map;for(let U of S.segment_content_map){let Oe=U.dimension;if(!Oe)continue;let It=Y.get(Oe)??[];It.push(U),Y.set(Oe,It);}if(Y.size>0){let U=true,Oe;for(let[,It]of Y){let Dn=It.find(W=>b.has(W.segment_id));if(!Dn){U=false;break}Oe||(Oe=Dn);}if(U&&Oe)I=Oe.message_block_id,P=Oe.segment_id,Oe.ui_path_id&&(R=Oe.ui_path_id),Oe.promotion_id&&(N=Oe.promotion_id);else if(!U)continue}else for(let U of S.segment_content_map)if(b.has(U.segment_id)){I=U.message_block_id,P=U.segment_id,U.ui_path_id&&(R=U.ui_path_id),U.promotion_id&&(N=U.promotion_id);break}}else for(let Y of S.segment_content_map)if(b.has(Y.segment_id)){I=Y.message_block_id,P=Y.segment_id,Y.ui_path_id&&(R=Y.ui_path_id),Y.promotion_id&&(N=Y.promotion_id);break}}let Z=p.get(I);if(!Z||Z.status!=="active")continue;let se={...Z.default_content};if(Z.segment_overrides){let Y=P?Z.segment_overrides.find(U=>U.segment_value_id===P):Z.segment_overrides.find(U=>b.has(U.segment_value_id));Y&&(se={...se,...Y.content},P=Y.segment_value_id);}let Pe=G_(se,l);return {payload:S,messageBlock:Z,resolvedContent:Pe,matchedSegmentId:P,uiPathId:R,promotionId:N}}return null}async function bu(n,e,t,r,i){let a=(await Promise.resolve(t.listPayloads(n))).filter(l=>l.status==="active");if(a.length===0)return null;let o=new Set(e.segmentIds),p=i??(t.listPersonalizationTokens?await Promise.resolve(t.listPersonalizationTokens()):[]),b=bc(r,p);for(let l of a){let y=l.default_message_block_id,S,I=l.ui_path_id,P=l.promotion_id;if(l.segment_content_map){for(let Y of l.segment_content_map)if(o.has(Y.segment_id)){y=Y.message_block_id,S=Y.segment_id,Y.ui_path_id&&(I=Y.ui_path_id),Y.promotion_id&&(P=Y.promotion_id);break}}let R=await Promise.resolve(t.getMessageBlockById(y));if(!R||R.status!=="active")continue;let N={...R.default_content};if(R.segment_overrides){let Y=S?R.segment_overrides.find(U=>U.segment_value_id===S):R.segment_overrides.find(U=>o.has(U.segment_value_id));Y&&(N={...N,...Y.content},S=Y.segment_value_id);}let Z=G_(N,b),se;I&&t.getUiPathById&&(se=await Promise.resolve(t.getUiPathById(I)));let Pe;return P&&t.getPromotionById&&(Pe=await Promise.resolve(t.getPromotionById(P))),{payload:l,messageBlock:R,resolvedContent:Z,matchedSegmentId:S,uiPathId:I,promotionId:P,uiPath:se??void 0,promotion:Pe??void 0}}return null}function zT(n,e){let t=e.grants;if(!t)return;let r=t.user?.[n]??t.instance?.[n]??t.account?.[n];switch(r?.allocation){case "account_pool":case "per_user_pooled":return t.account?.[n]??r;case "per_instance":return t.instance?.[n]??r;case "per_user":return t.user?.[n]??r;default:return r}}function KT(n,e){let t=zT(n,e);if(t&&typeof t.limit=="number")return {used:typeof t.used=="number"?t.used:0,limit:t.limit};let r=e.usage?.[n];return r&&typeof r.limit=="number"?{used:r.used,limit:r.limit,remaining:r.remaining}:null}function GT(n,e){if(!e)return null;let t=KT(n.entitlementHandle,e);return !t||!Number.isFinite(t.limit)||t.limit<=0?null:n.kind==="credit_threshold"&&typeof t.remaining=="number"?(t.limit-t.remaining)/t.limit*100:Number.isFinite(t.used)?t.used/t.limit*100:null}function A_(n,e){if(!n)return true;let t=GT(n,e);return t===null?false:t>=n.thresholdPercent}var{Unrestricted:Ce}=Li,{Persisted:vc,Transient:aa}=Ws,{External:Ii,Internal:$T}=Qi,$_=Gn(pn.Playbook,{sdkInput:true}),ZT=Gn(pn.Playbook,{inConfig:false,sdkInput:false}),YT=Gn(pn.Playbook,{inConfig:false,sdkInput:true}),WT=Gn(pn.Playbook,{inConfig:false,sdkInput:false,source:Vi.Runtime}),XT=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),JT={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function QT(n){return JT[n]??[]}function eC(n,e){return QT(e).includes(n)}var Z_=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),Y_=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),tC=z.object({count:z.number().int().positive().meta(Ce),period:Y_.meta(Ce)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii});z.object({surface_type:z.string().min(1).meta(Ce),rules:z.array(tC).meta(Ce),cooldown_ms:z.number().int().nonnegative().optional().meta(Ce)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Ii,...Li.Operational,...YT});var nC=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":aa,"x-revturbine-schema-exposure":Ii}),Ro=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),name:As.meta(Ce),handle:rr.meta(Ce),description:Ld.meta(Ce),category:Z_.meta(Ce),drag_order_in_category:z.number().int().default(0).meta(Ce),surface_slot_id:z.string().optional().meta(Ce),entitlement_id:z.string().optional().meta(Ce),tier_threshold:z.string().optional().meta(Ce),threshold_percent:wa.optional().meta(Ce),trial_type:z.enum(["free","reverse"]).optional().meta(Ce),trigger_type:z.string().optional().meta(Ce),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ce),days_before_end:z.number().int().min(0).optional().meta(Ce),qualifier:XT.optional().meta(Ce),activation_window_start:z.string().datetime().optional().meta(Ce),activation_window_end:z.string().datetime().optional().meta(Ce),metadata:pi.meta(Ce)}).meta({id:"Placement","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Ii,...$_,...ts()}),rC=Or("PlacementAnchor"),iC=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),sC=z.object({code:iC.meta(Ce),message:z.string().min(1).meta(Ce),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ce)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),O_=Ro.extend({warnings:z.array(sC).optional().meta(Ce)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),aC=z.object({label:z.string().min(1).max(200).meta(Ce),cta_path_type:nC.meta(Ce),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ce)}).meta({id:"CtaObject","x-revturbine-schema-persistence":aa,"x-revturbine-schema-exposure":Ii}),cc=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ce,readOnly:true}),handle:rr.meta({...Ce,readOnly:true}),placement_id:z.string().min(1).meta(Ce),drag_order:z.number().int().default(0).meta(Ce),target_plan_ids:z.array(z.string()).default([]).meta(Ce),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ce),target_segments:z.array(z.string()).default([]).meta(Ce),surface_slot_ids:z.array(z.string()).default([]).meta(Ce),surface_template_id:z.string().min(1).meta(Ce),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ce),cta_list:z.array(aC).default([]).meta(Ce),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ce),max_period_unit:Y_.default("session").meta(Ce),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ce),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ce),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ce),recommendation_plan_override:z.string().optional().meta(Ce)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Ii,...$_,...Ui()}),oC=Or("PlacementPayloadAnchor");xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({handle:rr.meta({...Ce,readOnly:true}),placement_payload_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),traffic_allocation_percent:z.number().min(0).max(100).meta(Ce),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Ce),status:z.enum(["active","paused","complete"]).default("active").meta(Ce)}).meta({id:"PlacementVariant","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":$T,...ZT,...Ui()});var lC=xn.merge(En).merge(wn).merge(Jn).merge(ir).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ce),surface_type:Dm.meta(Ce),surface_template_ids:z.array(z.string()).default([]).meta(Ce),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ce),first_seen:z.string().datetime().meta({...Ce,readOnly:true}),last_seen:z.string().datetime().meta({...Ce,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ce),placement_count:z.number().int().min(0).default(0).meta({...Ce,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":vc,"x-revturbine-schema-exposure":Ii,...WT,...ts("surface_slot_handle")}),cC=ni(Ro),dC=ni(cc);({"/api/placement-anchors":{get:E({operationId:"listPlacementAnchors",requestParams:{query:en},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:Qt(rC)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:E({operationId:"listPlacements",requestParams:{query:en},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:Qt(Ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:E({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ar(Ro)}}},responses:{201:{description:"Created",content:{"application/json":{schema:O_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:E({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.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:E({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:cC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:O_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:E({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:Qn}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:E({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.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:E({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Z_,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:E({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:Qt(oC)}}},default:{description:"Error response",content:{"application/json":{schema:Qn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:E({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:en},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:Qt(cc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:E({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ar(cc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:cc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:E({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:dC}}},responses:{200:{description:"Updated",content:{"application/json":{schema:cc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:E({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:E({operationId:"listSurfaceSlots",requestParams:{query:en},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:Qt(lC)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function j_(n,e,t){if(!n)return true;if(!eC(n.qualifier,e))return false;switch(n.qualifier){case "none_always_on":return true;case "payment_failed":return t?.paymentFailed===true;case "payment_at_risk":return t?.paymentAtRisk===true;default:return true}}function F_(n,e,t){if(!n||!n.tierThreshold)return true;let r=e.get(n.entitlementHandle);if(!r||r.length===0)return false;let i=r.indexOf(n.tierThreshold);if(i<0)return false;let s=t?.tiers?.[n.entitlementHandle];return (s?r.indexOf(s):-1)<i}var W_={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 uC(n,e){return n.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(t,r)=>{let i=e[r];return i==null?`{{${r}}}`:String(i)})}function mC(n){let e={};for(let[t,r]of Object.entries(n)){if(typeof r=="string"){e[t]=uC(r,n);continue}e[t]=r;}return e}function X_(n){if(!n?.path)return {type:"dismiss"};let e=n.path,t=n.config??{};return e==="open_checkout"?{type:"open_checkout_modal",plan_handle:typeof t.purchase=="string"?t.purchase:void 0}:e==="view_plans"?{type:"navigate_to_plans"}:e==="open_rt_placement"?{type:"open_rt_placement",placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0}:{type:e,...t}}function J_(n,e){if(n==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function pC(n){if(!n||typeof n!="object")return;let e="type"in n&&typeof n.type=="string"?n.type:void 0,t="qualifier"in n?n.qualifier:void 0;return J_(e,t)}function fC(n){if(n)return J_(n.kind,n.qualifier)}function Q_(n,e,t){if(!(n!=="usage_threshold"&&n!=="credit_threshold"&&n!=="seat_threshold")&&!(typeof e!="string"||e.length===0)&&!(typeof t!="number"||!Number.isFinite(t)))return {kind:n,entitlementHandle:e,thresholdPercent:t}}function hC(n,e){if(!n||typeof n!="object")return;let t="type"in n&&typeof n.type=="string"?n.type:void 0,r="threshold_percent"in n?n.threshold_percent:void 0;return Q_(t,e,r)}function gC(n,e){if(n)return Q_(n.kind,e,n.thresholdPercent)}function eb(n,e,t){if(n!=="entitlement_gate"||typeof e!="string"||e.length===0)return;let r=typeof t=="string"&&t.length>0?t:void 0;return {kind:"entitlement_gate",entitlementHandle:e,tierThreshold:r}}function _C(n,e){if(!n||typeof n!="object")return;let t="type"in n&&typeof n.type=="string"?n.type:void 0,r="tier_threshold"in n?n.tier_threshold:void 0;return eb(t,e,r)}function bC(n,e){if(n)return eb(n.kind,e,n.tierThreshold)}function vC(n){if(!n||typeof n!="object"||!("entitlement_handle"in n))return;let e=n.entitlement_handle;return typeof e=="string"?e:void 0}function yC(n){if(!n||typeof n!="object"||!("slot_id"in n))return;let e=n.slot_id;return typeof e=="string"?e:void 0}function xC(n,e){let t={...W_};for(let o of n.surface_templates??[])t[o.id]=o.surface_type;let r=new Map;for(let o of n.plans??[])r.set(o.unique_handle,o.unique_handle);let i=new Map;for(let o of n.entitlements??[])o.tier_definitions?.length&&i.set(o.unique_handle,o.tier_definitions.map(p=>p.handle));let s=new Map,a=new Map;for(let o of e.placements){let p=o.payloads[0];if(!p)continue;let b=p.surfaces[0];if(!b)continue;let l=b.template_id,y=t[l]??"custom",S={...b.fields};b.ctas?.[0]&&(S.cta_label=b.ctas[0].label),b.ctas?.[1]&&(S.secondary_cta_label=b.ctas[1].label);let I=X_(b.ctas?.[0]),P=Array.isArray(p.target?.plan_ids)?p.target.plan_ids:[],R=vC(o.trigger),N=yC(o.trigger),Z=K_(o.trigger),se=hC(o.trigger,R),Pe=pC(o.trigger),Y=_C(o.trigger,R),U={output_id:p.id,category:o.category,surface:{template:l,type:y,slot_id:o.id},content:{...S,__target_plan_ids:P,...R?{__trigger_entitlement_handle:R}:{},...Z?{__trigger_kind:Z.kind}:{}},cta_path:I,rule_id:o.id,decision_id:p.id,config_version:Od(n),present_upsell:true},Oe=s.get(l)??[];Oe.push({output:U,entryOrder:o.order??0,entryCategory:o.category,triggerEntitlementHandle:R,triggerSlotId:N,trialTrigger:Z,thresholdTrigger:se,qualifierTrigger:Pe,entitlementGateTrigger:Y}),s.set(l,Oe);let It=o.id.replace(/^pl_/,"");a.set(It,U),a.set(o.id,U);}for(let o of s.values())o.sort((p,b)=>p.entryOrder-b.entryOrder);return {outputsByTemplate:s,outputsByName:a,planHandleToId:r,tierLaddersByHandle:i}}function SC(n,e){let t=e.trigger;if(t.kind==="entitlement_gate"||t.kind==="usage_threshold"||t.kind==="credit_threshold"||t.kind==="seat_threshold")return n.getEntitlement(t.entitlementIdx)?.uniqueHandle}function IC(n,e){return e.trigger.kind!=="surface_render"?void 0:n.getSlot(e.trigger.slotIdx)?.sourceId}function PC(n){let e={...W_};for(let o=0;o<n.surfaceTemplatesLength();o++){let p=n.getSurfaceTemplate(o);p&&(e[p.sourceId]=p.surfaceType);}let t=new Map;for(let o=0;o<n.plansLength();o++){let p=n.getPlan(o);p&&t.set(p.uniqueHandle,p.sourceId);}let r=new Map;for(let o=0;o<n.entitlementsLength();o++){let p=n.getEntitlement(o);p&&p.tierHandles.length>0&&r.set(p.uniqueHandle,p.tierHandles);}let i=new Map,s=new Map,a=n.header().configVersion;for(let o=0;o<n.placementsLength();o++){let p=n.getPlacement(o);if(!p)continue;let b=p.payloads[0];if(!b)continue;let l=b.surfaces[0];if(!l)continue;let y=l.templateSourceId,S=e[y]??"custom",I={...l.fields};l.ctas[0]&&(I.cta_label=l.ctas[0].label),l.ctas[1]&&(I.secondary_cta_label=l.ctas[1].label);let P=X_(l.ctas[0]),R=[];for(let W of b.target.planIdxs){let Pt=n.getPlan(W);Pt&&R.push(Pt.sourceId);}let N=SC(n,p),Z=IC(n,p),se=z_(p.trigger),Pe=gC(p.trigger,N),Y=fC(p.trigger),U=bC(p.trigger,N),Oe={output_id:b.sourceId,category:p.category,surface:{template:y,type:S,slot_id:p.sourceId},content:{...I,__target_plan_ids:R,...N?{__trigger_entitlement_handle:N}:{},...se?{__trigger_kind:se.kind}:{}},cta_path:P,rule_id:p.sourceId,decision_id:b.sourceId,config_version:a,present_upsell:true},It=i.get(y)??[];It.push({output:Oe,entryOrder:p.order,entryCategory:p.category,triggerEntitlementHandle:N,triggerSlotId:Z,trialTrigger:se,thresholdTrigger:Pe,qualifierTrigger:Y,entitlementGateTrigger:U}),i.set(y,It);let Dn=p.sourceId.replace(/^pl_/,"");s.set(Dn,Oe),s.set(p.sourceId,Oe);}for(let o of i.values())o.sort((p,b)=>p.entryOrder-b.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:t,tierLaddersByHandle:r}}function TC(n,e){let t=n.message_blocks,r=n.placement_payloads;if(!t?.length||!r?.length)return;let i=new Map;for(let a of e.placements){let o=a.payloads[0]?.surfaces?.[0]?.template_id;o&&i.set(a.id,o);}let s=[];for(let a of r){let o=a.content_link?.message_block_id;if(!o)continue;let p=i.get(a.placement_id);p&&s.push({payload_id:a.payload_id,tenant_id:"",name:a.payload_id,surface_template_id:p,default_message_block_id:o,ui_path_id:a.content_link?.ui_path_id,promotion_id:a.content_link?.promotion_id,status:"active"});}if(s.length!==0)return _c({payloads:s,messageBlocks:t,uiPaths:n.content_ui_paths,promotions:n.content_promotions,tokens:n.personalization_tokens})}function CC(n){let e=n.messageBlocksLength(),t=n.placementPayloadsLength();if(e===0||t===0)return;let r=new Map;for(let o=0;o<n.placementsLength();o++){let p=n.getPlacement(o);if(!p)continue;let b=p.payloads[0]?.surfaces?.[0]?.templateSourceId;b&&r.set(p.sourceId,b);}let i=[],s=new Map;for(let o=0;o<e;o++){let p=n.getMessageBlock(o);p&&(i.push(p),s.set(o,p.block_id));}let a=[];for(let o=0;o<t;o++){let p=n.getPlacementPayload(o);if(!p||p.messageBlockIdx===N_)continue;let b=s.get(p.messageBlockIdx);if(!b)continue;let l=r.get(p.placementSourceId);l&&a.push({payload_id:p.sourceId,tenant_id:"",name:p.sourceId,surface_template_id:l,default_message_block_id:b,status:"active"});}if(a.length!==0)return _c({payloads:a,messageBlocks:i})}function kC(n){let e={};for(let t=0;t<n.segmentsLength();t++){let r=n.getSegment(t);r?.experimentId&&(e[r.slug]=r.experimentId);}return e}function tb(n){let{source:e,impressionHistory:t}=n,{outputsByTemplate:r,outputsByName:i,planHandleToId:s,tierLaddersByHandle:a}=e.format==="flatbuffer"?PC(e.handle):xC(e.exportedConfig,e.placements),o=e.format==="json"?TC(e.exportedConfig,e.placements):CC(e.handle),p=e.format==="json"?Jg(e.exportedConfig.segments??[]):kC(e.handle);function b(l,y,S,I){let P=Array.isArray(l.content.__target_plan_ids)?l.content.__target_plan_ids.filter(N=>typeof N=="string"):[],R=Array.isArray(l.content.__target_billing_periods)?l.content.__target_billing_periods.filter(N=>typeof N=="string"):[];return mp({target_plan_ids:P,target_billing_periods:R,category:l.category},{currentPlanId:y,planHandle:S,billingPeriod:I}).eligible}return async(l,y,S)=>{let I=S?.__providers,P=I?.plan?.currentPlanHandle,R=I?.plan?.billingPeriod,N=P?s.get(P):void 0,Z=ht=>typeof ht=="string"?ht:"",se=Array.isArray(y?.metadata?.surface_template_ids)?y.metadata.surface_template_ids:void 0,Pe,Y=[];if(se&&se.length>0){let ht=[];for(let Tt of se){let Ir=r.get(Tt);Ir&&ht.push(...Ir);}if(ht.length===0)return L_(l,"no_candidates_for_template","No placements configured for this surface template");ht.sort((Tt,Ir)=>Tt.entryOrder-Ir.entryOrder);let rn=y?.metadata?.entitlement_handle,Nn=y?.metadata?.surface_slot_category,ln=Nn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[Nn]:void 0,sn=ht;if(rn){let Tt=ht.filter(Ir=>Ir.triggerEntitlementHandle===rn);Tt.length>0&&(sn=Tt);}let mr=y?.metadata?.surface_slot_id;if(mr){let Tt=sn.filter(Ir=>Ir.triggerSlotId===mr);Tt.length>0&&(sn=Tt);}if(y?.metadata?.fixedOnly===true&&(sn=sn.filter(Tt=>Tt.entryCategory==="fixed")),ln&&Nn!=="fixed"&&sn.length>1){let Tt=sn.filter(Ir=>ln.includes(Ir.entryCategory));Tt.length>0&&(sn=Tt);}t&&(sn=sn.filter(Tt=>!t.isHiddenSync(Tt.output.rule_id??""))),sn=sn.filter(Tt=>kp(Tt.trialTrigger,I?.plan)),sn=sn.filter(Tt=>A_(Tt.thresholdTrigger,I?.entitlements)),sn=sn.filter(Tt=>j_(Tt.qualifierTrigger,Tt.entryCategory,I?.plan)),sn=sn.filter(Tt=>F_(Tt.entitlementGateTrigger,a,I?.entitlements));let bn,ze=[],cr=Hp(I?.plan);if(cr!==null&&sn.length>1){let Tt=sn.map(io=>({ruleId:io.output.rule_id??void 0,entryOrder:io.entryOrder,trialTrigger:io.trialTrigger,output:io.output})),Ir=H_(Tt,cr);if(Ir){bn=Ir.winner,ze=Ir.supersededIds;let io=Ir.winner.ruleId;sn=sn.filter(Ig=>Ig.trialTrigger?.kind!=="trial_progress"||(Ig.output.rule_id??void 0)===io);}}let mi;for(let Tt of sn)if(b(Tt.output,N,P,R)){Pe=Tt.output,mi=Tt;break}mi&&bn&&bn.ruleId===(mi.output.rule_id??void 0)&&ze.length>0&&(Pe={...Pe,content:{...Pe.content,__superseded_placement_ids:ze}}),Pe||(Y=["no_eligible_candidate"]);}else {let ht=y?.name,rn=(ht?i.get(ht):void 0)??i.get(l.placementId),Nn;if(rn)for(let Sr of r.values()){let ln=Sr.find(sn=>sn.output===rn);if(ln){Nn=ln;break}}rn&&t?.isHiddenSync(rn.rule_id??"")?Y=["placement_retired"]:rn&&!kp(Nn?.trialTrigger,I?.plan)?Y=["trial_trigger_unmet"]:rn&&!A_(Nn?.thresholdTrigger,I?.entitlements)?Y=["threshold_trigger_unmet"]:rn&&!j_(Nn?.qualifierTrigger,Nn?.entryCategory??rn.category,I?.plan)?Y=["qualifier_trigger_unmet"]:rn&&!F_(Nn?.entitlementGateTrigger,a,I?.entitlements)?Y=["entitlement_gate_unmet"]:rn&&b(rn,N,P,R)?Pe=rn:rn?Y=["plan_target_mismatch"]:Y=["placement_not_found"];}if(!Pe){let ht=Y[0]??"placement_not_found";return L_(l,ht,"Placement not configured")}let U=Pe.content,Oe=Pe.surface.template;if(o&&Oe){let ht={userId:typeof l.userId=="string"?l.userId:"",segmentIds:I?.segments?.segmentIds??[]},rn=await bu(Oe,ht,o,{});rn&&(U={...Pe.content,...rn.resolvedContent});}let It={...U},Dn=typeof It.entitlement=="string"?It.entitlement:typeof It.__trigger_entitlement_handle=="string"?It.__trigger_entitlement_handle:void 0,W=Dn?I?.entitlements?.usage?.[Dn]:void 0;if(W){It.usage_remaining=Number.isFinite(W.remaining)?W.remaining:0,It.usage_limit=Number.isFinite(W.limit)?W.limit:0,It.usage_current=Number.isFinite(W.used)?W.used:0,It.usage_percent=W.limit>0?Math.min(100,Math.round(W.used/W.limit*100)):0;let ht=W.reset_date;typeof ht=="string"&&ht.length>0&&(It.reset_date=ht);}let Pt=mC(It),Xt=Qg(p,I?.segments?.segmentIds??[],I?.experiments?.assignments),Jt={...Pe,content:Pt,...Xt},Mn=!((Pe.category==="upsell"||Pe.category==="trial_conversion")&&P==="enterprise");return {placementId:l.placementId,requestId:`local_${Date.now()}`,visible:Mn,decisionSource:"fallback",reasonCodes:Mn?[]:["plan_tier_suppressed"],content:{header:Z(Jt.content.header),body:Z(Jt.content.body),cta_label:Z(Jt.content.cta_label),title:Z(Jt.content.header),cta:Z(Jt.content.cta_label)},output:Jt}}}function L_(n,e,t){return {placementId:n.placementId,requestId:`local_${Date.now()}`,visible:false,decisionSource:"fallback",reasonCodes:[e],content:{header:t,body:"",cta_label:"",title:t,cta:""}}}function jo(n){return tb({source:{format:"json",exportedConfig:n.exportedConfig,placements:n.placements},impressionHistory:n.impressionHistory})}var nb=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(nb).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});function Lo(){return typeof window>"u"||typeof document>"u"}function jr(){return !Lo()}var xc=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(n){let e=this.providers.get(n.domain);if(e&&this.unregister(e.domain),this.providers.set(n.domain,n),n.subscribe){let t=n.subscribe(r=>{this.cache.set(n.domain,{value:r,resolvedAt:Date.now(),ttlMs:n.cacheTtlMs??0});});this.unsubscribers.set(n.domain,t);}}unregister(n){this.providers.delete(n),this.cache.delete(n);let e=this.unsubscribers.get(n);e&&(e(),this.unsubscribers.delete(n));}clear(){for(let n of this.unsubscribers.values())n();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let n=Array.from(this.providers.entries()),e=await Promise.all(n.map(async([s,a])=>{let o=this.cache.get(s),p=Date.now();if(o&&o.ttlMs>0&&p-o.resolvedAt<o.ttlMs)return [s,o.value];let b=await a.resolve();return this.cache.set(s,{value:b,resolvedAt:p,ttlMs:a.cacheTtlMs??0}),[s,b]})),t={},r={},i=false;for(let[s,a]of e)if(s==="traits"||s.startsWith("traits:")){let o=a;o?.traits&&(Object.assign(r,o.traits),i=true);}else t[s]=a;return i&&(t.traits={traits:r}),t}async get(n){let e=this.providers.get(n);if(!e)return;let t=this.cache.get(n),r=Date.now();if(t&&t.ttlMs>0&&r-t.resolvedAt<t.ttlMs)return t.value;let i=await e.resolve();return this.cache.set(n,{value:i,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),i}has(n){return this.providers.has(n)}get size(){return this.providers.size}invalidate(n){this.cache.delete(n);}invalidateAll(){this.cache.clear();}},AC=new Set(["cta_completed"]),OC=1440*60*1e3,rb=10080*60*1e3,jC="revturbine:interaction-state",ib=class{constructor(n){this.state=new Map,this.storage=n.storage,this.tenantId=n.tenantId,this.userId=n.userId,this.defaultDismissCooldownMs=n.defaultDismissCooldownMs??rb,this.defaultRemindLaterMs=n.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(n){let e=this.stateKey(n.placementId,n.userId,n.treatmentId),t=Date.now(),r=n.metadata??{},s={...this.state.get(e)??{updatedAt:new Date(t).toISOString()},lastInteractionType:n.interactionType,updatedAt:n.interactionAt??new Date(t).toISOString()};if(n.interactionType==="dismiss"){let a=Number(r.cooldown_ms);s.suppressedUntil=t+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}if(n.interactionType==="remind_me_later"){let a=Number(r.remind_after_seconds);s.suppressedUntil=t+(Number.isFinite(a)&&a>0?a*1e3:this.defaultRemindLaterMs);}if(n.interactionType==="cta_clicked"){let a=Number(r.cooldown_ms);s.suppressedUntil=t+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}n.interactionType==="cta_completed"&&(s.suppressedUntil=t+300*1e3),this.state.set(e,s),this.persist();}checkSuppression(n,e,t){let r=this.stateKey(n,e,t),i=this.state.get(r);return i?.suppressedUntil?i.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:i.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(n,e,t){let r=this.stateKey(n,e,t);this.state.delete(r),this.persist();}hydrate(){let n=this.storage.getItem(this.storageKey());if(n)try{let e=JSON.parse(n);for(let[t,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(t,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let n=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(n));}catch{}}storageKey(){return `${jC}:${this.tenantId}:${this.userId}`}stateKey(n,e,t){return [this.tenantId,e,n,t||"default"].join(":")}},FC="revturbine:presentation-caps";function Fo(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function LC(n){if(!Fo(n))return null;let e=Number(n.count),t=typeof n.period=="string"?n.period:"";return !Number.isFinite(e)||e<=0||t!=="session"&&t!=="day"&&t!=="week"&&t!=="month"&&t!=="lifetime"?null:{count:e,period:t}}var sb=class{constructor(n){this.capsByKey=new Map,this.storage=n.storage,this.tenantId=n.tenantId,this.userId=n.userId,this.hydrate();}enforce(n){let e=this.extractPolicies(n);if(e.length===0)return {allowed:true};let t=this.capKey(n),r=Date.now(),i=this.capsByKey.get(t)??{seenAt:[]},s={...i,seenAt:i.seenAt.filter(p=>Number.isFinite(p)&&p>0)},a=Yl({perPayload:{policies:e,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!a.allowed)return this.capsByKey.set(t,s),{allowed:false,reason:a.reason};s.seenAt.push(r);let o=e.map(p=>p.cooldownMs).filter(p=>typeof p=="number"&&Number.isFinite(p)&&p>0);return o.length>0?s.cooldownUntil=r+Math.max(...o):delete s.cooldownUntil,this.capsByKey.set(t,s),this.persist(),{allowed:true}}hydrate(){let n=this.storage.getItem(this.storageKey());if(n)try{let e=JSON.parse(n);for(let[t,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=Array.isArray(r.seenAt)?r.seenAt.filter(a=>Number.isFinite(a)&&a>0):[],s=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(t,{seenAt:i,cooldownUntil:s});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let n=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(n));}catch{}}storageKey(){return `${FC}:${this.tenantId}:${this.userId}`}capKey(n){return [this.tenantId,this.userId,n.surface.type,n.output_id].join(":")}extractPolicies(n){let e=[],t=[n,n.content,Fo(n.content)?n.content.payload:void 0,Fo(n.content)?n.content.placement:void 0,Fo(n.content)?n.content.surface:void 0];for(let r of t){if(!Fo(r))continue;let i=Fo(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=LC(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),p=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...p!==void 0?{cooldownMs:p}:{}});}return e}},Vo=class{constructor(){this.store=new Map;}getItem(n){return this.store.get(n)??null}setItem(n,e){this.store.set(n,e);}removeItem(n){this.store.delete(n);}};function ab(n){return [n.tenantId,n.userId,n.placementId,n.treatmentId||"default"].join(":")}function ob(n,e=Date.now()){return n?.suppressedUntil?n.suppressedUntil<=e?{suppressed:false}:{suppressed:true,reason:n.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}var Zp=class{constructor(n){this.retiredCache=null,this.suppressedCache=null,this.store=n.store,this.userId=n.userId,this.defaultSuppressionMs=n.defaultSuppressionMs??OC,this.defaultDismissCooldownMs=n.defaultDismissCooldownMs??rb;}async recordImpression(n,e,t,r){await this.appendRecord(n,"impressed",e,t,r);}async recordDismissal(n,e,t,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(n,"dismissed",e,t,{...r,suppressUntil:a}),this.suppressInCache(n,a);}async recordClickThru(n,e,t,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(n,"clicked_thru",e,t,{...r,suppressUntil:a}),this.suppressInCache(n,a);}async recordConversion(n,e,t,r){await this.appendRecord(n,"cta_completed",e,t,r),this.retireInCache(n);}async recordSuppression(n,e,t,r,i){let s=i??this.defaultSuppressionMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(n,"suppressed",e,t,{...r,suppressUntil:a}),this.suppressInCache(n,a);}async isRetired(n){return (await this.getRetiredIds()).has(n)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let n=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=n,n}isRetiredSync(n){return this.retiredCache?.has(n)??false}isSuppressedSync(n){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(n);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(n),false):false}isHiddenSync(n){return this.isRetiredSync(n)||this.isSuppressedSync(n)}async queryHistory(n){return this.store.query(this.userId,n)}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(n){this.userId=n,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(n,e,t,r,i){let s={placementId:n,outcome:e,occurredAt:new Date().toISOString(),...t?{payloadId:t}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,s);}retireInCache(n){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(n);}suppressInCache(n,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(n,e);}},VC=class{constructor(){this.records=new Map;}append(n,e){let t=this.records.get(n)??[];t.push(e),this.records.set(n,t);}query(n,e){let t=this.records.get(n)??[];return e&&(t=lb(t,e)),t.slice().reverse()}getRetiredPlacementIds(n){let e=this.records.get(n)??[];return cb(e)}getSuppressedPlacements(n){let e=this.records.get(n)??[];return db(e)}clear(n){this.records.delete(n);}},UC="revturbine:impression-history",vu=class{constructor(n){this.storage=n.storage,this.tenantId=n.tenantId,this.maxRecords=n.maxRecords??500;}append(n,e){let t=this.load(n);t.push(e),t.length>this.maxRecords&&t.splice(0,t.length-this.maxRecords),this.save(n,t);}query(n,e){let t=this.load(n);return e&&(t=lb(t,e)),t.slice().reverse()}getRetiredPlacementIds(n){let e=this.load(n);return cb(e)}getSuppressedPlacements(n){let e=this.load(n);return db(e)}clear(n){this.storage.removeItem(this.key(n));}key(n){return `${UC}:${this.tenantId}:${n}`}load(n){let e=this.storage.getItem(this.key(n));if(!e)return [];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return []}}save(n,e){try{this.storage.setItem(this.key(n),JSON.stringify(e));}catch{}}};function lb(n,e){let t=n;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);t=t.filter(i=>r.has(i.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);t=t.filter(i=>r.has(i.outcome));}if(e.since){let r=new Date(e.since).getTime();t=t.filter(i=>new Date(i.occurredAt).getTime()>=r);}return t}function cb(n){let e=new Set;for(let t of n)AC.has(t.outcome)&&e.add(t.placementId);return e}function db(n){let e=new Map,t=Date.now();for(let r=n.length-1;r>=0;r--){let i=n[r];if(e.has(i.placementId))continue;let s=i.metadata?.suppressUntil;typeof s=="string"&&new Date(s).getTime()>t&&e.set(i.placementId,s);}return e}function BC(n){let{config:e,cacheTtlMs:t}=n,r=[];if(n.planHandle){let i={domain:"plan",cacheTtlMs:t,resolve:()=>({currentPlanHandle:n.planHandle,currentPlanName:n.planName??n.planHandle,...n.paymentFailed!==void 0?{paymentFailed:n.paymentFailed}:{},...n.paymentAtRisk!==void 0?{paymentAtRisk:n.paymentAtRisk}:{}})};r.push(i);}if(e.entitlements?.length){let i=n.defaultEntitlementPolicy??"allow",s={domain:"entitlements",cacheTtlMs:t,resolve:()=>{let a={},o={};for(let p of e.entitlements??[]){a[p.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let b=n.usage?.[p.unique_handle];b&&(o[p.unique_handle]={used:b.used,limit:b.limit,remaining:Math.max(0,b.limit-b.used),unit:p.unit});}return {entries:a,usage:o,...n.tiers!==void 0?{tiers:n.tiers}:{}}}};r.push(s);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:t,resolve:()=>({segmentIds:(e.segments??[]).map(s=>s.handle),segmentSlugs:(e.segments??[]).map(s=>s.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:t,resolve:()=>{let s={},a=new Map;for(let p of e.entitlements??[]){let b=p;typeof b.unique_handle=="string"&&typeof b.type=="string"&&a.set(b.unique_handle,b.type);}for(let p of e.entitlement_rules??[]){let b=p.entitlement_id;s[b]||(s[b]=[]);let l=p,y=Array.isArray(l.segment_ids)?l.segment_ids.filter(P=>typeof P=="string"):typeof l.segment_id=="string"&&l.segment_id!=="all"?[l.segment_id]:[],S=Array.isArray(l.plan_ids)?l.plan_ids.filter(P=>typeof P=="string"):[],I={ruleId:p.id,entitlementId:b,planIds:(p.targets??[]).length>0?(p.targets??[]).filter(P=>P.kind==="plan").map(P=>P.id):S,segmentIds:y,kind:(()=>{let P=typeof l.type_fields=="object"&&l.type_fields!==null?l.type_fields:{};return (typeof l.kind=="string"?l.kind:void 0)??(typeof P.kind=="string"?P.kind:void 0)??a.get(b)??"feature"})(),fields:{...typeof l.type_fields=="object"&&l.type_fields!==null?l.type_fields:{},...l}};s[b].push(I);}let o={};for(let p of e.segments??[])typeof p.dimension_id=="string"&&typeof p.handle=="string"&&(o[p.handle]=p.dimension_id);return {entitlementRules:s,segmentDimensions:o,configVersion:Od(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:t,resolve:()=>{let s={};for(let a of e.message_blocks??[])s[a.block_id]={blockId:a.block_id,name:a.name,defaultContent:a.default_content,segmentOverrides:a.segment_overrides?.map(o=>({segmentId:o.segment_value_id,content:o.content})),status:a.status};return {messageBlocks:s,personalization:{}}}};r.push(i);}if(e.theme&&Object.keys(e.theme).length>0){let i={domain:"theme",cacheTtlMs:t,resolve:()=>({overrides:e.theme})};r.push(i);}return r}function qC(n){let{payload:e,cacheTtlMs:t}=n,r=[];if(e.user_context){let i=e.user_context,s={domain:"plan",cacheTtlMs:t,resolve:()=>({currentPlanHandle:i.plan_handle??"unknown",currentPlanName:i.plan_name,billingPeriod:i.billing_period,trialActive:i.trial_active,trialLimitType:i.trial_limit_type,trialProgressPercent:i.trial_progress_percent,trialDaysRemaining:i.trial_days_remaining,trialDaysTotal:i.trial_days_total,trialState:i.trial_state,trialUsageEntitlementHandle:i.trial_usage_entitlement_handle,trialUsageConsumed:i.trial_usage_consumed,trialUsageLimit:i.trial_usage_limit})};r.push(s);}if(e.entitlements){let i=e.entitlements,s={domain:"entitlements",cacheTtlMs:t,resolve:()=>{let a={};for(let[o,p]of Object.entries(i))a[o]=p;return {entries:a}}};r.push(s);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let s={domain:"segments",cacheTtlMs:t,resolve:()=>({segmentIds:i.segment_ids})};r.push(s);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let s={domain:"traits",cacheTtlMs:t,resolve:()=>({traits:i.traits})};r.push(s);}}if(e.theme){let i={domain:"theme",cacheTtlMs:t,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var ub=class{constructor(n){this.registeredPlacements=new Map,this.tenantId=n.tenantId,this.userId=n.userId,this.exportedConfig=n.exportedConfig;let e=n.storage??new Vo;this.registry=new xc;for(let r of n.providers)this.registry.register(r);this.interactionTracker=new ib({storage:e,tenantId:n.tenantId,userId:n.userId,...n.interactionOptions}),this.capEnforcer=new sb({storage:e,tenantId:n.tenantId,userId:n.userId}),this.impressionHistory=new Zp({store:n.impressionStore??new VC,userId:n.userId});let t=n.customResolver??this.buildPlacementResolver(n);this.engine=new Hm({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:n.engineOptions,placements:this.registeredPlacements,placementResolver:t});}registerPlacement(n){this.registeredPlacements.set(n.id,n);}async getPlacementDecision(n){return this.engine.evaluate(n)}async getPlacementDecisions(n){return this.engine.evaluateBatch(n)}async getPlacement(n){let e=this.slotRecordForConfig(n);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(n,e){let t=await this.engine.checkEntitlement(n,e);return t.reason==="no_entitlement_provider"?this.deriveEntitlementFromConfig(n,e):t}trackInteraction(n){this.engine.trackInteraction(n);}clearSuppression(n,e){this.interactionTracker.clearSuppression(n,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(n){let e=this.exportedConfig.segments??[];return Jl(e,n)}buildTargetingState(n,e){return Hd(n,this.exportedConfig,e)}async derivePersonalizationTokens(n){let e=await this.registry.resolveAll();return Zg({userId:this.userId,providers:e,base:n})}setUserId(n){this.userId=n,this.impressionHistory.setUserId(n);}getUserId(){return this.userId}getExportedConfig(){return this.exportedConfig}async hydrate(){await this.impressionHistory.hydrate();}updateProviders(n){this.registry.clear();for(let e of n)this.registry.register(e);}slotRecordForConfig(n){if(n.slotId){let r=this.registeredPlacements.get(n.slotId);if(r)return r}let t=(this.exportedConfig.placement_slots??[]).find(r=>n.slotId?r.id===n.slotId:n.surfaceType?r.surface_type===n.surfaceType:false);return t?{id:t.id,name:n.placementHandle??t.placement_handle,route:"",metadata:{surface_slot_id:t.id,surface_type:t.surface_type,surface_template_ids:t.template?[t.template]:[],...n.entitlementHandle?{entitlement_handle:n.entitlementHandle}:{},...n.fixedOnly?{fixedOnly:true}:{}}}:null}buildPlacementResolver(n){let e=n.placements??{placements:n.exportedConfig.placements??[]};return jo({placements:e,exportedConfig:n.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(n,e){return $l({handle:n,context:e,currentPlanHandle:"",segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"allowed",allowed:true,reason:"local_runtime_default_allow"}}},DC=["web-client","server"],MC=z.enum(DC),NC=["method","meta","component"],HC=z.enum(NC),zC=["ts","python","java","csharp","rust"];z.enum(zC);var KC=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(),GC=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:HC,appliesTo:z.array(MC).min(1),composes:z.string().min(1).optional(),perLanguage:KC.optional(),description:z.string().min(1)}).strict().refine(n=>n.kind!=="meta"||n.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),$C=z.object({version:z.number().int().positive(),functions:z.array(GC).min(1)}).strict().superRefine((n,e)=>{let t=new Map;for(let r of n.functions)for(let i of [r.canonical,...r.aliases]){let s=t.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),t.set(i,r.canonical);}});$C.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 YC(){let n=[];for(let[e,t]of Object.entries(np))for(let[r,i]of Object.entries(t.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);n.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return n}function WC(n){return [...n].sort((e,t)=>e.from.localeCompare(t.from)||e.field.localeCompare(t.field)||e.to.localeCompare(t.to)||(e.targetKind??"").localeCompare(t.targetKind??""))}Object.freeze(WC([...YC(),...ZC]));var mb="traits:server",Sc=class{constructor(){T(this,"domain",mb);T(this,"snapshot",{});}setSnapshot(e){this.snapshot=e??{};}hasSignals(){return Object.keys(this.toTraits()).length>0}resolve(){return {traits:this.toTraits()}}toTraits(){let e={},t=this.snapshot.trial;return t&&(typeof t.in_trial=="boolean"&&(e.trial_active=t.in_trial),typeof t.state=="string"&&t.state.length>0&&(e.trial_state=t.state),typeof t.days_remaining=="number"&&(e.trial_days_remaining=t.days_remaining)),this.snapshot.payment_at_risk===true&&(e.payment_at_risk=true),e}};var Yp={workspace_name:"Your workspace",theme:{}};function pb(n){return !!n&&Object.keys(n).length>0}var fb=false;function Wp(n={}){let e=(t,r)=>({branding:{...Yp,...t,theme:{...Yp.theme,...t?.theme}},source:r});return pb(n.explicit)?e(n.explicit,"explicit"):pb(n.apiBranding)?e(n.apiBranding,"branding-api"):n.legacyConfigTheme&&Object.keys(n.legacyConfigTheme).length>0?(n.warnOnLegacy!==false&&!fb&&so()&&(fb=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:n.legacyConfigTheme},"legacy-config")):e(void 0,"default")}var hb="[REDACTED]",XC=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,JC=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,QC=/\d(?:[ -]?\d){12,18}/g;function ek(n){let e=0,t=false;for(let r=n.length-1;r>=0;r-=1){let i=n.charCodeAt(r)-48;if(i<0||i>9)return false;if(t){let s=i*2;s>9&&(s-=9),e+=s;}else e+=i;t=!t;}return e%10===0}function tk(n){let e=0,t=n.replace(XC,()=>(e+=1,hb));return t=t.replace(QC,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&ek(i)?(e+=1,hb):r}),{value:t,count:e}}function Xp(n){let e=0,t=r=>{if(typeof r=="string"){let i=tk(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(t);if(r&&typeof r=="object"){let i={};for(let[s,a]of Object.entries(r))i[s]=t(a);return i}return r};return {value:t(n),redactions:e}}function nk(n){return JC.test(n.trim())}function rk(n){let e=n.trim().toLowerCase();return `eml_${ak(e).slice(0,16)}`}function Jp(n){return nk(n)?{value:rk(n),redacted:true}:{value:n,redacted:false}}function gb(n){let e=Jp(n.user_id??""),t=Xp({url:n.url,path:n.path,page_title:n.page_title,tags:n.tags,traits:n.identity?.traits??null,properties:n.properties});return {value:{...n,url:t.value.url,path:t.value.path,page_title:t.value.page_title,tags:t.value.tags,user_id:n.user_id===null||n.user_id===void 0?n.user_id:e.value,identity:n.identity?{...n.identity,traits:t.value.traits??void 0}:n.identity,properties:t.value.properties},redactions:t.redactions+(e.redacted?1:0)}}var ik=[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 sk(n){let e=[];for(let t=0;t<n.length;t+=1){let r=n.charCodeAt(t);if(r<128)e.push(r);else if(r<2048)e.push(192|r>>6,128|r&63);else if(r>=55296&&r<=56319){let i=r,s=n.charCodeAt(t+1);t+=1,r=65536+((i&1023)<<10)+(s&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function ds(n,e){return n>>>e|n<<32-e}function ak(n){let e=sk(n),t=e.length*8;for(e.push(128);e.length%64!==56;)e.push(0);for(let S=0;S<4;S+=1)e.push(0);e.push(t>>>24&255,t>>>16&255,t>>>8&255,t&255);let r=1779033703,i=3144134277,s=1013904242,a=2773480762,o=1359893119,p=2600822924,b=528734635,l=1541459225,y=new Array(64);for(let S=0;S<e.length;S+=64){for(let U=0;U<16;U+=1){let Oe=S+U*4;y[U]=(e[Oe]<<24|e[Oe+1]<<16|e[Oe+2]<<8|e[Oe+3])>>>0;}for(let U=16;U<64;U+=1){let Oe=ds(y[U-15],7)^ds(y[U-15],18)^y[U-15]>>>3,It=ds(y[U-2],17)^ds(y[U-2],19)^y[U-2]>>>10;y[U]=y[U-16]+Oe+y[U-7]+It>>>0;}let I=r,P=i,R=s,N=a,Z=o,se=p,Pe=b,Y=l;for(let U=0;U<64;U+=1){let Oe=ds(Z,6)^ds(Z,11)^ds(Z,25),It=Z&se^~Z&Pe,Dn=Y+Oe+It+ik[U]+y[U]>>>0,W=ds(I,2)^ds(I,13)^ds(I,22),Pt=I&P^I&R^P&R,Xt=W+Pt>>>0;Y=Pe,Pe=se,se=Z,Z=N+Dn>>>0,N=R,R=P,P=I,I=Dn+Xt>>>0;}r=r+I>>>0,i=i+P>>>0,s=s+R>>>0,a=a+N>>>0,o=o+Z>>>0,p=p+se>>>0,b=b+Pe>>>0,l=l+Y>>>0;}return [r,i,s,a,o,p,b,l].map(S=>S.toString(16).padStart(8,"0")).join("")}var _b={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"},bb="control_plane_source";function Qp(n,e={}){return {eventName:n,properties:{[bb]:_b[n],...e}}}var Ic=class{constructor(e){T(this,"backend");this.backend=e;}getItem(e){try{return this.backend.getItem(e)}catch{return null}}setItem(e,t){try{this.backend.setItem(e,t);}catch{}}removeItem(e){try{this.backend.removeItem(e);}catch{}}};function oa(n){if(n)return n;if(jr())try{return new Ic(window.localStorage)}catch{}return new Vo}function ef(n){if(n)return n;if(jr())try{return new Ic(window.sessionStorage)}catch{}return new Vo}var ok=/^[a-z0-9._]{1,100}$/,Zn={Persisted:"persisted",Transient:"transient"},Vn={Internal:"internal",External:"external"},kn={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 wb="x-revturbine-schema-exposure",ck="readOnly",dk="x-revturbine-decision-only",vb={[dk]:true},ai={[wb]:Vn.External},uk={[wb]:Vn.Internal};function kr(n){let e={};for(let[t,r]of Object.entries(n.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[ck]===true||(e[t]=r);}return z.object(e)}function Cr(n){let e=kr(n),t=e.shape.handle;return t&&typeof t.regex=="function"?e.extend({handle:t.regex(ok)}):e}var {Unrestricted:dr}=kn,{Transient:Vr,Persisted:mk}=Zn,{Internal:Ba,External:ms}=Vn;z.object({page:z.coerce.number().int().min(1).default(1).meta(dr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(dr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms});var pk=n=>z.object({items:z.array(n).meta(dr),total:z.number().int().min(0).meta(dr),page:z.number().int().min(1).meta(dr),per_page:z.number().int().min(1).meta(dr),has_more:z.boolean().meta(dr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms}),we=z.object({created_at:z.string().datetime().meta({...dr,readOnly:true}),updated_at:z.string().datetime().meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms}),de=z.object({id:z.string().min(1).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms}),qe=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":Ba});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms});var Cu=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":Vr,"x-revturbine-schema-exposure":ms}),Ab=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms});var vf=z.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":ms}),fk=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":ms});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":Ba});var Hn=z.string().min(1).max(200),cn=z.string().min(1).max(100),qa=z.string().max(500).optional(),Un=z.record(z.string(),z.unknown()).default({}),Oc=z.number().int().min(10).max(100).multipleOf(10),On=z.string().datetime().nullable().default(null),un=z.object({environment_id:z.string().min(1).default("production").meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":Ba}),hn=z.object({playbook_version_id:z.string().nullable().default(null).meta(dr),is_current:z.boolean().default(true).meta({...dr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...dr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...dr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...dr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":Ba}),hk=de.merge(we).merge(qe).merge(un).extend({handle:cn.meta({...dr,readOnly:true}),active:z.boolean().default(true).meta({...dr,readOnly:true})});function sr(n){return hk.meta({id:n,"x-revturbine-schema-persistence":mk,"x-revturbine-schema-exposure":Ba})}var yf=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Vr,"x-revturbine-schema-exposure":Ba}),gk=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":Vr,"x-revturbine-schema-exposure":Ba}),Ob=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":Vr,"x-revturbine-schema-exposure":ms}),Dt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ni={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},_k="x-revturbine-context",bk="x-revturbine-in-config",vk="x-revturbine-sdk-input",yk="x-revturbine-source",xk="x-revturbine-deprecation",Sk={[Dt.Playbook]:Ni.Customer,[Dt.Branding]:Ni.Customer,[Dt.Billing]:Ni.Stripe,[Dt.Metering]:Ni.Customer,[Dt.CustomerOperations]:Ni.Runtime,[Dt.EventIngestion]:Ni.Runtime};function dn(n,e){return {[_k]:n,[bk]:e.inConfig??n===Dt.Playbook,[vk]:e.sdkInput,[yk]:e.source??Sk[n]}}function tf(n){return {deprecated:true,[xk]:{since:n.since,replacement:n.replacement,remove_after:n.removeAfter,reason:n.reason}}}var jb={Named:"named",Minted:"minted"},Fb="x-revturbine-schema-identity";function Rr(n="handle"){return {[Fb]:{kind:jb.Named,handleField:n}}}function bi(n="handle"){return {[Fb]:{kind:jb.Minted,handleField:n}}}var re=n=>z.object({items:z.array(n)}),pt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),x=n=>n,ie=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:Kt,Financial:Tu}=kn,{Persisted:Lc,Transient:ku}=Zn,{External:qs}=Vn,Ik=dn(Dt.Playbook,{sdkInput:true}),Pk=dn(Dt.Playbook,{sdkInput:false}),xf=dn(Dt.Billing,{sdkInput:false}),ma=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":ku,"x-revturbine-schema-exposure":qs}),Vc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":ku,"x-revturbine-schema-exposure":qs}),Ru=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":ku,"x-revturbine-schema-exposure":qs}),Ho=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Hn.meta(Kt),handle:cn.meta(Kt),tier_position:z.number().int().min(0).default(0).meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:ma.default("public").meta(Kt),metadata:Un.meta(Kt)}).meta({id:"Plan","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":qs,...Ik,...Rr()}),Tk=sr("PlanAnchor"),zo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:cn.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(Tu),pricing_model:Vc.meta(Kt),visibility:ma.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:Ru.default("static").meta(Kt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":qs,...xf,...bi()}),Ck=sr("PlanVariationAnchor"),Ko=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Hn.meta(Kt),handle:cn.meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:ma.default("public").meta(Kt),metadata:Un.meta(Kt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":qs,...Pk,...Rr()}),kk=sr("AddOnAnchor"),Go=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:cn.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(Tu),pricing_model:Vc.meta(Kt),visibility:ma.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:Ru.default("static").meta(Kt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":qs,...xf,...bi()}),Rk=sr("AddOnVariationAnchor"),Ek=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":ku,"x-revturbine-schema-exposure":qs}),$o=de.merge(we).merge(qe).extend({stripe_price_id:z.string().min(1).meta(Kt),stripe_product_id:z.string().min(1).meta(Kt),billing_period:Ek.meta(Kt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Tu),currency:fk.meta(Tu),pricing_model:Vc.meta(Kt),nickname:z.string().nullable().default(null).meta(Kt),is_mock:z.boolean().default(false).meta(Kt),last_updated_from_stripe:On.meta(Kt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Lc,"x-revturbine-schema-exposure":qs,...xf});var wk=kr(Ho),Ak=kr(zo),Ok=kr(Ko),jk=kr(Go),Fk=kr($o);({"/api/plan-anchors":{get:x({operationId:"listPlanAnchors",requestParams:{query:ie},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:re(Tk)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:x({operationId:"listPlans",requestParams:{query:ie},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:re(Ho)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:x({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Ho)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ho}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:x({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Ho}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:x({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:wk}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ho}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:x({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:x({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:x({operationId:"listPlanVariationAnchors",requestParams:{query:ie},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:re(Ck)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:x({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:ie},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:re(zo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:x({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(zo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:x({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:x({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ak}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:x({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:x({operationId:"listAddOnAnchors",requestParams:{query:ie},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:re(kk)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:x({operationId:"listAddOns",requestParams:{query:ie},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:re(Ko)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:x({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Ko)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ko}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:x({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:Ko}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:x({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ok}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ko}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:x({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:x({operationId:"listAddOnVariationAnchors",requestParams:{query:ie},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:re(Rk)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:x({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:ie},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:re(Go)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:x({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr(Go)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:x({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:x({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:jk}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:x({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:x({operationId:"listStripePrices",requestParams:{query:ie},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:re($o)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:x({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Cr($o)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:x({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:x({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Fk}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:$o}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:x({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:ge}=kn,{Persisted:Sf,Transient:oi}=Zn,{Internal:Lb,External:$r}=Vn,Vb=dn(Dt.Playbook,{sdkInput:true}),Lk=dn(Dt.Playbook,{inConfig:false,sdkInput:false}),Ub=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":oi,"x-revturbine-schema-exposure":$r}),Eu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),Vk=z.enum(Ab).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),Uk=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),Bb=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),jc=z.object({entitlement_id:z.string().min(1).meta(ge),entitlement_handle:z.string().min(1).meta(ge),status:Vk.meta(ge),limit:z.number().optional().meta(ge),used:z.number().optional().meta(ge),allocation:Eu.optional().meta(ge),enforcement:Bb.optional().meta(ge),source:Uk.optional().meta(ge),plan_id:z.string().optional().meta(ge),segment_id:z.string().optional().meta(ge),seat_type_id:z.string().optional().meta(ge),rule_id:z.string().optional().meta(ge)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r,...kn.Operational});z.object({account:z.record(z.string(),jc).optional().meta(ge),instance:z.record(z.string(),jc).optional().meta(ge),user:z.record(z.string(),jc).optional().meta(ge)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r,...kn.Operational});var Bk=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),qk=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),qb=z.object({kind:qk.meta(ge),id:z.string().min(1).meta(ge)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),Dk=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),Zo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ge,readOnly:true}),name:Hn.meta(ge),handle:cn.meta(ge),customer_facing_description:z.string().max(500).optional().meta(ge),type:vf.meta(ge),unit:z.string().max(100).optional().meta(ge),period_scope:Ub.optional().meta(ge),allocation:Eu.optional().meta(ge),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ge),sort_order:z.number().int().default(0).meta(ge),metadata:Un.meta(ge)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Sf,"x-revturbine-schema-exposure":$r,...Vb,...Rr()}),Mk=sr("EntitlementAnchor"),Jo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ge,readOnly:true}),handle:cn.meta({...ge,readOnly:true}),entitlement_id:z.string().min(1).meta(ge),targets:z.array(qb).min(1).meta(ge),segment_ids:z.array(z.string()).default([]).meta(ge),visibility:Bk.default("public").meta(ge),period_scope:Ub.optional().meta(ge),instance:z.string().max(100).optional().meta(ge),reset_period:Dk.optional().meta(ge),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ge),enforcement:Bb.optional().meta(ge),warning_threshold_percent:Oc.optional().meta(ge),overage_price_ref:z.string().optional().meta(ge),grace_period_hours:z.number().int().min(0).optional().meta(ge),tier_value:z.string().optional().meta(ge),rate_value:z.number().optional().meta(ge),initial_grant:z.number().optional().meta(ge),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ge),rollover_enabled:z.boolean().optional().meta(ge),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ge),seat_type_id:z.string().optional().meta(ge),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ge),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ge),stripe_metered_price_id:z.string().optional().meta(ge),enabled:z.boolean().optional().meta(ge),allocation:Eu.optional().meta(ge),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ge),amount_cents:z.number().int().optional().meta(ge),currency:z.string().optional().meta(ge)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Sf,"x-revturbine-schema-exposure":Lb,...Vb,...bi()}),Nk=sr("EntitlementRuleAnchor");Jo.superRefine((n,e)=>{n.reset_period==="billing_period"&&n.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let t=n.allowance_value;(t==="unlimited"||typeof t=="number"&&t>0)&&n.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 Hk=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),zk=z.object({code:Hk.meta(ge),message:z.string().min(1).meta(ge),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ge)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r}),nf=Jo.extend({warnings:z.array(zk).optional().meta(ge)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":oi,"x-revturbine-schema-exposure":$r});var rf=de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.meta({...ge,readOnly:true}),rule_id:z.string().min(1).meta(ge),experiment_id:z.string().min(1).meta(ge),variant_name:z.string().min(1).max(200).meta(ge),is_control:z.boolean().default(false).meta(ge),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ge)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Sf,"x-revturbine-schema-exposure":Lb,...Lk,...bi()}),Kk=kr(Zo),Gk=kr(Jo);({"/api/entitlement-anchors":{get:x({operationId:"listEntitlementAnchors",requestParams:{query:ie},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:re(Mk)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:x({operationId:"listEntitlementRuleAnchors",requestParams:{query:ie},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:re(Nk)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:x({operationId:"listEntitlements",requestParams:{query:ie},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:re(Zo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:x({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Zo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:x({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:x({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Kk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:x({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:x({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:ie},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:re(Jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:x({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Jo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:x({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Gk}}},responses:{200:{description:"Updated",content:{"application/json":{schema:nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:x({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:x({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:x({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:ie},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:re(rf)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:x({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Cr(rf)}}},responses:{201:{description:"Created",content:{"application/json":{schema:rf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:ke}=kn,{Persisted:Uc,Transient:pa}=Zn,{External:Ci,Internal:$k}=Vn,Db=dn(Dt.Playbook,{sdkInput:true}),Zk=dn(Dt.Playbook,{inConfig:false,sdkInput:false}),Yk=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),Wk=dn(Dt.Playbook,{inConfig:false,sdkInput:false,source:Ni.Runtime}),Xk=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Mb=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),Nb=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),Jk=z.object({count:z.number().int().positive().meta(ke),period:Nb.meta(ke)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci});z.object({surface_type:z.string().min(1).meta(ke),rules:z.array(Jk).meta(ke),cooldown_ms:z.number().int().nonnegative().optional().meta(ke)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Ci,...kn.Operational,...Yk});var Qk=z.enum(["open_checkout","view_plans","book_demo","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","switch_billing_period","extend_trial","open_rt_placement","dismiss","snooze","custom"]).meta({id:"CtaPathType","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),Wo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),name:Hn.meta(ke),handle:cn.meta(ke),description:qa.meta(ke),category:Mb.meta(ke),drag_order_in_category:z.number().int().default(0).meta(ke),surface_slot_id:z.string().optional().meta(ke),entitlement_id:z.string().optional().meta(ke),tier_threshold:z.string().optional().meta(ke),threshold_percent:Oc.optional().meta(ke),trial_type:z.enum(["free","reverse"]).optional().meta(ke),trigger_type:z.string().optional().meta(ke),trial_progress_percent:z.number().min(0).max(100).optional().meta(ke),days_before_end:z.number().int().min(0).optional().meta(ke),qualifier:Xk.optional().meta(ke),activation_window_start:z.string().datetime().optional().meta(ke),activation_window_end:z.string().datetime().optional().meta(ke),metadata:Un.meta(ke)}).meta({id:"Placement","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Ci,...Db,...Rr()}),eR=sr("PlacementAnchor"),tR=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),nR=z.object({code:tR.meta(ke),message:z.string().min(1).meta(ke),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ke)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),yb=Wo.extend({warnings:z.array(nR).optional().meta(ke)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci});var rR=z.object({label:z.string().min(1).max(200).meta(ke),cta_path_type:Qk.meta(ke),config_fields:z.record(z.string(),z.unknown()).default({}).meta(ke)}).meta({id:"CtaObject","x-revturbine-schema-persistence":pa,"x-revturbine-schema-exposure":Ci}),wc=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ke,readOnly:true}),handle:cn.meta({...ke,readOnly:true}),placement_id:z.string().min(1).meta(ke),drag_order:z.number().int().default(0).meta(ke),target_plan_ids:z.array(z.string()).default([]).meta(ke),target_plan_billing_cadences:z.array(z.string()).default([]).meta(ke),target_segments:z.array(z.string()).default([]).meta(ke),surface_slot_ids:z.array(z.string()).default([]).meta(ke),surface_template_id:z.string().min(1).meta(ke),content_fields:z.record(z.string(),z.unknown()).default({}).meta(ke),cta_list:z.array(rR).default([]).meta(ke),max_per_period:z.number().int().min(0).nullable().default(null).meta(ke),max_period_unit:Nb.default("session").meta(ke),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(ke),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(ke),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(ke),recommendation_plan_override:z.string().optional().meta(ke)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Ci,...Db,...bi()}),iR=sr("PlacementPayloadAnchor");de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.meta({...ke,readOnly:true}),placement_payload_id:z.string().min(1).meta(ke),experiment_id:z.string().min(1).meta(ke),variant_name:z.string().min(1).max(200).meta(ke),is_control:z.boolean().default(false).meta(ke),traffic_allocation_percent:z.number().min(0).max(100).meta(ke),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ke),status:z.enum(["active","paused","complete"]).default("active").meta(ke)}).meta({id:"PlacementVariant","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":$k,...Zk,...bi()});var sR=de.merge(we).merge(qe).merge(un).merge(hn).extend({surface_slot_handle:z.string().min(1).max(200).meta(ke),surface_type:Cu.meta(ke),surface_template_ids:z.array(z.string()).default([]).meta(ke),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(ke),first_seen:z.string().datetime().meta({...ke,readOnly:true}),last_seen:z.string().datetime().meta({...ke,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(ke),placement_count:z.number().int().min(0).default(0).meta({...ke,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Uc,"x-revturbine-schema-exposure":Ci,...Wk,...Rr("surface_slot_handle")}),aR=kr(Wo),oR=kr(wc);({"/api/placement-anchors":{get:x({operationId:"listPlacementAnchors",requestParams:{query:ie},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:re(eR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:x({operationId:"listPlacements",requestParams:{query:ie},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:re(Wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:x({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(Wo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:yb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:x({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:x({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:aR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yb}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:x({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:x({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:x({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Mb,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:x({operationId:"listPlacementPayloadAnchors",requestParams:{query:ie},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:re(iR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:x({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:ie},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:re(wc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:x({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Cr(wc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:x({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:oR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:x({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:x({operationId:"listSurfaceSlots",requestParams:{query:ie},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:re(sR)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Tr,Pii:Qo}=kn,{Persisted:If,Transient:Pf}=Zn,{Internal:tl}=Vn,lR=dn(Dt.CustomerOperations,{sdkInput:false}),cR=z.object({external_id:z.string().min(1).meta(Qo),traits:z.record(z.string(),z.unknown()).default({}).meta(Qo),plan_id:z.string().optional().meta(Tr)}).meta({id:"Identity","x-revturbine-schema-persistence":If,"x-revturbine-schema-exposure":tl}),Hb=z.enum(["payment_failed","payment_method_missing"]),xb=de.merge(we).merge(qe).extend({external_id:z.string().min(1).meta(Qo),identity:cR.meta(Qo),stripe_customer_id:z.string().optional().meta(Tr),current_plan_id:z.string().optional().meta(Tr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Tr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Tr),billing_health_issues:z.array(Hb).default([]).meta(Tr),metadata:Un.meta(Tr)}).meta({id:"Customer","x-revturbine-schema-persistence":If,"x-revturbine-schema-exposure":tl}),dR=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Pf,"x-revturbine-schema-exposure":tl}),uR=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Pf,"x-revturbine-schema-exposure":tl}),mR=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Pf,"x-revturbine-schema-exposure":tl}),la=de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.meta({...Tr,readOnly:true}),customer_id:z.string().min(1).meta(Qo),customer_id_list:z.array(z.string()).optional().meta(Qo),override_type:uR.meta(Tr),target_id:z.string().min(1).meta(Tr),value:z.record(z.string(),z.unknown()).default({}).meta(Tr),duration_type:dR.default("permanent").meta(Tr),duration_value:z.string().optional().meta(Tr),expiry_date:On.meta(Tr),status:mR.default("active").meta(Tr),reason:z.string().max(500).optional().meta(Tr),created_by:z.string().optional().meta(Tr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":If,"x-revturbine-schema-exposure":tl,...lR,...bi()});({"/api/customers":{get:x({operationId:"listCustomers",requestParams:{query:ie},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:re(xb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:x({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:xb}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:x({operationId:"listCustomerOverrides",requestParams:{query:ie},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:re(la)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:x({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:x({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:la.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:x({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:x({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:x({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:je,Pii:Ac,Financial:sf}=kn,{Persisted:zb,Transient:ps}=Zn,{External:nl,Internal:Bc}=Vn,Tf=z.object({in_trial:z.boolean().meta(je),trial_type:z.string().optional().meta(je),plan_handle:z.string().optional().meta(je),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(je),trial_limit_type:z.enum(["time","usage"]).optional().meta(je),progress_percent:z.number().min(0).max(100).optional().meta(je),day_number:z.number().int().min(0).optional().meta(je),days_remaining:z.number().int().min(0).optional().meta(je),usage_entitlement_handle:z.string().optional().meta(je),usage_consumed:z.number().int().min(0).optional().meta(je),usage_remaining:z.number().int().min(0).optional().meta(je),usage_limit:z.number().int().min(0).optional().meta(je)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":nl}),Kb=z.object({entitlement_handle:z.string().min(1).meta(je),unit:z.string().min(1).meta(je),amount:z.number().min(0).meta(je),limit:z.number().min(0).optional().meta(je),reset_date:z.string().optional().meta(je)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":nl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":nl});var Gb=z.object({id:z.string().min(1).meta(je),name:z.string().min(1).meta(je),price:z.string().optional().meta(je),billing_period:z.enum(["monthly","annual","none"]).optional().meta(je)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":nl}),pR=z.object({product_instance_id:z.string().min(1).meta(je),user_id:z.string().min(1).meta(Ac),plan:Gb.optional().meta(je),usage:z.record(z.string(),Kb).default({}).meta(je),trial:Tf.optional().meta(je),entitlements:z.record(z.string(),z.union([z.boolean(),jc])).default({}).meta(je)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":zb,"x-revturbine-schema-exposure":nl}),Uo=de.merge(qe).merge(we).extend({user_id:z.string().min(1).meta(Ac),account_id:z.string().min(1).nullable().optional().meta(Ac),email:z.string().email().nullable().optional().meta(Ac),email_type:z.string().optional().meta(je),plan:Gb.optional().meta(je),usage:z.record(z.string(),Kb).default({}).meta(je),trial:Tf.optional().meta(je),payment_failed:z.boolean().optional().meta(je),payment_at_risk:z.boolean().optional().meta(je),tiers:z.record(z.string(),z.string()).optional().meta(je),entitlements:z.record(z.string(),z.union([z.boolean(),jc])).default({}).meta(je),instances:z.array(pR).optional().meta(je),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Ac),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...je,"x-revturbine-schema-persistence":ps}),derived_config_version:z.string().nullable().optional().meta(je),context_hash:z.string().nullable().optional().meta(je),derived_computed_at:On.meta(je),activity_score:z.number().int().min(0).nullable().optional().meta(je),activity_score_computed_at:z.string().datetime().nullable().optional().meta(je),experiments:z.record(z.string(),z.string()).optional().meta(je)}).meta({id:"UserContext","x-revturbine-schema-persistence":zb,"x-revturbine-schema-exposure":nl}),fR=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...je,...ai}),days_remaining:z.number().int().min(0).optional().meta({...je,...ai}),ends_at:z.string().optional().meta({...je,...ai})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":Bc}),hR=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...je,...ai}),failed_payment_reason:z.string().optional().meta({...sf,...vb}),issues:z.array(Hb).optional().meta({...sf,...vb}),provider_subscription_id:z.string().optional().meta({...sf,...uk})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":Bc}),gR=z.object({can_upgrade:z.boolean().optional().meta({...je,...ai}),can_manage_billing:z.boolean().optional().meta({...je,...ai})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":Bc}),_R=z.object({handle:z.string().min(1).optional().meta({...je,...ai}),name:z.string().min(1).optional().meta({...je,...ai})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":Bc});z.object({subject:z.string().min(1).meta({...je,...ai}),context_version:z.string().optional().meta({...je,...ai}),trial:fR.optional().meta({...je,...ai}),billing:hR.optional().meta({...je,...ai}),plan:_R.optional().meta({...je,...ai}),capabilities:gR.optional().meta({...je,...ai})}).meta({id:"ClientContext","x-revturbine-schema-persistence":ps,"x-revturbine-schema-exposure":Bc});({"/api/user-contexts":{get:x({operationId:"listUserContexts",requestParams:{query:ie},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:re(Uo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:x({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Uo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:x({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Uo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Uo}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:x({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:$n}=kn,{Persisted:Cf,Transient:$b}=Zn,{Internal:qc}=Vn,bR=dn(Dt.Playbook,{sdkInput:true}),Zb=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),vR=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":$b,"x-revturbine-schema-exposure":qc}),yR=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":$b,"x-revturbine-schema-exposure":qc}),af=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),name:Hn.meta($n),handle:cn.optional().meta($n),category:vR.default("custom").meta($n),visibility_toggle:z.boolean().default(true).meta($n),source_type:yR.default("system").meta($n),estimated_size:z.number().int().min(0).optional().meta($n)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Cf,"x-revturbine-schema-exposure":qc,...Zb,...Rr()}),xR=sr("SegmentDimensionAnchor"),of=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),dimension_id:z.string().min(1).meta($n),name:Hn.meta($n),handle:cn.meta($n),description:qa.meta($n),definition_rule:z.record(z.string(),z.unknown()).optional().meta($n),used_in_count:z.number().int().min(0).default(0).meta({...$n,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Cf,"x-revturbine-schema-exposure":qc,...Zb,...Rr()}),SR=sr("SegmentValueAnchor");de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),name:Hn.meta($n),handle:cn.meta($n),description:qa.meta($n),rules:z.record(z.string(),z.unknown()).default({}).meta($n),experiment_id:z.string().min(1).optional().meta($n),is_active:z.boolean().default(true).meta($n),estimated_size:z.number().int().min(0).nullable().default(null).meta($n),metadata:Un.meta($n)}).meta({id:"Segment","x-revturbine-schema-persistence":Cf,"x-revturbine-schema-exposure":qc,...bR,...Rr()});({"/api/segment-dimension-anchors":{get:x({operationId:"listSegmentDimensionAnchors",requestParams:{query:ie},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:re(xR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:x({operationId:"listSegmentValueAnchors",requestParams:{query:ie},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:re(SR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:x({operationId:"listSegmentDimensions",requestParams:{query:ie},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:re(af)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:x({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:af}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:x({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:x({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:af}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:x({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:ie},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:re(of)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:x({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:of}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:x({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:of}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:x({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:ut}=kn,{Persisted:rl,Transient:Yb}=Zn,{External:fa}=Vn,kf=dn(Dt.Playbook,{sdkInput:true}),IR=dn(Dt.Playbook,{inConfig:false,sdkInput:false}),PR=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),TR=dn(Dt.Playbook,{inConfig:false,sdkInput:true,source:Ni.CodeConstant});de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true}),handle:cn.meta({...ut,readOnly:true}),name:Hn.meta(ut),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(ut),subject:z.string().max(500).optional().meta(ut),body:z.string().meta(ut),template_variables:z.array(z.string()).default([]).meta(ut),metadata:Un.meta(ut)}).meta({id:"Message","x-revturbine-schema-persistence":rl,"x-revturbine-schema-exposure":fa,...IR,...bi()});var lf=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true}),name:Hn.meta(ut),handle:cn.meta(ut),action_type:Ob.meta(ut),target_url:z.string().optional().meta(ut),target_plan_id:z.string().optional().meta(ut),config_fields:z.record(z.string(),z.unknown()).default({}).meta(ut),metadata:Un.meta(ut)}).meta({id:"CtaPath","x-revturbine-schema-persistence":rl,"x-revturbine-schema-exposure":fa,...kf,...Rr()}),CR=sr("CtaPathAnchor"),kR=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":rl,"x-revturbine-schema-exposure":fa,...TR}),RR=z.object({name:z.string().min(1),field_type:kR,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":rl,"x-revturbine-schema-exposure":fa,...PR}),cf=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true}),name:Hn.meta(ut),handle:cn.meta(ut),surface_type:gk.meta(ut),field_definitions:z.array(RR).default([]).meta(ut),description:qa.meta(ut)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":rl,"x-revturbine-schema-exposure":fa,...kf,...Rr()}),ER=sr("SurfaceTemplateAnchor"),df=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...ut,readOnly:true}),name:Hn.meta(ut),handle:cn.meta(ut),content_fields:z.record(z.string(),z.unknown()).default({}).meta(ut),variation_dimension_id:z.string().optional().meta(ut),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(ut),notes:z.string().max(1e3).optional().meta(ut),used_in_count:z.number().int().min(0).default(0).meta({...ut,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":rl,"x-revturbine-schema-exposure":fa,...kf,...Rr()}),wR=sr("MessageBlockRecordAnchor"),AR=z.object({segment_id:z.string().min(1).meta(ut),message_block_id:z.string().min(1).meta(ut),ui_path_id:z.string().optional().meta(ut),promotion_id:z.string().optional().meta(ut)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":fa});z.object({payload_id:z.string().min(1).meta(ut),tenant_id:z.string().min(1).meta(ut),name:Hn.meta(ut),surface_template_id:z.string().min(1).meta(ut),default_message_block_id:z.string().min(1).meta(ut),segment_content_map:z.array(AR).optional().meta(ut),ui_path_id:z.string().optional().meta(ut),promotion_id:z.string().optional().meta(ut),status:z.enum(["draft","active","inactive"]).meta(ut),created_at:z.string().datetime().optional().meta({...ut,readOnly:true}),updated_at:z.string().datetime().optional().meta({...ut,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":Yb,"x-revturbine-schema-exposure":fa});({"/api/surface-template-anchors":{get:x({operationId:"listSurfaceTemplateAnchors",requestParams:{query:ie},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:re(ER)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:x({operationId:"listSurfaceTemplates",requestParams:{query:ie},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:re(cf)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:x({operationId:"listMessageBlockRecordAnchors",requestParams:{query:ie},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:re(wR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:x({operationId:"listMessageBlocks",requestParams:{query:ie},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:re(df)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:x({operationId:"listCtaPathAnchors",requestParams:{query:ie},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:re(CR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:x({operationId:"listCtaPaths",requestParams:{query:ie},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:re(lf)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Xo,Pii:OR}=kn,{Persisted:Wb}=Zn,{Internal:jR,External:FR}=Vn,LR=dn(Dt.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Xo,readOnly:true}),name:z.string().min(1).max(120).meta(Xo),mode:z.enum(["light","dark","system"]).default("system").meta(Xo),tokens:z.record(z.string(),z.string()).default({}).meta(Xo)}).meta({id:"Theme","x-revturbine-schema-persistence":Wb,"x-revturbine-schema-exposure":FR,...LR});var Sb=de.merge(we).extend({user_id:z.string().min(1).meta(OR),scope:z.string().min(1).meta(Xo),preferences:z.record(z.string(),z.unknown()).default({}).meta(Xo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":Wb,"x-revturbine-schema-exposure":jR});({"/api/ui-preferences":{get:x({operationId:"listUiPreferences",requestParams:{query:ie},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:re(Sb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:x({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(kr(Sb))}}},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:bt,Financial:us}=kn,{Persisted:Xb,Transient:Dc}=Zn,{External:Mc,Internal:Jb}=Vn,VR=z.object({month:z.string().meta(bt),cohort_size:z.number().int().min(0).meta(bt),retained:z.number().int().min(0).meta(bt),retention_rate:z.number().min(0).max(1).meta(bt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Dc,"x-revturbine-schema-exposure":Mc}),UR=z.object({step:z.string().meta(bt),label:z.string().meta(bt),count:z.number().int().min(0).meta(bt),conversion_rate:z.number().min(0).max(1).meta(bt),drop_off_rate:z.number().min(0).max(1).meta(bt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Dc,"x-revturbine-schema-exposure":Mc}),BR=z.object({placement_id:z.string().meta(bt),placement_name:z.string().meta(bt),impressions:z.number().int().min(0).meta(bt),clicks:z.number().int().min(0).meta(bt),conversions:z.number().int().min(0).meta(bt),ctr:z.number().min(0).meta(bt),conversion_rate:z.number().min(0).meta(bt),revenue_cents:z.number().int().min(0).meta(us)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Dc,"x-revturbine-schema-exposure":Mc}),qR=z.object({date:z.string().meta(bt),mrr_cents:z.number().int().min(0).meta(us),arr_cents:z.number().int().min(0).meta(us),new_mrr_cents:z.number().int().min(0).meta(us),churned_mrr_cents:z.number().int().min(0).meta(us),expansion_mrr_cents:z.number().int().min(0).meta(us),net_new_mrr_cents:z.number().int().meta(us)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Dc,"x-revturbine-schema-exposure":Mc}),DR=z.object({metric_key:z.string().min(1).meta(bt),label:z.string().meta(bt),current_value:z.number().meta(us),previous_value:z.number().nullable().default(null).meta(us),change_percent:z.number().nullable().default(null).meta(bt),period:z.string().meta(bt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(bt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Dc,"x-revturbine-schema-exposure":Mc}),Ib=de.merge(we).merge(qe).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(bt),severity:yf.meta(bt),resource_type:z.string().min(1).meta(bt),resource_id:z.string().min(1).meta(bt),summary:z.string().max(1e3).meta(bt),expected_value:z.unknown().optional().meta(bt),actual_value:z.unknown().optional().meta(bt),affected_customer_count:z.number().int().min(0).default(0).meta(bt),is_resolved:z.boolean().default(false).meta(bt),resolved_at:On.meta(bt),metadata:Un.meta(bt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":Xb,"x-revturbine-schema-exposure":Jb}),Pb=de.merge(we).merge(qe).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(bt),severity:yf.meta(bt),title:z.string().min(1).max(300).meta(bt),description:z.string().max(2e3).meta(bt),resource_type:z.string().optional().meta(bt),resource_id:z.string().optional().meta(bt),is_acknowledged:z.boolean().default(false).meta(bt),acknowledged_at:On.meta(bt),acknowledged_by:z.string().nullable().default(null).meta(bt),metadata:Un.meta(bt)}).meta({id:"Alert","x-revturbine-schema-persistence":Xb,"x-revturbine-schema-exposure":Jb});({"/api/analytics/kpis":{get:x({operationId:"listKpiAggregates",requestParams:{query:ie},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:re(DR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:x({operationId:"listPlacementPerformance",requestParams:{query:ie},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:re(BR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:x({operationId:"listRevenueMetrics",requestParams:{query:ie},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:re(qR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:x({operationId:"listCohortMetrics",requestParams:{query:ie},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:re(VR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:x({operationId:"listFunnelSteps",requestParams:{query:ie},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:re(UR)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:x({operationId:"listDriftReports",requestParams:{query:ie},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:re(Ib)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:x({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:Ib}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:x({operationId:"listAlerts",requestParams:{query:ie},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:re(Pb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:x({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:Pb}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:A,Pii:el}=kn,{Persisted:Qb,Transient:Bn}=Zn,{Internal:ha,External:fr}=Vn,ev=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr}),MR=de.extend({event_type:z.string().min(1).meta(A),source:ev.default("sdk").meta(A),tenant_id:z.string().min(1).optional().meta(A),user_id:z.string().min(1).optional().meta(el),session_id:z.string().min(1).optional().meta(el),occurred_at:z.string().datetime().meta(A),request_id:z.string().min(1).meta(A),attributes:z.record(z.string(),z.unknown()).default({}).meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha}),NR=MR.extend({ingested_at:z.string().datetime().meta(A)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":ha});z.array(z.object({id:z.string().min(1).optional().meta(A),event_type:z.string().min(1).meta(A),occurred_at:z.string().datetime().optional().meta(A),tenant_id:z.string().min(1).optional().meta(A),user_id:z.string().min(1).optional().meta(el),session_id:z.string().min(1).optional().meta(el),attributes:z.record(z.string(),z.unknown()).optional().meta(A),payload:z.record(z.string(),z.unknown()).optional().meta(A),message:z.string().optional().meta(A),level:z.string().optional().meta(A),path:z.string().optional().meta(A)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha});var HR=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({user_id:z.string().min(1).meta(el),placement_id:z.string().min(1).meta(A),treatment_id:z.string().min(1).optional().meta(A),surface_slot_id:z.string().min(1).optional().meta(A),surface_template_id:z.string().min(1).optional().meta(A),payload_id:z.string().min(1).optional().meta(A),interaction_type:HR.meta(A),interaction_at:z.string().datetime().optional().meta(A),message_block_handle:z.string().min(1).optional().meta(A),message_block_id:z.string().min(1).optional().meta(A),experiment_id:z.string().min(1).optional().meta(A),variant_key:z.string().min(1).optional().meta(A),test:z.boolean().optional().meta(A),metadata:z.record(z.string(),z.unknown()).optional().meta(A)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});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":Bn,"x-revturbine-schema-exposure":fr});z.object({days_remaining:z.number().int().min(0).optional().meta(A)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({entitlement_handle:z.string().optional().meta(A),current_usage:z.number().min(0).optional().meta(A),usage_limit:z.number().min(0).optional().meta(A),usage_percent:z.number().min(0).max(100).optional().meta(A),threshold:z.number().min(0).optional().meta(A),balance:z.number().min(0).optional().meta(A),allocation:z.number().min(0).optional().meta(A),seats_used:z.number().int().min(0).optional().meta(A),seats_allowed:z.number().int().min(0).optional().meta(A)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({feature:z.string().min(1).meta(A)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({retry_count:z.number().int().min(0).optional().meta(A),renewal_date:z.string().optional().meta(A)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({event_type:z.string().min(1).meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});var KR=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr}),GR=z.enum(["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({event_type:GR.meta(A),source:KR.meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({q:z.string().optional().meta(A),source:ev.optional().meta(A),event_type:z.string().optional().meta(A),from:z.string().datetime().optional().meta(A),to:z.string().datetime().optional().meta(A),page:z.coerce.number().int().min(1).default(1).meta(A),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(A)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha});var $R=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha}),ZR=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha}),uf=de.merge(we).merge(qe).extend({event_id:z.string().min(1).meta(A),event_type:z.string().min(1).meta(A),source:$R.meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A),status:ZR.default("processed").meta(A),processed_at:z.string().datetime().optional().meta(A),error_message:z.string().optional().meta(A)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":Qb,"x-revturbine-schema-exposure":ha});z.object({accepted:z.number().int().min(0).meta(A)}).meta({id:"null","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":ha});var YR=500,WR=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr}),XR=z.object({environment_id:z.string().min(1).meta(A),user_id:z.string().min(1).meta(el),account_id:z.string().min(1).meta(A),event_name:z.string().min(1).max(120).meta(A),event_ts:z.string().datetime().meta(A),properties:z.string().optional().meta(A),surface_slot_id:z.string().nullable().optional().meta(A),placement_id:z.string().nullable().optional().meta(A),payload_id:z.string().nullable().optional().meta(A),request_id:z.string().optional().meta(A),experiment_id:z.string().nullable().optional().meta(A),variant_key:z.string().nullable().optional().meta(A),tenant_id:z.string().optional().meta(A),event_id:z.string().nullable().optional().meta(A),origin:WR.nullable().optional().meta(A),playbook_version:z.string().nullable().optional().meta(A),decision_id:z.string().nullable().optional().meta(A),test:z.boolean().optional().meta(A)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({events:z.array(XR).min(1).max(YR).meta(A)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});var QR=10,eE=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr}),tE=z.object({plans:z.number().int().min(0).meta(A),entitlements:z.number().int().min(0).meta(A),entitlement_rules:z.number().int().min(0).meta(A),segments:z.number().int().min(0).meta(A),placements:z.number().int().min(0).meta(A),placement_payloads:z.number().int().min(0).meta(A),content_ui_paths:z.number().int().min(0).meta(A),surface_templates:z.number().int().min(0).meta(A)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr}),nE=z.object({event_type:eE.meta(A),occurred_at:z.string().datetime().meta(A),request_id:z.string().min(1).optional().meta(A),config_hash_id:z.string().min(1).max(64).optional().meta(A),sdk_version:z.string().min(1).max(64).optional().meta(A),runtime_mode:z.string().min(1).max(64).optional().meta(A),schema_version:z.string().min(1).max(64).optional().meta(A),bundle_version:z.string().min(1).max(64).optional().meta(A),config_shape:tE.optional().meta(A),message:z.string().max(500).optional().meta(A),reason:z.string().min(1).max(64).optional().meta(A),placement_handle:z.string().min(1).max(64).optional().meta(A),slot_handle:z.string().min(1).max(64).optional().meta(A),surface:z.string().min(1).max(64).optional().meta(A),plan_handle:z.string().min(1).max(64).optional().meta(A),entitlement_handle:z.string().min(1).max(64).optional().meta(A)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});z.object({events:z.array(nE).min(1).max(QR).meta(A)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Bn,"x-revturbine-schema-exposure":fr});({"/api/events/search":{get:x({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:pk(NR)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:x({operationId:"listWebhookEvents",requestParams:{query:ie},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:re(uf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:Ze}=kn,{Persisted:Nc,Transient:Hc}=Zn,{Internal:fs}=Vn,tv=dn(Dt.Playbook,{sdkInput:true}),nv=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),iE=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Hc,"x-revturbine-schema-exposure":fs}),Rf=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Hc,"x-revturbine-schema-exposure":fs}),rv=z.object({name:Hn.meta(Ze),handle:cn.meta(Ze),plan_id:z.string().nullable().optional().meta(Ze),segment_id:z.string().nullable().optional().meta(Ze),trial_limit_type:Rf.default("time").meta(Ze),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ze),grace_period_days:z.number().int().min(0).default(0).meta(Ze),usage_entitlement_handle:z.string().min(1).optional().meta(Ze),usage_limit_value:z.number().int().min(1).optional().meta(Ze),require_payment_method:z.boolean().default(false).meta(Ze),auto_convert:z.boolean().default(true).meta(Ze),convert_to_plan_id:z.string().optional().meta(Ze),fallback_plan_id:z.string().optional().meta(Ze),limit_per_customer:z.number().int().min(1).default(1).meta(Ze),is_active:z.boolean().default(true).meta(Ze),metadata:Un.meta(Ze)}),Bo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true})}).merge(rv).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":fs,...tv,...Rr()}),sE=sr("FreeTrialRuleAnchor"),aE=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Hc,"x-revturbine-schema-exposure":fs}),iv=z.object({name:Hn.meta(Ze),handle:cn.meta(Ze),premium_plan_id:z.string().min(1).meta(Ze),fallback_plan_id:z.string().min(1).meta(Ze),segment_id:z.string().nullable().optional().meta(Ze),trial_limit_type:Rf.default("time").meta(Ze),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ze),usage_entitlement_handle:z.string().min(1).optional().meta(Ze),usage_limit_value:z.number().int().min(1).optional().meta(Ze),start_policy:aE.default("signup").meta(Ze),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(Ze),entitlements_during_trial:z.array(z.string()).default([]).meta(Ze),is_active:z.boolean().default(true).meta(Ze),metadata:Un.meta(Ze)}),qo=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Ze,readOnly:true})}).merge(iv).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":fs,...tv,...Rr()}),oE=sr("ReverseTrialRuleAnchor"),sv=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Hc,"x-revturbine-schema-exposure":fs}),av=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Hc,"x-revturbine-schema-exposure":fs}),Do=de.merge(we).merge(qe).extend({trial_limit_policy:sv.default("1_per_lifetime").meta(Ze),eligibility_scope:av.default("per_customer").meta(Ze)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":fs,...nv}),Mo=de.merge(we).merge(qe).extend({trial_limit_policy:sv.default("1_per_lifetime").meta(Ze),eligibility_scope:av.default("per_customer").meta(Ze)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":fs,...nv}),yu=de.merge(we).merge(qe).extend({customer_id:z.string().min(1).meta(Ze),rule_id:z.string().min(1).meta(Ze),rule_type:z.enum(["free_trial","reverse_trial"]).meta(Ze),plan_id:z.string().min(1).meta(Ze),status:iE.default("active").meta(Ze),started_at:z.string().datetime().meta({...Ze,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(Ze),trial_limit_type:Rf.default("time").meta(Ze),usage_entitlement_handle:z.string().min(1).optional().meta(Ze),usage_limit_value:z.number().int().min(1).optional().meta(Ze),converted_at:On.meta(Ze),cancelled_at:On.meta(Ze),metadata:Un.meta(Ze)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Nc,"x-revturbine-schema-exposure":fs});({"/api/free-trial-rule-anchors":{get:x({operationId:"listFreeTrialRuleAnchors",requestParams:{query:ie},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:re(sE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:x({operationId:"listFreeTrialRules",requestParams:{query:ie},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:re(Bo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:x({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Bo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Bo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:x({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:x({operationId:"listReverseTrialRuleAnchors",requestParams:{query:ie},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:re(oE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:x({operationId:"listReverseTrialRules",requestParams:{query:ie},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:re(qo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:x({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:x({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:qo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:qo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:x({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:x({operationId:"listFreeTrialSettings",requestParams:{query:ie},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:re(Do)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:x({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:x({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Do.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Do}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:x({operationId:"listReverseTrialSettings",requestParams:{query:ie},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:re(Mo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:x({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:x({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:x({operationId:"listTrialInstances",requestParams:{query:ie},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:re(yu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:x({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:yu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:x({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:yu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:x({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:yu}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Sn}=kn,{Persisted:Ef,Transient:ov}=Zn,{Internal:zc}=Vn,lv=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),lE=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":zc}),cE=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":ov,"x-revturbine-schema-exposure":zc}),dE=z.object({variant_id:z.string().min(1),name:Hn,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":Ef,"x-revturbine-schema-exposure":zc,...lv}),Vs=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...Sn,readOnly:true}),name:Hn.meta(Sn),handle:cn.meta(Sn),description:z.string().max(1e3).optional().meta(Sn),experiment_type:cE.meta(Sn),status:lE.default("draft").meta(Sn),target_resource_id:z.string().optional().meta(Sn),target_segment_ids:z.array(z.string()).default([]).meta(Sn),variants:z.array(dE).min(2).meta(Sn),primary_metric:z.string().min(1).meta(Sn),metric_threshold:z.number().default(.05).meta(Sn),secondary_metrics:z.array(z.string()).default([]).meta(Sn),traffic_allocation:z.number().min(0).max(1).default(1).meta(Sn),started_at:On.meta(Sn),ended_at:On.meta(Sn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(Sn),winning_variant_id:z.string().nullable().default(null).meta(Sn),metadata:Un.meta(Sn)}).meta({id:"Experiment","x-revturbine-schema-persistence":Ef,"x-revturbine-schema-exposure":zc,...lv,...Rr()}),uE=sr("ExperimentAnchor"),mE=yf,Tb=de.merge(we).merge(qe).extend({experiment_id:z.string().optional().meta(Sn),resource_type:z.string().min(1).meta(Sn),resource_id:z.string().min(1).meta(Sn),severity:mE.default("info").meta(Sn),title:z.string().min(1).max(300).meta(Sn),description:z.string().max(2e3).meta(Sn),suggested_action:z.string().max(1e3).optional().meta(Sn),estimated_impact:z.number().optional().meta(Sn),is_dismissed:z.boolean().default(false).meta(Sn),metadata:Un.meta(Sn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Ef,"x-revturbine-schema-exposure":zc});({"/api/experiment-anchors":{get:x({operationId:"listExperimentAnchors",requestParams:{query:ie},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:re(uE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:x({operationId:"listExperiments",requestParams:{query:ie},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:re(Vs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:x({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:x({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Vs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:x({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:x({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:x({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:x({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Vs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:x({operationId:"listOptimizationSuggestions",requestParams:{query:ie},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:re(Tb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:x({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Tb}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:_r,Financial:Cb}=kn,{Persisted:pE,Transient:cv}=Zn,{Internal:wf}=Vn,fE=dn(Dt.Playbook,{sdkInput:true}),hE=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":cv,"x-revturbine-schema-exposure":wf}),gE=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":cv,"x-revturbine-schema-exposure":wf}),ca=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({..._r,readOnly:true}),name:Hn.meta(_r),handle:cn.meta(_r),description:z.string().max(1e3).optional().meta(_r),rt_status:hE.default("draft").meta(_r),discount_type:gE.meta(_r),discount_value:z.number().min(0).meta(Cb),currency:z.string().length(3).default("USD").meta(Cb),applicable_plan_ids:z.array(z.string()).default([]).meta(_r),applicable_addon_ids:z.array(z.string()).default([]).meta(_r),target_segment_ids:z.array(z.string()).default([]).meta(_r),max_redemptions:z.number().int().min(0).nullable().default(null).meta(_r),current_redemptions:z.number().int().min(0).default(0).meta({..._r,readOnly:true}),coupon_code:z.string().max(100).optional().meta(_r),starts_at:On.meta(_r),ends_at:On.meta(_r),stripe_coupon_id:z.string().nullable().default(null).meta(_r),stripe_promotion_code_id:z.string().nullable().default(null).meta(_r),auto_sync_stripe:z.boolean().default(false).meta(_r),metadata:Un.meta(_r)}).meta({id:"Promotion","x-revturbine-schema-persistence":pE,"x-revturbine-schema-exposure":wf,...fE,...Rr()}),_E=sr("PromotionAnchor");({"/api/promotion-anchors":{get:x({operationId:"listPromotionAnchors",requestParams:{query:ie},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:re(_E)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:x({operationId:"listPromotions",requestParams:{query:ie},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:re(ca)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:x({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:ca}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:x({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:ca.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ca}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:x({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:x({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:ca}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:x({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ca}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:An,Pii:Af}=kn,{Persisted:Of}=Zn,{Internal:jf}=Vn,bE=de.merge(we).merge(qe).extend({customer_id:z.string().min(1).meta(Af),placement_id:z.string().min(1).meta(An),payload_id:z.string().nullable().default(null).meta(An),variant_id:z.string().nullable().default(null).meta(An),surface_type:z.string().meta(An),presented_at:z.string().datetime().meta({...An,readOnly:true}),dismissed_at:On.meta(An),cta_clicked_at:On.meta(An),cta_action_type:z.string().nullable().default(null).meta(An),converted:z.boolean().default(false).meta(An),session_id:z.string().optional().meta(An),metadata:Un.meta(An)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":Of,"x-revturbine-schema-exposure":jf}),vE=de.merge(we).merge(qe).extend({customer_id:z.string().min(1).meta(Af),placement_id:z.string().min(1).meta(An),decision:z.enum(["show","suppress","defer"]).meta(An),reason:z.string().max(500).meta(An),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(An),experiment_id:z.string().nullable().default(null).meta(An),variant_id:z.string().nullable().default(null).meta(An),latency_ms:z.number().min(0).optional().meta(An)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":Of,"x-revturbine-schema-exposure":jf}),yE=de.merge(we).merge(qe).extend({customer_id:z.string().min(1).meta(Af),entitlement_handle:z.string().min(1).meta(An),entitlement_type:z.string().meta(An),result:z.enum(["granted","denied","limited","metered"]).meta(An),current_usage:z.number().nullable().default(null).meta(An),limit:z.number().nullable().default(null).meta(An),source:z.enum(["plan","addon","override","trial"]).meta(An),source_id:z.string().min(1).meta(An),latency_ms:z.number().min(0).optional().meta(An)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":Of,"x-revturbine-schema-exposure":jf});({"/api/presentation-records":{get:x({operationId:"listPresentationRecords",requestParams:{query:ie},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:re(bE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:x({operationId:"listDecisionLogs",requestParams:{query:ie},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:re(vE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:x({operationId:"listEntitlementEvalLogs",requestParams:{query:ie},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:re(yE)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:h}=kn,{Persisted:il,Transient:Qe}=Zn,{Internal:ki,External:Et}=Vn,_t=dn(Dt.Playbook,{sdkInput:true}),Yo=dn(Dt.Playbook,{sdkInput:false}),ua=dn(Dt.Playbook,{inConfig:false,sdkInput:false}),dv=dn(Dt.Playbook,{inConfig:false,sdkInput:true}),Pc=dn(Dt.Playbook,{inConfig:false,sdkInput:true,source:Ni.CodeConstant}),pf=dn(Dt.Playbook,{inConfig:false,sdkInput:true,source:Ni.Runtime}),ff=dn(Dt.Playbook,{inConfig:false,sdkInput:false,source:Ni.Runtime}),xE=dn(Dt.Billing,{sdkInput:false}),SE=dn(Dt.Metering,{sdkInput:false}),IE=dn(Dt.Branding,{inConfig:true,sdkInput:true}),PE=dn(Dt.Branding,{sdkInput:false}),TE="1.0.0",Tc=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:Hn.meta(h),handle:cn.meta(h),description:qa.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:Un.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":ki,...ua,...Rr()}),CE=sr("SeatTypeAnchor"),Cc=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:cn.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:Un.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":ki,...ua,...Rr()}),kE=sr("PersonalizationTokenAnchor"),RE=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":ki}),hf=de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:RE.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:Un.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":ki,...xE,...bi()});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":Qe,"x-revturbine-schema-exposure":Et,...PE});var kc=de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.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:Un.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":il,"x-revturbine-schema-exposure":ki,...SE,...bi()}),kb=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":ki}),Rc=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:cn.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:kb.default("warn").meta(h),hard_limit_action:kb.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":il,"x-revturbine-schema-exposure":ki,...dv,...bi()}),EE=sr("UsageEnforcementSettingsAnchor"),wE=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":Qe,"x-revturbine-schema-exposure":ki}),AE=z.object({id:z.string().min(1).meta(h),group:z.array(wE).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":Qe,"x-revturbine-schema-exposure":ki}),OE=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":ki}),uv=z.object({capRules:z.array(AE).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:OE.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":ki}),gf=de.merge(we).merge(qe).merge(un).merge(hn).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:cn.meta({...h,readOnly:true}),global_frequency_cap:uv.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":il,"x-revturbine-schema-exposure":ki,...dv,...bi()}),jE=sr("PlacementSettingsAnchor"),FE=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":Qe,"x-revturbine-schema-exposure":Et}),LE=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(FE).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":Qe,"x-revturbine-schema-exposure":Et,..._t}),VE=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:ma.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),UE=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:ma.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...Yo}),BE=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:Vc.meta(h),visibility:ma.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Ru.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...ua}),qE=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:Vc.meta(h),visibility:ma.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:Ru.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...ua}),DE=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),ME=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),NE=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:uv.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":Qe,"x-revturbine-schema-exposure":Et,..._t}),HE=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),zE=z.object({handle:z.string().min(1).meta(h),entitlement_handle:z.string().min(1).meta(h),meter_handle:z.string().min(1).meta(h),limit:z.number().int().min(0).nullable().default(null).meta(h),reset_period:z.string().nullable().default(null).meta(h)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),KE=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:vf.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":Qe,"x-revturbine-schema-exposure":Et,..._t}),GE=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(qb).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:vf.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}),...Jo.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:Eu.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),$E=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),ZE=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),YE=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":Qe,"x-revturbine-schema-exposure":Et}),WE=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(YE).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),XE=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":Qe,"x-revturbine-schema-exposure":Et}),JE=z.object({name:z.string().min(1).meta(h),action_type:XE.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":Qe,"x-revturbine-schema-exposure":Et,..._t}),QE=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),ew=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),Rb=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":Qe,"x-revturbine-schema-exposure":Et}),tw=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:Rb.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Rb})).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":Qe,"x-revturbine-schema-exposure":Et,..._t}),nw=z.object({label:z.string().meta(h),path:Ob.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et}),mv=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(nw).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et}),pv=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":Qe,"x-revturbine-schema-exposure":Et}),rw=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":Qe,"x-revturbine-schema-exposure":Et}),fv=z.object({max_per_period:rw.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et}),iw=z.object({id:z.string().min(1).meta(h),target:pv.meta(h),surfaces:z.array(mv).meta(h),caps:fv.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":Qe,"x-revturbine-schema-exposure":Et}),sw=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:Oc}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Oc}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Oc}),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":Qe,"x-revturbine-schema-exposure":Et}),aw=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et}),ow=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:aw.meta(h),trigger:sw.meta(h),payloads:z.array(iw).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),lw=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:pv.meta(h),caps:fv.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(mv).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":Qe,"x-revturbine-schema-exposure":Et,..._t}),cw=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":Qe,"x-revturbine-schema-exposure":Et,..._t}),dw=de.merge(rv).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...ua}),uw=de.merge(iv).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...ua}),mw=z.object({plans:z.array(VE).meta({...h,..._t}),addons:z.array(UE).optional().meta({...h,...Yo}),entitlements:z.array(KE).meta({...h,..._t}),entitlement_rules:z.array(GE).meta({...h,..._t}),segments:z.array(LE).meta({...h,..._t}),content_ui_paths:z.array(JE).meta({...h,..._t}),slot_configs:z.array($E).optional().meta({...h,..._t,...tf({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,..._t,...tf({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,...IE,...tf({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(ZE).optional().meta({...h,..._t}),message_blocks:z.array(tw).optional().meta({...h,..._t}),placement_payloads:z.array(lw).optional().meta({...h,..._t}),placements:z.array(ow).optional().meta({...h,..._t}),content_promotions:z.array(QE).optional().meta({...h,..._t}),personalization_tokens:z.array(ew).optional().meta({...h,..._t}),surface_templates:z.array(WE).optional().meta({...h,..._t}),free_trial_rules:z.array(dw).optional().meta({...h,...Yo}),reverse_trial_rules:z.array(uw).optional().meta({...h,...Yo}),plan_variations:z.array(BE).optional().meta({...h,...Yo}),addon_variations:z.array(qE).optional().meta({...h,...Yo}),extension_rules:z.array(cw).optional().meta({...h,..._t}),seat_types:z.array(DE).optional().meta({...h,..._t}),enforcement_defaults:z.array(ME).optional().meta({...h,..._t}),placement_settings:z.array(NE).optional().meta({...h,..._t}),segment_dimensions:z.array(HE).optional().meta({...h,..._t}),meter_bindings:z.array(zE).optional().meta({...h,..._t}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...ua}),signal_catalog:z.object({}).strict().optional().meta({...h,...ua})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t}),pw=z.object({artifact_type:z.literal("playbook").meta({...h,...Pc,readOnly:true}),format_version:z.literal(TE).meta({...h,...Pc,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Pc}),playbook_version_id:z.string().nullable().default(null).meta({...h,...pf,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...ff,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...ff,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...ff,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...pf,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Pc,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Pc,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,...pf}),hv=pw.extend(mw.shape).meta({"x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t});function fw(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function gv(n){if(!fw(n))return n;let e={...n};return "artifact_type"in e||(e.artifact_type="playbook"),"version"in e&&("format_version"in e||(e.format_version=e.version),delete e.version),"change_set_id"in e&&("playbook_version_id"in e||(e.playbook_version_id=e.change_set_id),delete e.change_set_id),e}z.preprocess(gv,hv).meta({id:"Playbook","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t});z.preprocess(gv,hv.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":Et,..._t});({"/api/seat-type-anchors":{get:x({operationId:"listSeatTypeAnchors",requestParams:{query:ie},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:re(CE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:x({operationId:"listSeatTypes",requestParams:{query:ie},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:re(Tc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:x({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(Tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:x({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Tc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:x({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:x({operationId:"listPersonalizationTokenAnchors",requestParams:{query:ie},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:re(kE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:x({operationId:"listPersonalizationTokens",requestParams:{query:ie},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:re(Cc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:x({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(Cc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:x({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:x({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:x({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kr(hf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:hf}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:x({operationId:"listMeteringConfigs",requestParams:{query:ie},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:re(kc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:x({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(kc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:kc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:x({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:kc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:x({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:x({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:ie},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:re(EE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:x({operationId:"listUsageEnforcementSettings",requestParams:{query:ie},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:re(Rc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:x({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Cr(Rc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:x({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:x({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:x({operationId:"listPlacementSettingsAnchors",requestParams:{query:ie},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:re(jE)}}},default:{description:"Error response",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:x({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:kr(gf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:gf}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Us}=kn,{Persisted:_v}=Zn,{Internal:bv}=Vn,hw=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":_v,"x-revturbine-schema-exposure":bv}),Eb=de.merge(we).merge(qe).extend({action:hw.meta(Us),resource_type:z.string().min(1).max(100).meta(Us),resource_id:z.string().min(1).meta(Us),resource_name:z.string().max(200).optional().meta(Us),actor_id:z.string().min(1).meta(Us),actor_email:z.string().email().optional().meta(Us),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Us),summary:z.string().max(1e3).optional().meta(Us),metadata:Un.meta(Us)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":_v,"x-revturbine-schema-exposure":bv});({"/api/changelog":{get:x({operationId:"listChangeLogEntries",requestParams:{query:ie},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:re(Eb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:x({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Eb}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:xu}=kn,{Persisted:gw,Transient:_w}=Zn,{Internal:vv}=Vn,bw=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":_w,"x-revturbine-schema-exposure":vv}),da=de.merge(we).extend({name:Hn.meta(xu),handle:cn.meta(xu),status:bw.default("active").meta(xu),metadata:Un.meta(xu)}).meta({id:"Tenant","x-revturbine-schema-persistence":gw,"x-revturbine-schema-exposure":vv});({"/api/tenants":{get:x({operationId:"listTenants",requestParams:{query:ie},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:re(da)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:x({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:x({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:da.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:x({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:x({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Pi}=kn,{Persisted:vw,Transient:yv}=Zn,{Internal:Ff}=Vn,yw=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":yv,"x-revturbine-schema-exposure":Ff}),No=de.merge(we).merge(qe).extend({name:Hn.meta(Pi),handle:cn.meta(Pi),description:qa.meta(Pi),is_production:z.boolean().default(false).meta({...Pi,readOnly:true}),status:yw.default("active").meta(Pi),cloned_from_environment_id:z.string().nullable().default(null).meta({...Pi,readOnly:true}),cloned_at:On.meta({...Pi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Pi,readOnly:true}),requires_approval:z.boolean().default(false).meta(Pi),auto_deploy_on_approval:z.boolean().default(false).meta(Pi),created_by:z.string().optional().meta(Pi),metadata:Un.meta(Pi)}).meta({id:"Environment","x-revturbine-schema-persistence":vw,"x-revturbine-schema-exposure":Ff}),xw=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":yv,"x-revturbine-schema-exposure":Ff});({"/api/environments":{get:x({operationId:"listEnvironments",requestParams:{query:ie},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:re(No)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:x({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:No}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:x({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:x({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:No.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:x({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:No}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:x({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:xw}}},responses:{200:{description:"Promotion result",content:{"application/json":{schema:z.object({promoted_count:z.number().int(),conflict_count:z.number().int(),conflicts:z.array(z.object({handle:z.string(),resource_type:z.string(),source_sequence:z.number().int(),target_sequence:z.number().int()}))})}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:De,Pii:Fc}=kn,{Transient:hs,Persisted:Sw}=Zn,{External:Hi}=Vn,Iw=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi});z.object({superseded_output_id:z.string().min(1).meta(De),superseded_by:z.string().min(1).meta(De),reason:Iw.meta(De)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":Sw,"x-revturbine-schema-exposure":Hi,...kn.Operational});var Pw=z.enum(Ab).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi}),xv=z.object({output_id:z.string().meta(De),category:z.string().meta(De),surface:z.object({template:z.string().optional().meta(De),type:Cu.meta(De),slot_id:z.string().optional().meta(De)}).meta(De),content:z.record(z.string(),z.unknown()).meta(De),promotion:z.record(z.string(),z.unknown()).optional().meta(De),cta_path:z.record(z.string(),z.unknown()).optional().meta(De),ui_path:z.record(z.string(),z.unknown()).optional().meta(De),rule_id:z.string().meta(De),decision_id:z.string().meta(De),config_version:z.string().meta(De),present_upsell:z.boolean().meta(De),experiment_id:z.string().optional().meta(De),variant_key:z.string().optional().meta(De),experiment_version_id:z.string().optional().meta(De)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi}),Tw=z.object({status:Pw.meta(De),allowed:z.boolean().meta(De),reason:z.string().optional().meta(De),current_tier:z.string().optional().meta(De),limit:z.number().optional().meta(De),used:z.number().optional().meta(De),remaining:z.number().optional().meta(De),placement:xv.optional().meta(De)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi});z.object({id:z.string().meta(De),name:z.string().optional().meta(De),discount:z.string().optional().meta(De),type:z.string().optional().meta(De),status:z.string().optional().meta(De)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi});var Cw=z.object({id:z.string().meta(Fc),anonymous_id:z.string().optional().meta(De),traits:z.record(z.string(),z.unknown()).optional().meta(Fc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi}),kw=z.object({slot_id:z.string().optional().meta(De),entitlement_handle:z.string().optional().meta(De),plan_handle:z.string().optional().meta(De),placement_handle:z.string().optional().meta(De),visible:z.boolean().meta(De),output:xv.optional().meta(De),reason_codes:z.array(z.string()).optional().meta(De)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi}),Rw=Tw,Ew=Tf.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi}),ww=z.object({segments:z.array(z.string()).optional().meta(De),traits:z.record(z.string(),z.unknown()).optional().meta(Fc),usage_balances:z.record(z.string(),z.number()).optional().meta(De)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi});z.object({version:z.literal("1.0.0").meta(De),request_id:z.string().meta(De),tenant_id:z.string().meta(De),evaluated_at:z.string().datetime().meta(De),ttl_seconds:z.number().int().min(0).max(86400).meta(De),user:Cw.meta(Fc),decisions:z.array(kw).meta(De),entitlements:z.record(z.string(),Rw).optional().meta(De),theme:z.record(z.string(),z.unknown()).optional().meta(De),trial_status:Ew.optional().meta(De),user_context:ww.optional().meta(Fc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":hs,"x-revturbine-schema-exposure":Hi});var {Unrestricted:Yt}=kn,{Persisted:Aw,Transient:wu}=Zn,{Internal:Kc}=Vn,Ow=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Ec=de.merge(we).merge(qe).extend({environment_id:z.string().min(1).meta(Yt),name:Hn.meta(Yt),description:z.string().max(2e3).optional().meta(Yt),status:Ow.default("draft").meta(Yt),labels:z.array(z.string()).default([]).meta(Yt),created_by:z.string().min(1).meta(Yt),submitted_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),submitted_at:On.meta({...Yt,readOnly:true}),reviewed_at:On.meta({...Yt,readOnly:true}),deployed_at:On.meta({...Yt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Yt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Yt),review_notes:z.string().max(2e3).optional().meta(Yt),rejection_reason:z.string().max(2e3).optional().meta(Yt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Yt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Yt,readOnly:true}),metadata:Un.meta(Yt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Aw,"x-revturbine-schema-exposure":Kc}),Sv=z.object({handle:z.string().meta(Yt),resource_type:z.string().meta(Yt),resource_name:z.string().optional().meta(Yt),action:z.enum(["create","update","delete"]).meta(Yt),has_conflict:z.boolean().meta(Yt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),jw=z.object({playbook_version_id:z.string().meta(Yt),entries:z.array(Sv).meta(Yt),total_entries:z.number().int().min(0).meta(Yt),total_conflicts:z.number().int().min(0).meta(Yt),deployable:z.boolean().meta(Yt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc}),Fw=z.object({playbook_version_id:z.string().meta(Yt),deployed_count:z.number().int().min(0).meta(Yt),superseded_count:z.number().int().min(0).meta(Yt),skipped_conflicts:z.number().int().min(0).meta(Yt),deployed_at:z.string().datetime().meta(Yt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":wu,"x-revturbine-schema-exposure":Kc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:x({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:Ec}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:x({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:Ec}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:x({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:Ec}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:x({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:Fw}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:x({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:Ec}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:x({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:jw}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:x({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:ie},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:re(Sv)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:x({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:Ec}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:x({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:pt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Rt,Pii:Lw}=kn,{Persisted:zi}=Zn,{Internal:Ki}=Vn,Vw=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),Su=de.merge(we).merge(qe).extend({name:Hn.meta(Rt),key_hash:z.string().min(1).meta({...Lw,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:Vw.default("active").meta(Rt),last_used_at:On.meta({...Rt,readOnly:true}),expires_at:On.meta(Rt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),Uw=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),Ua=de.merge(we).merge(qe).extend({key:z.string().min(1).max(100).meta(Rt),value_type:Uw.default("boolean").meta(Rt),value:z.string().max(4e3).default("false").meta(Rt),description:qa.meta(Rt),enabled:z.boolean().default(true).meta(Rt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),_f=de.merge(we).merge(qe).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":zi,"x-revturbine-schema-exposure":Ki}),bf=de.merge(we).merge(qe).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":zi,"x-revturbine-schema-exposure":Ki}),Iu=de.merge(we).merge(qe).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:On.meta({...Rt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),Bw=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),qw=de.merge(qe).extend({environment_id:z.string().min(1).default("production").meta(Rt),actor_type:Bw.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":zi,"x-revturbine-schema-exposure":Ki}),Dw=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":zi,"x-revturbine-schema-exposure":Ki}),Pu=de.merge(we).merge(qe).merge(un).merge(hn).extend({handle:cn.meta({...Rt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Rt),identifier_type:Dw.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":zi,"x-revturbine-schema-exposure":Ki,...bi()});({"/api/settings/api-keys":{get:x({operationId:"listApiKeys",requestParams:{query:ie},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:re(Su)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:x({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(Su)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:Su}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:x({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:Su}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:x({operationId:"listFeatureFlags",requestParams:{query:ie},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:re(Ua)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:x({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(Ua)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:x({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:x({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Ua).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:x({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:x({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(_f).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:_f}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:x({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(bf).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:bf}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:x({operationId:"listOnboardingSteps",requestParams:{query:ie},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:re(Iu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:x({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:x({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:kr(Iu).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:Iu}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:x({operationId:"listAuditEvents",requestParams:{query:ie},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:re(qw)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:x({operationId:"listPlacementTestUsers",requestParams:{query:ie},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:re(Pu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:x({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Cr(Pu)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:x({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:Pu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:ce,Pii:Lr}=kn,{Persisted:Zr,Transient:Lf}=Zn,{Internal:br}=Vn,Mw=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.merge(we).extend({name:Hn.meta(ce),email:z.string().email().meta(Lr),email_verified:z.boolean().default(false).meta(ce),image:z.string().url().nullable().default(null).meta(Lr),role:Mw.default("user").meta(ce),banned:z.boolean().default(false).meta({...ce,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ce,readOnly:true}),ban_expires:On.meta({...ce,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ce,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.merge(we).extend({expires_at:z.string().datetime().meta(ce),token:z.string().min(1).meta({...Lr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Lr),user_agent:z.string().nullable().default(null).meta(Lr),user_id:z.string().min(1).meta({...ce,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ce),impersonated_by:z.string().nullable().default(null).meta({...ce,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.merge(we).extend({account_id:z.string().min(1).meta(ce),provider_id:z.string().min(1).meta(ce),user_id:z.string().min(1).meta({...ce,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Lr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Lr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Lr,readOnly:true}),access_token_expires_at:On.meta({...ce,readOnly:true}),refresh_token_expires_at:On.meta({...ce,readOnly:true}),scope:z.string().nullable().default(null).meta(ce),password:z.string().nullable().default(null).meta({...Lr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.merge(we).extend({identifier:z.string().min(1).meta(Lr),value:z.string().min(1).meta({...Lr,readOnly:true}),expires_at:z.string().datetime().meta(ce)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({secret:z.string().min(1).meta({...Lr,readOnly:true}),backup_codes:z.string().min(1).meta({...Lr,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),verified:z.boolean().default(false).meta({...ce,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({name:Hn.meta(ce),slug:z.string().min(1).max(100).nullable().default(null).meta(ce),logo:z.string().url().nullable().default(null).meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),metadata:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});var Iv=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});var Pv=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":br}),Tv=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":br});z.object({resource:Pv,action:Tv}).meta({id:"Permission","x-revturbine-schema-persistence":Lf,"x-revturbine-schema-exposure":br});var Nw=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Hw=["plans","entitlements","placements","targeting","content","experiments"],zw=["plans","entitlements","placements","targeting","content","experiments"],Kw=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Gw=["read","create","update","delete","publish","approve","invite","manage_roles"];function Au(n,e){return n.flatMap(t=>e.map(r=>({resource:t,action:r})))}var $w=Au(Nw,["read"]),Zw=[...$w,...Au(Hw,["create","update"])];[...Zw,...Au(zw,["publish","approve","delete"])];Au(Kw,Gw);var Yw=Pv.options.flatMap(n=>Tv.options.map(e=>`${n}:${e}`));z.enum(Yw).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({organization_id:z.string().min(1).meta({...ce,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),role:Iv.default("viewer").meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});var Ww=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({organization_id:z.string().min(1).meta({...ce,readOnly:true}),email:z.string().email().meta(Lr),role:Iv.nullable().default(null).meta(ce),status:Ww.default("pending").meta(ce),expires_at:z.string().datetime().meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),inviter_id:z.string().min(1).meta({...ce,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({name:z.string().max(200).nullable().default(null).meta(ce),public_key:z.string().min(1).meta({...Lr,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),credential_id:z.string().min(1).meta({...ce,readOnly:true}),counter:z.number().int().default(0).meta({...ce,readOnly:true}),device_type:z.string().min(1).meta(ce),backed_up:z.boolean().default(false).meta(ce),transports:z.string().nullable().default(null).meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.merge(we).extend({config_id:z.string().min(1).meta(ce),name:z.string().max(200).nullable().default(null).meta(ce),start:z.string().nullable().default(null).meta(ce),reference_id:z.string().min(1).meta(ce),prefix:z.string().nullable().default(null).meta(ce),key:z.string().min(1).meta({...Lr,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ce),refill_amount:z.number().int().nullable().default(null).meta(ce),last_refill_at:On.meta({...ce,readOnly:true}),enabled:z.boolean().default(true).meta(ce),rate_limit_enabled:z.boolean().default(false).meta(ce),rate_limit_time_window:z.number().int().nullable().default(null).meta(ce),rate_limit_max:z.number().int().nullable().default(null).meta(ce),request_count:z.number().int().default(0).meta({...ce,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ce,readOnly:true}),last_request:On.meta({...ce,readOnly:true}),expires_at:On.meta(ce),permissions:z.string().nullable().default(null).meta(ce),metadata:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});de.extend({issuer:z.string().min(1).meta(ce),oidc_config:z.string().nullable().default(null).meta(ce),saml_config:z.string().nullable().default(null).meta(ce),user_id:z.string().min(1).meta({...ce,readOnly:true}),provider_id:z.string().min(1).meta(ce),organization_id:z.string().nullable().default(null).meta(ce),domain:z.string().min(1).meta(ce)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":Zr,"x-revturbine-schema-exposure":br});var Cv="0.2.85";var Ou=/^[a-z0-9._]{1,100}$/;var nt={Persisted:"persisted",Transient:"transient"},Ye={Internal:"internal",External:"external"},Ne={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 kv="x-revturbine-schema-exposure",Qw="readOnly",eA="x-revturbine-decision-only",ju={[eA]:true},Ur={[kv]:Ye.External},Vf={[kv]:Ye.Internal};function zn(n){let e={};for(let[t,r]of Object.entries(n.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[Qw]===true||(e[t]=r);}return z.object(e)}function Yn(n){let e=zn(n),t=e.shape.handle;return t&&typeof t.regex=="function"?e.extend({handle:t.regex(Ou)}):e}var {Unrestricted:ur}=Ne,{Transient:Br,Persisted:tA}=nt,{Internal:Da,External:gs}=Ye;z.object({page:z.coerce.number().int().min(1).default(1).meta(ur),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ur)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs});var Uf=n=>z.object({items:z.array(n).meta(ur),total:z.number().int().min(0).meta(ur),page:z.number().int().min(1).meta(ur),per_page:z.number().int().min(1).meta(ur),has_more:z.boolean().meta(ur)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs}),X=z.object({created_at:z.string().datetime().meta({...ur,readOnly:true}),updated_at:z.string().datetime().meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs}),K=z.object({id:z.string().min(1).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs}),ae=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":Da});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs});var Gc=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":Br,"x-revturbine-schema-exposure":gs}),$c=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs});var sl=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs}),Bf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":gs});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":Da});var Mt=z.string().min(1).max(200),lt=z.string().min(1).max(100),li=z.string().max(500).optional(),wt=z.record(z.string(),z.unknown()).default({}),ga=z.number().int().min(10).max(100).multipleOf(10),Nt=z.string().datetime().nullable().default(null),vt=z.object({environment_id:z.string().min(1).default("production").meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":Da}),At=z.object({playbook_version_id:z.string().nullable().default(null).meta(ur),is_current:z.boolean().default(true).meta({...ur,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ur,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ur,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ur,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ur,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":Da}),aA=K.merge(X).merge(ae).merge(vt).extend({handle:lt.meta({...ur,readOnly:true}),active:z.boolean().default(true).meta({...ur,readOnly:true})});function mn(n){return aA.meta({id:n,"x-revturbine-schema-persistence":tA,"x-revturbine-schema-exposure":Da})}var al=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Br,"x-revturbine-schema-exposure":Da}),qf=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":Br,"x-revturbine-schema-exposure":Da}),ol=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":Br,"x-revturbine-schema-exposure":gs});var He={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Yr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},oA="x-revturbine-context",lA="x-revturbine-in-config",cA="x-revturbine-sdk-input",dA="x-revturbine-source",uA="x-revturbine-deprecation",mA={[He.Playbook]:Yr.Customer,[He.Branding]:Yr.Customer,[He.Billing]:Yr.Stripe,[He.Metering]:Yr.Customer,[He.CustomerOperations]:Yr.Runtime,[He.EventIngestion]:Yr.Runtime};function ft(n,e){return {[oA]:n,[lA]:e.inConfig??n===He.Playbook,[cA]:e.sdkInput,[dA]:e.source??mA[n]}}function Zc(n){return {deprecated:true,[uA]:{since:n.since,replacement:n.replacement,remove_after:n.removeAfter,reason:n.reason}}}var Df={Named:"named",Minted:"minted"},Rv="x-revturbine-schema-identity";function Rn(n="handle"){return {[Rv]:{kind:Df.Named,handleField:n}}}function ar(n="handle"){return {[Rv]:{kind:Df.Minted,handleField:n}}}var q=n=>z.object({items:z.array(n)}),Ae=z.object({error:z.string(),code:z.string(),request_id:z.string()}),v=n=>n,D=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:Gt,Financial:Fu}=Ne,{Persisted:Yc,Transient:Lu}=nt,{External:Ds}=Ye,pA=ft(He.Playbook,{sdkInput:true}),fA=ft(He.Playbook,{sdkInput:false}),Mf=ft(He.Billing,{sdkInput:false}),_s=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Ds}),Ga=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Ds}),ll=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Ds}),Ma=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:Mt.meta(Gt),handle:lt.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:wt.meta(Gt)}).meta({id:"Plan","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Ds,...pA,...Rn()}),hA=mn("PlanAnchor"),Na=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:lt.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(Fu),pricing_model:Ga.meta(Gt),visibility:_s.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:ll.default("static").meta(Gt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Ds,...Mf,...ar()}),gA=mn("PlanVariationAnchor"),Ha=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:Mt.meta(Gt),handle:lt.meta(Gt),sort_order:z.number().int().default(0).meta(Gt),visibility:_s.default("public").meta(Gt),metadata:wt.meta(Gt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Ds,...fA,...Rn()}),_A=mn("AddOnAnchor"),za=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:lt.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(Fu),pricing_model:Ga.meta(Gt),visibility:_s.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:ll.default("static").meta(Gt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Ds,...Mf,...ar()}),bA=mn("AddOnVariationAnchor"),Ev=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Lu,"x-revturbine-schema-exposure":Ds}),Ka=K.merge(X).merge(ae).extend({stripe_price_id:z.string().min(1).meta(Gt),stripe_product_id:z.string().min(1).meta(Gt),billing_period:Ev.meta(Gt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Fu),currency:Bf.meta(Fu),pricing_model:Ga.meta(Gt),nickname:z.string().nullable().default(null).meta(Gt),is_mock:z.boolean().default(false).meta(Gt),last_updated_from_stripe:Nt.meta(Gt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Yc,"x-revturbine-schema-exposure":Ds,...Mf});var vA=zn(Ma),yA=zn(Na),xA=zn(Ha),SA=zn(za),IA=zn(Ka);({"/api/plan-anchors":{get:v({operationId:"listPlanAnchors",requestParams:{query:D},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:q(hA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:v({operationId:"listPlans",requestParams:{query:D},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:q(Ma)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:v({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ma)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Ma}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:v({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:Ma}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:v({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:vA}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Ma}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:v({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:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:v({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:v({operationId:"listPlanVariationAnchors",requestParams:{query:D},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:q(gA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:v({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:D},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:q(Na)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:v({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Yn(Na)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Na}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:v({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:Na}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:v({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:yA}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Na}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:v({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:v({operationId:"listAddOnAnchors",requestParams:{query:D},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:q(_A)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:v({operationId:"listAddOns",requestParams:{query:D},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:q(Ha)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:v({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ha)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ha}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:v({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:Ha}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:v({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:xA}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ha}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:v({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:v({operationId:"listAddOnVariationAnchors",requestParams:{query:D},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:q(bA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:v({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:D},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:q(za)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:v({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Yn(za)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:za}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:v({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:za}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:v({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:SA}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:za}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:v({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:v({operationId:"listStripePrices",requestParams:{query:D},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:q(Ka)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:v({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ka)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:v({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:Ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:v({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:IA}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Ka}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:v({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:ve}=Ne,{Persisted:Hf,Transient:ci}=nt,{Internal:wv,External:Wr}=Ye,Av=ft(He.Playbook,{sdkInput:true}),TA=ft(He.Playbook,{inConfig:false,sdkInput:false}),zf=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":ci,"x-revturbine-schema-exposure":Wr}),cl=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Ov=z.enum($c).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),jv=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Kf=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Za=z.object({entitlement_id:z.string().min(1).meta(ve),entitlement_handle:z.string().min(1).meta(ve),status:Ov.meta(ve),limit:z.number().optional().meta(ve),used:z.number().optional().meta(ve),allocation:cl.optional().meta(ve),enforcement:Kf.optional().meta(ve),source:jv.optional().meta(ve),plan_id:z.string().optional().meta(ve),segment_id:z.string().optional().meta(ve),seat_type_id:z.string().optional().meta(ve),rule_id:z.string().optional().meta(ve)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr,...Ne.Operational});z.object({account:z.record(z.string(),Za).optional().meta(ve),instance:z.record(z.string(),Za).optional().meta(ve),user:z.record(z.string(),Za).optional().meta(ve)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr,...Ne.Operational});var Fv=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Lv=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Uu=z.object({kind:Lv.meta(ve),id:z.string().min(1).meta(ve)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Vv=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),$a=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...ve,readOnly:true}),name:Mt.meta(ve),handle:lt.meta(ve),customer_facing_description:z.string().max(500).optional().meta(ve),type:sl.meta(ve),unit:z.string().max(100).optional().meta(ve),period_scope:zf.optional().meta(ve),allocation:cl.optional().meta(ve),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(ve),sort_order:z.number().int().default(0).meta(ve),metadata:wt.meta(ve)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Hf,"x-revturbine-schema-exposure":Wr,...Av,...Rn()}),kA=mn("EntitlementAnchor"),_a=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...ve,readOnly:true}),handle:lt.meta({...ve,readOnly:true}),entitlement_id:z.string().min(1).meta(ve),targets:z.array(Uu).min(1).meta(ve),segment_ids:z.array(z.string()).default([]).meta(ve),visibility:Fv.default("public").meta(ve),period_scope:zf.optional().meta(ve),instance:z.string().max(100).optional().meta(ve),reset_period:Vv.optional().meta(ve),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ve),enforcement:Kf.optional().meta(ve),warning_threshold_percent:ga.optional().meta(ve),overage_price_ref:z.string().optional().meta(ve),grace_period_hours:z.number().int().min(0).optional().meta(ve),tier_value:z.string().optional().meta(ve),rate_value:z.number().optional().meta(ve),initial_grant:z.number().optional().meta(ve),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(ve),rollover_enabled:z.boolean().optional().meta(ve),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(ve),seat_type_id:z.string().optional().meta(ve),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(ve),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(ve),stripe_metered_price_id:z.string().optional().meta(ve),enabled:z.boolean().optional().meta(ve),allocation:cl.optional().meta(ve),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(ve),amount_cents:z.number().int().optional().meta(ve),currency:z.string().optional().meta(ve)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Hf,"x-revturbine-schema-exposure":wv,...Av,...ar()}),RA=mn("EntitlementRuleAnchor");_a.superRefine((n,e)=>{n.reset_period==="billing_period"&&n.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let t=n.allowance_value;(t==="unlimited"||typeof t=="number"&&t>0)&&n.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 wA=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),AA=z.object({code:wA.meta(ve),message:z.string().min(1).meta(ve),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(ve)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr}),Nf=_a.extend({warnings:z.array(AA).optional().meta(ve)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ci,"x-revturbine-schema-exposure":Wr});var Vu=K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.meta({...ve,readOnly:true}),rule_id:z.string().min(1).meta(ve),experiment_id:z.string().min(1).meta(ve),variant_name:z.string().min(1).max(200).meta(ve),is_control:z.boolean().default(false).meta(ve),override_fields:z.record(z.string(),z.unknown()).default({}).meta(ve)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Hf,"x-revturbine-schema-exposure":wv,...TA,...ar()}),OA=zn($a),jA=zn(_a);({"/api/entitlement-anchors":{get:v({operationId:"listEntitlementAnchors",requestParams:{query:D},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:q(kA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:v({operationId:"listEntitlementRuleAnchors",requestParams:{query:D},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:q(RA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:v({operationId:"listEntitlements",requestParams:{query:D},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:q($a)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:v({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Yn($a)}}},responses:{201:{description:"Created",content:{"application/json":{schema:$a}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:v({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:$a}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:v({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:OA}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$a}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:v({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:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:v({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:D},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:q(_a)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:v({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Yn(_a)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:v({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:jA}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:v({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:v({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Nf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:v({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:D},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:q(Vu)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:v({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Yn(Vu)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Vu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var{Unrestricted:Re}=Ne,{Persisted:Wc,Transient:ba}=nt,{External:Ei,Internal:LA}=Ye,Bv=ft(He.Playbook,{sdkInput:true}),VA=ft(He.Playbook,{inConfig:false,sdkInput:false}),UA=ft(He.Playbook,{inConfig:false,sdkInput:true}),BA=ft(He.Playbook,{inConfig:false,sdkInput:false,source:Yr.Runtime}),qA=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Gf=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei}),$f=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei}),qv=z.object({count:z.number().int().positive().meta(Re),period:$f.meta(Re)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei});z.object({surface_type:z.string().min(1).meta(Re),rules:z.array(qv).meta(Re),cooldown_ms:z.number().int().nonnegative().optional().meta(Re)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Wc,"x-revturbine-schema-exposure":Ei,...Ne.Operational,...UA});var Dv=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":ba,"x-revturbine-schema-exposure":Ei}),Ya=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),name:Mt.meta(Re),handle:lt.meta(Re),description:li.meta(Re),category:Gf.meta(Re),drag_order_in_category:z.number().int().default(0).meta(Re),surface_slot_id:z.string().optional().meta(Re),entitlement_id:z.string().optional().meta(Re),tier_threshold:z.string().optional().meta(Re),threshold_percent:ga.optional().meta(Re),trial_type:z.enum(["free","reverse"]).optional().meta(Re),trigger_type:z.string().optional().meta(Re),trial_progress_percent:z.number().min(0).max(100).optional().meta(Re),days_before_end:z.number().int().min(0).optional().meta(Re),qualifier:qA.optional().meta(Re),activation_window_start:z.string().datetime().optional().meta(Re),activation_window_end:z.string().datetime().optional().meta(Re),metadata:wt.meta(Re)}).meta({id:"Placement","x-revturbine-schema-persistence":Wc,"x-revturbine-schema-exposure":Ei,...Bv,...Rn()}),MA=mn("PlacementAnchor"),Mv=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei}),Nv=z.object({code:Mv.meta(Re),message:z.string().min(1).meta(Re),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Re)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei}),Uv=Ya.extend({warnings:z.array(Nv).optional().meta(Re)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei});var Hv=z.object({label:z.string().min(1).max(200).meta(Re),cta_path_type:Dv.meta(Re),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Re)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ba,"x-revturbine-schema-exposure":Ei}),dl=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Re,readOnly:true}),handle:lt.meta({...Re,readOnly:true}),placement_id:z.string().min(1).meta(Re),drag_order:z.number().int().default(0).meta(Re),target_plan_ids:z.array(z.string()).default([]).meta(Re),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Re),target_segments:z.array(z.string()).default([]).meta(Re),surface_slot_ids:z.array(z.string()).default([]).meta(Re),surface_template_id:z.string().min(1).meta(Re),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Re),cta_list:z.array(Hv).default([]).meta(Re),max_per_period:z.number().int().min(0).nullable().default(null).meta(Re),max_period_unit:$f.default("session").meta(Re),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Re),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Re),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Re),recommendation_plan_override:z.string().optional().meta(Re)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Wc,"x-revturbine-schema-exposure":Ei,...Bv,...ar()}),NA=mn("PlacementPayloadAnchor");K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.meta({...Re,readOnly:true}),placement_payload_id:z.string().min(1).meta(Re),experiment_id:z.string().min(1).meta(Re),variant_name:z.string().min(1).max(200).meta(Re),is_control:z.boolean().default(false).meta(Re),traffic_allocation_percent:z.number().min(0).max(100).meta(Re),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Re),status:z.enum(["active","paused","complete"]).default("active").meta(Re)}).meta({id:"PlacementVariant","x-revturbine-schema-persistence":Wc,"x-revturbine-schema-exposure":LA,...VA,...ar()});var zv=K.merge(X).merge(ae).merge(vt).merge(At).extend({surface_slot_handle:z.string().min(1).max(200).meta(Re),surface_type:Gc.meta(Re),surface_template_ids:z.array(z.string()).default([]).meta(Re),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Re),first_seen:z.string().datetime().meta({...Re,readOnly:true}),last_seen:z.string().datetime().meta({...Re,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Re),placement_count:z.number().int().min(0).default(0).meta({...Re,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Wc,"x-revturbine-schema-exposure":Ei,...BA,...Rn("surface_slot_handle")}),zA=zn(Ya),KA=zn(dl);({"/api/placement-anchors":{get:v({operationId:"listPlacementAnchors",requestParams:{query:D},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:q(MA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:v({operationId:"listPlacements",requestParams:{query:D},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:q(Ya)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:v({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Yn(Ya)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Uv}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:v({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:v({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:zA}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Uv}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:v({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:Ae}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:v({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:v({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Gf,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:v({operationId:"listPlacementPayloadAnchors",requestParams:{query:D},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:q(NA)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:v({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:D},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:q(dl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:v({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Yn(dl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:v({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:KA}}},responses:{200:{description:"Updated",content:{"application/json":{schema:dl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:v({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:v({operationId:"listSurfaceSlots",requestParams:{query:D},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:q(zv)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Er,Pii:ul}=Ne,{Persisted:Yf,Transient:Wf}=nt,{Internal:ml}=Ye,$A=ft(He.CustomerOperations,{sdkInput:false}),Kv=z.object({external_id:z.string().min(1).meta(ul),traits:z.record(z.string(),z.unknown()).default({}).meta(ul),plan_id:z.string().optional().meta(Er)}).meta({id:"Identity","x-revturbine-schema-persistence":Yf,"x-revturbine-schema-exposure":ml}),Bu=z.enum(["payment_failed","payment_method_missing"]),Zf=K.merge(X).merge(ae).extend({external_id:z.string().min(1).meta(ul),identity:Kv.meta(ul),stripe_customer_id:z.string().optional().meta(Er),current_plan_id:z.string().optional().meta(Er),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Er),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Er),billing_health_issues:z.array(Bu).default([]).meta(Er),metadata:wt.meta(Er)}).meta({id:"Customer","x-revturbine-schema-persistence":Yf,"x-revturbine-schema-exposure":ml}),Gv=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Wf,"x-revturbine-schema-exposure":ml}),$v=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Wf,"x-revturbine-schema-exposure":ml}),Zv=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Wf,"x-revturbine-schema-exposure":ml}),Ms=K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.meta({...Er,readOnly:true}),customer_id:z.string().min(1).meta(ul),customer_id_list:z.array(z.string()).optional().meta(ul),override_type:$v.meta(Er),target_id:z.string().min(1).meta(Er),value:z.record(z.string(),z.unknown()).default({}).meta(Er),duration_type:Gv.default("permanent").meta(Er),duration_value:z.string().optional().meta(Er),expiry_date:Nt.meta(Er),status:Zv.default("active").meta(Er),reason:z.string().max(500).optional().meta(Er),created_by:z.string().optional().meta(Er)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":Yf,"x-revturbine-schema-exposure":ml,...$A,...ar()});({"/api/customers":{get:v({operationId:"listCustomers",requestParams:{query:D},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:q(Zf)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:v({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:Zf}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:v({operationId:"listCustomerOverrides",requestParams:{query:D},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:q(Ms)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:v({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:v({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:Ms.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:v({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:v({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:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:v({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:Ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Le,Pii:Xc,Financial:Xf}=Ne,{Persisted:Yv,Transient:bs}=nt,{External:pl,Internal:Jc}=Ye,Qc=z.object({in_trial:z.boolean().meta(Le),trial_type:z.string().optional().meta(Le),plan_handle:z.string().optional().meta(Le),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Le),trial_limit_type:z.enum(["time","usage"]).optional().meta(Le),progress_percent:z.number().min(0).max(100).optional().meta(Le),day_number:z.number().int().min(0).optional().meta(Le),days_remaining:z.number().int().min(0).optional().meta(Le),usage_entitlement_handle:z.string().optional().meta(Le),usage_consumed:z.number().int().min(0).optional().meta(Le),usage_remaining:z.number().int().min(0).optional().meta(Le),usage_limit:z.number().int().min(0).optional().meta(Le)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":pl}),Jf=z.object({entitlement_handle:z.string().min(1).meta(Le),unit:z.string().min(1).meta(Le),amount:z.number().min(0).meta(Le),limit:z.number().min(0).optional().meta(Le),reset_date:z.string().optional().meta(Le)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":pl});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":pl});var Qf=z.object({id:z.string().min(1).meta(Le),name:z.string().min(1).meta(Le),price:z.string().optional().meta(Le),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Le)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":pl}),Wv=z.object({product_instance_id:z.string().min(1).meta(Le),user_id:z.string().min(1).meta(Xc),plan:Qf.optional().meta(Le),usage:z.record(z.string(),Jf).default({}).meta(Le),trial:Qc.optional().meta(Le),entitlements:z.record(z.string(),z.union([z.boolean(),Za])).default({}).meta(Le)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":pl}),Wa=K.merge(ae).merge(X).extend({user_id:z.string().min(1).meta(Xc),account_id:z.string().min(1).nullable().optional().meta(Xc),email:z.string().email().nullable().optional().meta(Xc),email_type:z.string().optional().meta(Le),plan:Qf.optional().meta(Le),usage:z.record(z.string(),Jf).default({}).meta(Le),trial:Qc.optional().meta(Le),payment_failed:z.boolean().optional().meta(Le),payment_at_risk:z.boolean().optional().meta(Le),tiers:z.record(z.string(),z.string()).optional().meta(Le),entitlements:z.record(z.string(),z.union([z.boolean(),Za])).default({}).meta(Le),instances:z.array(Wv).optional().meta(Le),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Xc),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Le,"x-revturbine-schema-persistence":bs}),derived_config_version:z.string().nullable().optional().meta(Le),context_hash:z.string().nullable().optional().meta(Le),derived_computed_at:Nt.meta(Le),activity_score:z.number().int().min(0).nullable().optional().meta(Le),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Le),experiments:z.record(z.string(),z.string()).optional().meta(Le)}).meta({id:"UserContext","x-revturbine-schema-persistence":Yv,"x-revturbine-schema-exposure":pl}),WA=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Le,...Ur}),days_remaining:z.number().int().min(0).optional().meta({...Le,...Ur}),ends_at:z.string().optional().meta({...Le,...Ur})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":Jc}),XA=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Le,...Ur}),failed_payment_reason:z.string().optional().meta({...Xf,...ju}),issues:z.array(Bu).optional().meta({...Xf,...ju}),provider_subscription_id:z.string().optional().meta({...Xf,...Vf})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":Jc}),JA=z.object({can_upgrade:z.boolean().optional().meta({...Le,...Ur}),can_manage_billing:z.boolean().optional().meta({...Le,...Ur})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":Jc}),QA=z.object({handle:z.string().min(1).optional().meta({...Le,...Ur}),name:z.string().min(1).optional().meta({...Le,...Ur})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":Jc});z.object({subject:z.string().min(1).meta({...Le,...Ur}),context_version:z.string().optional().meta({...Le,...Ur}),trial:WA.optional().meta({...Le,...Ur}),billing:XA.optional().meta({...Le,...Ur}),plan:QA.optional().meta({...Le,...Ur}),capabilities:JA.optional().meta({...Le,...Ur})}).meta({id:"ClientContext","x-revturbine-schema-persistence":bs,"x-revturbine-schema-exposure":Jc});({"/api/user-contexts":{get:v({operationId:"listUserContexts",requestParams:{query:D},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:q(Wa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:v({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:v({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Wa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:v({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:Wn}=Ne,{Persisted:eh,Transient:Xv}=nt,{Internal:ed}=Ye,nO=ft(He.Playbook,{sdkInput:true}),Jv=ft(He.Playbook,{inConfig:false,sdkInput:true}),Qv=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Xv,"x-revturbine-schema-exposure":ed}),ey=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Xv,"x-revturbine-schema-exposure":ed}),qu=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Wn,readOnly:true}),name:Mt.meta(Wn),handle:lt.optional().meta(Wn),category:Qv.default("custom").meta(Wn),visibility_toggle:z.boolean().default(true).meta(Wn),source_type:ey.default("system").meta(Wn),estimated_size:z.number().int().min(0).optional().meta(Wn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":ed,...Jv,...Rn()}),rO=mn("SegmentDimensionAnchor"),Du=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Wn,readOnly:true}),dimension_id:z.string().min(1).meta(Wn),name:Mt.meta(Wn),handle:lt.meta(Wn),description:li.meta(Wn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(Wn),used_in_count:z.number().int().min(0).default(0).meta({...Wn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":ed,...Jv,...Rn()}),iO=mn("SegmentValueAnchor");K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Wn,readOnly:true}),name:Mt.meta(Wn),handle:lt.meta(Wn),description:li.meta(Wn),rules:z.record(z.string(),z.unknown()).default({}).meta(Wn),experiment_id:z.string().min(1).optional().meta(Wn),is_active:z.boolean().default(true).meta(Wn),estimated_size:z.number().int().min(0).nullable().default(null).meta(Wn),metadata:wt.meta(Wn)}).meta({id:"Segment","x-revturbine-schema-persistence":eh,"x-revturbine-schema-exposure":ed,...nO,...Rn()});({"/api/segment-dimension-anchors":{get:v({operationId:"listSegmentDimensionAnchors",requestParams:{query:D},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:q(rO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:v({operationId:"listSegmentValueAnchors",requestParams:{query:D},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:q(iO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:v({operationId:"listSegmentDimensions",requestParams:{query:D},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:q(qu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:v({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:qu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:v({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:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:v({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:qu}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:v({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:D},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:q(Du)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:v({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:v({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:v({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:mt}=Ne,{Persisted:fl,Transient:ty}=nt,{External:va}=Ye,th=ft(He.Playbook,{sdkInput:true}),oO=ft(He.Playbook,{inConfig:false,sdkInput:false}),lO=ft(He.Playbook,{inConfig:false,sdkInput:true}),cO=ft(He.Playbook,{inConfig:false,sdkInput:true,source:Yr.CodeConstant});K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...mt,readOnly:true}),handle:lt.meta({...mt,readOnly:true}),name:Mt.meta(mt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(mt),subject:z.string().max(500).optional().meta(mt),body:z.string().meta(mt),template_variables:z.array(z.string()).default([]).meta(mt),metadata:wt.meta(mt)}).meta({id:"Message","x-revturbine-schema-persistence":fl,"x-revturbine-schema-exposure":va,...oO,...ar()});var Mu=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...mt,readOnly:true}),name:Mt.meta(mt),handle:lt.meta(mt),action_type:ol.meta(mt),target_url:z.string().optional().meta(mt),target_plan_id:z.string().optional().meta(mt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(mt),metadata:wt.meta(mt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":fl,"x-revturbine-schema-exposure":va,...th,...Rn()}),uO=mn("CtaPathAnchor"),ny=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":fl,"x-revturbine-schema-exposure":va,...cO}),ry=z.object({name:z.string().min(1),field_type:ny,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":fl,"x-revturbine-schema-exposure":va,...lO}),Nu=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...mt,readOnly:true}),name:Mt.meta(mt),handle:lt.meta(mt),surface_type:qf.meta(mt),field_definitions:z.array(ry).default([]).meta(mt),description:li.meta(mt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":fl,"x-revturbine-schema-exposure":va,...th,...Rn()}),mO=mn("SurfaceTemplateAnchor"),Hu=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...mt,readOnly:true}),name:Mt.meta(mt),handle:lt.meta(mt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(mt),variation_dimension_id:z.string().optional().meta(mt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(mt),notes:z.string().max(1e3).optional().meta(mt),used_in_count:z.number().int().min(0).default(0).meta({...mt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":fl,"x-revturbine-schema-exposure":va,...th,...Rn()}),pO=mn("MessageBlockRecordAnchor"),iy=z.object({segment_id:z.string().min(1).meta(mt),message_block_id:z.string().min(1).meta(mt),ui_path_id:z.string().optional().meta(mt),promotion_id:z.string().optional().meta(mt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":va});z.object({payload_id:z.string().min(1).meta(mt),tenant_id:z.string().min(1).meta(mt),name:Mt.meta(mt),surface_template_id:z.string().min(1).meta(mt),default_message_block_id:z.string().min(1).meta(mt),segment_content_map:z.array(iy).optional().meta(mt),ui_path_id:z.string().optional().meta(mt),promotion_id:z.string().optional().meta(mt),status:z.enum(["draft","active","inactive"]).meta(mt),created_at:z.string().datetime().optional().meta({...mt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...mt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ty,"x-revturbine-schema-exposure":va});({"/api/surface-template-anchors":{get:v({operationId:"listSurfaceTemplateAnchors",requestParams:{query:D},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:q(mO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:v({operationId:"listSurfaceTemplates",requestParams:{query:D},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:q(Nu)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:v({operationId:"listMessageBlockRecordAnchors",requestParams:{query:D},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:q(pO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:v({operationId:"listMessageBlocks",requestParams:{query:D},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:q(Hu)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:v({operationId:"listCtaPathAnchors",requestParams:{query:D},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:q(uO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:v({operationId:"listCtaPaths",requestParams:{query:D},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:q(Mu)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:hl,Pii:gO}=Ne,{Persisted:sy}=nt,{Internal:_O,External:bO}=Ye,vO=ft(He.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...hl,readOnly:true}),name:z.string().min(1).max(120).meta(hl),mode:z.enum(["light","dark","system"]).default("system").meta(hl),tokens:z.record(z.string(),z.string()).default({}).meta(hl)}).meta({id:"Theme","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":bO,...vO});var nh=K.merge(X).extend({user_id:z.string().min(1).meta(gO),scope:z.string().min(1).meta(hl),preferences:z.record(z.string(),z.unknown()).default({}).meta(hl)}).meta({id:"UiPreference","x-revturbine-schema-persistence":sy,"x-revturbine-schema-exposure":_O});({"/api/ui-preferences":{get:v({operationId:"listUiPreferences",requestParams:{query:D},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:q(nh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:v({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(zn(nh))}}},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:yt,Financial:vs}=Ne,{Persisted:ay,Transient:td}=nt,{External:nd,Internal:oy}=Ye,ly=z.object({month:z.string().meta(yt),cohort_size:z.number().int().min(0).meta(yt),retained:z.number().int().min(0).meta(yt),retention_rate:z.number().min(0).max(1).meta(yt),revenue_cents:z.number().int().min(0).meta(vs)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":td,"x-revturbine-schema-exposure":nd}),cy=z.object({step:z.string().meta(yt),label:z.string().meta(yt),count:z.number().int().min(0).meta(yt),conversion_rate:z.number().min(0).max(1).meta(yt),drop_off_rate:z.number().min(0).max(1).meta(yt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":td,"x-revturbine-schema-exposure":nd}),dy=z.object({placement_id:z.string().meta(yt),placement_name:z.string().meta(yt),impressions:z.number().int().min(0).meta(yt),clicks:z.number().int().min(0).meta(yt),conversions:z.number().int().min(0).meta(yt),ctr:z.number().min(0).meta(yt),conversion_rate:z.number().min(0).meta(yt),revenue_cents:z.number().int().min(0).meta(vs)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":td,"x-revturbine-schema-exposure":nd}),uy=z.object({date:z.string().meta(yt),mrr_cents:z.number().int().min(0).meta(vs),arr_cents:z.number().int().min(0).meta(vs),new_mrr_cents:z.number().int().min(0).meta(vs),churned_mrr_cents:z.number().int().min(0).meta(vs),expansion_mrr_cents:z.number().int().min(0).meta(vs),net_new_mrr_cents:z.number().int().meta(vs)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":td,"x-revturbine-schema-exposure":nd}),my=z.object({metric_key:z.string().min(1).meta(yt),label:z.string().meta(yt),current_value:z.number().meta(vs),previous_value:z.number().nullable().default(null).meta(vs),change_percent:z.number().nullable().default(null).meta(yt),period:z.string().meta(yt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(yt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":td,"x-revturbine-schema-exposure":nd}),rh=K.merge(X).merge(ae).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(yt),severity:al.meta(yt),resource_type:z.string().min(1).meta(yt),resource_id:z.string().min(1).meta(yt),summary:z.string().max(1e3).meta(yt),expected_value:z.unknown().optional().meta(yt),actual_value:z.unknown().optional().meta(yt),affected_customer_count:z.number().int().min(0).default(0).meta(yt),is_resolved:z.boolean().default(false).meta(yt),resolved_at:Nt.meta(yt),metadata:wt.meta(yt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":ay,"x-revturbine-schema-exposure":oy}),ih=K.merge(X).merge(ae).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(yt),severity:al.meta(yt),title:z.string().min(1).max(300).meta(yt),description:z.string().max(2e3).meta(yt),resource_type:z.string().optional().meta(yt),resource_id:z.string().optional().meta(yt),is_acknowledged:z.boolean().default(false).meta(yt),acknowledged_at:Nt.meta(yt),acknowledged_by:z.string().nullable().default(null).meta(yt),metadata:wt.meta(yt)}).meta({id:"Alert","x-revturbine-schema-persistence":ay,"x-revturbine-schema-exposure":oy});({"/api/analytics/kpis":{get:v({operationId:"listKpiAggregates",requestParams:{query:D},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:q(my)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:v({operationId:"listPlacementPerformance",requestParams:{query:D},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:q(dy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:v({operationId:"listRevenueMetrics",requestParams:{query:D},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:q(uy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:v({operationId:"listCohortMetrics",requestParams:{query:D},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:q(ly)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:v({operationId:"listFunnelSteps",requestParams:{query:D},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:q(cy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:v({operationId:"listDriftReports",requestParams:{query:D},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:q(rh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:v({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:rh}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:v({operationId:"listAlerts",requestParams:{query:D},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:q(ih)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:v({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:ih}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:O,Pii:gl}=Ne,{Persisted:py,Transient:qn}=nt,{Internal:ya,External:hr}=Ye,ah=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr}),fy=K.extend({event_type:z.string().min(1).meta(O),source:ah.default("sdk").meta(O),tenant_id:z.string().min(1).optional().meta(O),user_id:z.string().min(1).optional().meta(gl),session_id:z.string().min(1).optional().meta(gl),occurred_at:z.string().datetime().meta(O),request_id:z.string().min(1).meta(O),attributes:z.record(z.string(),z.unknown()).default({}).meta(O),payload:z.record(z.string(),z.unknown()).default({}).meta(O)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya}),hy=fy.extend({ingested_at:z.string().datetime().meta(O)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":ya});z.array(z.object({id:z.string().min(1).optional().meta(O),event_type:z.string().min(1).meta(O),occurred_at:z.string().datetime().optional().meta(O),tenant_id:z.string().min(1).optional().meta(O),user_id:z.string().min(1).optional().meta(gl),session_id:z.string().min(1).optional().meta(gl),attributes:z.record(z.string(),z.unknown()).optional().meta(O),payload:z.record(z.string(),z.unknown()).optional().meta(O),message:z.string().optional().meta(O),level:z.string().optional().meta(O),path:z.string().optional().meta(O)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya});var gy=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({user_id:z.string().min(1).meta(gl),placement_id:z.string().min(1).meta(O),treatment_id:z.string().min(1).optional().meta(O),surface_slot_id:z.string().min(1).optional().meta(O),surface_template_id:z.string().min(1).optional().meta(O),payload_id:z.string().min(1).optional().meta(O),interaction_type:gy.meta(O),interaction_at:z.string().datetime().optional().meta(O),message_block_handle:z.string().min(1).optional().meta(O),message_block_id:z.string().min(1).optional().meta(O),experiment_id:z.string().min(1).optional().meta(O),variant_key:z.string().min(1).optional().meta(O),test:z.boolean().optional().meta(O),metadata:z.record(z.string(),z.unknown()).optional().meta(O)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});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":qn,"x-revturbine-schema-exposure":hr});z.object({days_remaining:z.number().int().min(0).optional().meta(O)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({entitlement_handle:z.string().optional().meta(O),current_usage:z.number().min(0).optional().meta(O),usage_limit:z.number().min(0).optional().meta(O),usage_percent:z.number().min(0).max(100).optional().meta(O),threshold:z.number().min(0).optional().meta(O),balance:z.number().min(0).optional().meta(O),allocation:z.number().min(0).optional().meta(O),seats_used:z.number().int().min(0).optional().meta(O),seats_allowed:z.number().int().min(0).optional().meta(O)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({feature:z.string().min(1).meta(O)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({retry_count:z.number().int().min(0).optional().meta(O),renewal_date:z.string().optional().meta(O)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({event_type:z.string().min(1).meta(O),payload:z.record(z.string(),z.unknown()).default({}).meta(O)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});var by=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr}),vy=z.enum(["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({event_type:vy.meta(O),source:by.meta(O),payload:z.record(z.string(),z.unknown()).default({}).meta(O)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({q:z.string().optional().meta(O),source:ah.optional().meta(O),event_type:z.string().optional().meta(O),from:z.string().datetime().optional().meta(O),to:z.string().datetime().optional().meta(O),page:z.coerce.number().int().min(1).default(1).meta(O),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(O)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya});var yy=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya}),xy=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya}),zu=K.merge(X).merge(ae).extend({event_id:z.string().min(1).meta(O),event_type:z.string().min(1).meta(O),source:yy.meta(O),payload:z.record(z.string(),z.unknown()).default({}).meta(O),status:xy.default("processed").meta(O),processed_at:z.string().datetime().optional().meta(O),error_message:z.string().optional().meta(O)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":py,"x-revturbine-schema-exposure":ya});z.object({accepted:z.number().int().min(0).meta(O)}).meta({id:"null","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":ya});var OO=500,jO=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr}),Sy=z.object({environment_id:z.string().min(1).meta(O),user_id:z.string().min(1).meta(gl),account_id:z.string().min(1).meta(O),event_name:z.string().min(1).max(120).meta(O),event_ts:z.string().datetime().meta(O),properties:z.string().optional().meta(O),surface_slot_id:z.string().nullable().optional().meta(O),placement_id:z.string().nullable().optional().meta(O),payload_id:z.string().nullable().optional().meta(O),request_id:z.string().optional().meta(O),experiment_id:z.string().nullable().optional().meta(O),variant_key:z.string().nullable().optional().meta(O),tenant_id:z.string().optional().meta(O),event_id:z.string().nullable().optional().meta(O),origin:jO.nullable().optional().meta(O),playbook_version:z.string().nullable().optional().meta(O),decision_id:z.string().nullable().optional().meta(O),test:z.boolean().optional().meta(O)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({events:z.array(Sy).min(1).max(OO).meta(O)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});var FO=10,Py=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr}),Ty=z.object({plans:z.number().int().min(0).meta(O),entitlements:z.number().int().min(0).meta(O),entitlement_rules:z.number().int().min(0).meta(O),segments:z.number().int().min(0).meta(O),placements:z.number().int().min(0).meta(O),placement_payloads:z.number().int().min(0).meta(O),content_ui_paths:z.number().int().min(0).meta(O),surface_templates:z.number().int().min(0).meta(O)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr}),Cy=z.object({event_type:Py.meta(O),occurred_at:z.string().datetime().meta(O),request_id:z.string().min(1).optional().meta(O),config_hash_id:z.string().min(1).max(64).optional().meta(O),sdk_version:z.string().min(1).max(64).optional().meta(O),runtime_mode:z.string().min(1).max(64).optional().meta(O),schema_version:z.string().min(1).max(64).optional().meta(O),bundle_version:z.string().min(1).max(64).optional().meta(O),config_shape:Ty.optional().meta(O),message:z.string().max(500).optional().meta(O),reason:z.string().min(1).max(64).optional().meta(O),placement_handle:z.string().min(1).max(64).optional().meta(O),slot_handle:z.string().min(1).max(64).optional().meta(O),surface:z.string().min(1).max(64).optional().meta(O),plan_handle:z.string().min(1).max(64).optional().meta(O),entitlement_handle:z.string().min(1).max(64).optional().meta(O)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});z.object({events:z.array(Cy).min(1).max(FO).meta(O)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":qn,"x-revturbine-schema-exposure":hr});({"/api/events/search":{get:v({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:Uf(hy)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:v({operationId:"listWebhookEvents",requestParams:{query:D},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:q(zu)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:We}=Ne,{Persisted:id,Transient:sd}=nt,{Internal:ys}=Ye,Ry=ft(He.Playbook,{sdkInput:true}),Ey=ft(He.Playbook,{inConfig:false,sdkInput:true}),wy=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":sd,"x-revturbine-schema-exposure":ys}),oh=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":sd,"x-revturbine-schema-exposure":ys}),lh=z.object({name:Mt.meta(We),handle:lt.meta(We),plan_id:z.string().nullable().optional().meta(We),segment_id:z.string().nullable().optional().meta(We),trial_limit_type:oh.default("time").meta(We),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(We),grace_period_days:z.number().int().min(0).default(0).meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),require_payment_method:z.boolean().default(false).meta(We),auto_convert:z.boolean().default(true).meta(We),convert_to_plan_id:z.string().optional().meta(We),fallback_plan_id:z.string().optional().meta(We),limit_per_customer:z.number().int().min(1).default(1).meta(We),is_active:z.boolean().default(true).meta(We),metadata:wt.meta(We)}),Xa=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true})}).merge(lh).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":id,"x-revturbine-schema-exposure":ys,...Ry,...Rn()}),VO=mn("FreeTrialRuleAnchor"),Ay=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":sd,"x-revturbine-schema-exposure":ys}),ch=z.object({name:Mt.meta(We),handle:lt.meta(We),premium_plan_id:z.string().min(1).meta(We),fallback_plan_id:z.string().min(1).meta(We),segment_id:z.string().nullable().optional().meta(We),trial_limit_type:oh.default("time").meta(We),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),start_policy:Ay.default("signup").meta(We),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(We),entitlements_during_trial:z.array(z.string()).default([]).meta(We),is_active:z.boolean().default(true).meta(We),metadata:wt.meta(We)}),Ja=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true})}).merge(ch).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":id,"x-revturbine-schema-exposure":ys,...Ry,...Rn()}),UO=mn("ReverseTrialRuleAnchor"),dh=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":sd,"x-revturbine-schema-exposure":ys}),uh=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":sd,"x-revturbine-schema-exposure":ys}),Qa=K.merge(X).merge(ae).extend({trial_limit_policy:dh.default("1_per_lifetime").meta(We),eligibility_scope:uh.default("per_customer").meta(We)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":id,"x-revturbine-schema-exposure":ys,...Ey}),eo=K.merge(X).merge(ae).extend({trial_limit_policy:dh.default("1_per_lifetime").meta(We),eligibility_scope:uh.default("per_customer").meta(We)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":id,"x-revturbine-schema-exposure":ys,...Ey}),rd=K.merge(X).merge(ae).extend({customer_id:z.string().min(1).meta(We),rule_id:z.string().min(1).meta(We),rule_type:z.enum(["free_trial","reverse_trial"]).meta(We),plan_id:z.string().min(1).meta(We),status:wy.default("active").meta(We),started_at:z.string().datetime().meta({...We,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(We),trial_limit_type:oh.default("time").meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),converted_at:Nt.meta(We),cancelled_at:Nt.meta(We),metadata:wt.meta(We)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":id,"x-revturbine-schema-exposure":ys});({"/api/free-trial-rule-anchors":{get:v({operationId:"listFreeTrialRuleAnchors",requestParams:{query:D},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:q(VO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:v({operationId:"listFreeTrialRules",requestParams:{query:D},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:q(Xa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:v({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:Xa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:v({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Xa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:v({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:v({operationId:"listReverseTrialRuleAnchors",requestParams:{query:D},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:q(UO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:v({operationId:"listReverseTrialRules",requestParams:{query:D},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:q(Ja)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:v({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:Ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:v({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ja.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ja}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:v({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:v({operationId:"listFreeTrialSettings",requestParams:{query:D},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:q(Qa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:v({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:Qa}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:v({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Qa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Qa}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:v({operationId:"listReverseTrialSettings",requestParams:{query:D},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:q(eo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:v({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:eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:v({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:eo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:v({operationId:"listTrialInstances",requestParams:{query:D},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:q(rd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:v({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:v({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:v({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:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:Pn}=Ne,{Persisted:ph,Transient:Oy}=nt,{Internal:ad}=Ye,jy=ft(He.Playbook,{inConfig:false,sdkInput:true}),Fy=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Oy,"x-revturbine-schema-exposure":ad}),Ly=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Oy,"x-revturbine-schema-exposure":ad}),Vy=z.object({variant_id:z.string().min(1),name:Mt,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":ph,"x-revturbine-schema-exposure":ad,...jy}),xs=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...Pn,readOnly:true}),name:Mt.meta(Pn),handle:lt.meta(Pn),description:z.string().max(1e3).optional().meta(Pn),experiment_type:Ly.meta(Pn),status:Fy.default("draft").meta(Pn),target_resource_id:z.string().optional().meta(Pn),target_segment_ids:z.array(z.string()).default([]).meta(Pn),variants:z.array(Vy).min(2).meta(Pn),primary_metric:z.string().min(1).meta(Pn),metric_threshold:z.number().default(.05).meta(Pn),secondary_metrics:z.array(z.string()).default([]).meta(Pn),traffic_allocation:z.number().min(0).max(1).default(1).meta(Pn),started_at:Nt.meta(Pn),ended_at:Nt.meta(Pn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(Pn),winning_variant_id:z.string().nullable().default(null).meta(Pn),metadata:wt.meta(Pn)}).meta({id:"Experiment","x-revturbine-schema-persistence":ph,"x-revturbine-schema-exposure":ad,...jy,...Rn()}),qO=mn("ExperimentAnchor"),Uy=al,mh=K.merge(X).merge(ae).extend({experiment_id:z.string().optional().meta(Pn),resource_type:z.string().min(1).meta(Pn),resource_id:z.string().min(1).meta(Pn),severity:Uy.default("info").meta(Pn),title:z.string().min(1).max(300).meta(Pn),description:z.string().max(2e3).meta(Pn),suggested_action:z.string().max(1e3).optional().meta(Pn),estimated_impact:z.number().optional().meta(Pn),is_dismissed:z.boolean().default(false).meta(Pn),metadata:wt.meta(Pn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":ph,"x-revturbine-schema-exposure":ad});({"/api/experiment-anchors":{get:v({operationId:"listExperimentAnchors",requestParams:{query:D},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:q(qO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:v({operationId:"listExperiments",requestParams:{query:D},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:q(xs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:v({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:v({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:xs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:v({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:v({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:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:v({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:v({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:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:v({operationId:"listOptimizationSuggestions",requestParams:{query:D},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:q(mh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:v({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:mh}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:vr,Financial:By}=Ne,{Persisted:MO,Transient:qy}=nt,{Internal:fh}=Ye,NO=ft(He.Playbook,{sdkInput:true}),Dy=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":qy,"x-revturbine-schema-exposure":fh}),My=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":qy,"x-revturbine-schema-exposure":fh}),Ns=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...vr,readOnly:true}),name:Mt.meta(vr),handle:lt.meta(vr),description:z.string().max(1e3).optional().meta(vr),rt_status:Dy.default("draft").meta(vr),discount_type:My.meta(vr),discount_value:z.number().min(0).meta(By),currency:z.string().length(3).default("USD").meta(By),applicable_plan_ids:z.array(z.string()).default([]).meta(vr),applicable_addon_ids:z.array(z.string()).default([]).meta(vr),target_segment_ids:z.array(z.string()).default([]).meta(vr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(vr),current_redemptions:z.number().int().min(0).default(0).meta({...vr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(vr),starts_at:Nt.meta(vr),ends_at:Nt.meta(vr),stripe_coupon_id:z.string().nullable().default(null).meta(vr),stripe_promotion_code_id:z.string().nullable().default(null).meta(vr),auto_sync_stripe:z.boolean().default(false).meta(vr),metadata:wt.meta(vr)}).meta({id:"Promotion","x-revturbine-schema-persistence":MO,"x-revturbine-schema-exposure":fh,...NO,...Rn()}),HO=mn("PromotionAnchor");({"/api/promotion-anchors":{get:v({operationId:"listPromotionAnchors",requestParams:{query:D},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:q(HO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:v({operationId:"listPromotions",requestParams:{query:D},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:q(Ns)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:v({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:v({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Ns.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:v({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:v({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:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:v({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ns}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:jn,Pii:hh}=Ne,{Persisted:gh}=nt,{Internal:_h}=Ye,Ny=K.merge(X).merge(ae).extend({customer_id:z.string().min(1).meta(hh),placement_id:z.string().min(1).meta(jn),payload_id:z.string().nullable().default(null).meta(jn),variant_id:z.string().nullable().default(null).meta(jn),surface_type:z.string().meta(jn),presented_at:z.string().datetime().meta({...jn,readOnly:true}),dismissed_at:Nt.meta(jn),cta_clicked_at:Nt.meta(jn),cta_action_type:z.string().nullable().default(null).meta(jn),converted:z.boolean().default(false).meta(jn),session_id:z.string().optional().meta(jn),metadata:wt.meta(jn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":gh,"x-revturbine-schema-exposure":_h}),Hy=K.merge(X).merge(ae).extend({customer_id:z.string().min(1).meta(hh),placement_id:z.string().min(1).meta(jn),decision:z.enum(["show","suppress","defer"]).meta(jn),reason:z.string().max(500).meta(jn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(jn),experiment_id:z.string().nullable().default(null).meta(jn),variant_id:z.string().nullable().default(null).meta(jn),latency_ms:z.number().min(0).optional().meta(jn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":gh,"x-revturbine-schema-exposure":_h}),zy=K.merge(X).merge(ae).extend({customer_id:z.string().min(1).meta(hh),entitlement_handle:z.string().min(1).meta(jn),entitlement_type:z.string().meta(jn),result:z.enum(["granted","denied","limited","metered"]).meta(jn),current_usage:z.number().nullable().default(null).meta(jn),limit:z.number().nullable().default(null).meta(jn),source:z.enum(["plan","addon","override","trial"]).meta(jn),source_id:z.string().min(1).meta(jn),latency_ms:z.number().min(0).optional().meta(jn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":gh,"x-revturbine-schema-exposure":_h});({"/api/presentation-records":{get:v({operationId:"listPresentationRecords",requestParams:{query:D},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:q(Ny)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:v({operationId:"listDecisionLogs",requestParams:{query:D},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:q(Hy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:v({operationId:"listEntitlementEvalLogs",requestParams:{query:D},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:q(zy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:g}=Ne,{Persisted:Sl,Transient:et}=nt,{Internal:wi,External:Ot}=Ye,xt=ft(He.Playbook,{sdkInput:true}),_l=ft(He.Playbook,{sdkInput:false}),xa=ft(He.Playbook,{inConfig:false,sdkInput:false}),Ky=ft(He.Playbook,{inConfig:false,sdkInput:true}),od=ft(He.Playbook,{inConfig:false,sdkInput:true,source:Yr.CodeConstant}),bh=ft(He.Playbook,{inConfig:false,sdkInput:true,source:Yr.Runtime}),vh=ft(He.Playbook,{inConfig:false,sdkInput:false,source:Yr.Runtime}),GO=ft(He.Billing,{sdkInput:false}),$O=ft(He.Metering,{sdkInput:false}),ZO=ft(He.Branding,{inConfig:true,sdkInput:true}),YO=ft(He.Branding,{sdkInput:false}),Gy="1.0.0",bl=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),name:Mt.meta(g),handle:lt.meta(g),description:li.meta(g),is_default:z.boolean().default(false).meta(g),entitlement_ids:z.array(z.string()).default([]).meta(g),metadata:wt.meta(g)}).meta({id:"SeatType","x-revturbine-schema-persistence":Sl,"x-revturbine-schema-exposure":wi,...xa,...Rn()}),WO=mn("SeatTypeAnchor"),vl=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:lt.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:wt.meta(g)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Sl,"x-revturbine-schema-exposure":wi,...xa,...Rn()}),XO=mn("PersonalizationTokenAnchor"),$y=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":wi}),Ku=K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.meta({...g,readOnly:true}),stripe_account_id:z.string().min(1).meta(g),live_mode:z.boolean().default(false).meta(g),onboarding_state:$y.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:wt.meta(g)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Sl,"x-revturbine-schema-exposure":wi,...GO,...ar()});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":et,"x-revturbine-schema-exposure":Ot,...YO});var yl=K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.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:wt.meta(g)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Sl,"x-revturbine-schema-exposure":wi,...$O,...ar()}),yh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":wi}),xl=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:lt.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:yh.default("warn").meta(g),hard_limit_action:yh.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":Sl,"x-revturbine-schema-exposure":wi,...Ky,...ar()}),QO=mn("UsageEnforcementSettingsAnchor"),Zy=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":et,"x-revturbine-schema-exposure":wi}),Yy=z.object({id:z.string().min(1).meta(g),group:z.array(Zy).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":et,"x-revturbine-schema-exposure":wi}),Wy=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":wi}),Sh=z.object({capRules:z.array(Yy).default([]).meta(g),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(g),remindLaterMinutes:z.number().int().min(0).default(60).meta(g),testMode:Wy.default("off").meta(g)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":wi}),Gu=K.merge(X).merge(ae).merge(vt).merge(At).extend({anchor_id:z.string().min(1).meta({...g,readOnly:true}),handle:lt.meta({...g,readOnly:true}),global_frequency_cap:Sh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(g)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Sl,"x-revturbine-schema-exposure":wi,...Ky,...ar()}),e1=mn("PlacementSettingsAnchor"),Ih=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":et,"x-revturbine-schema-exposure":Ot}),Ph=z.object({name:z.string().min(1).meta(g),handle:z.string().min(1).meta(g),predicates:z.array(Ih).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":et,"x-revturbine-schema-exposure":Ot,...xt}),Xy=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:_s.default("public").meta(g)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),Jy=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:_s.default("public").meta(g)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,..._l}),Qy=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:Ga.meta(g),visibility:_s.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:ll.meta(g)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xa}),ex=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:Ga.meta(g),visibility:_s.default("public").meta(g),stripe_price_id:z.string().nullable().default(null).meta(g),price_source:ll.meta(g)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xa}),tx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),nx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),rx=z.object({handle:z.string().min(1).meta(g),global_frequency_cap:Sh.nullable().default(null).meta(g),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(g),suppress_for_paid:z.boolean().default(false).meta(g),suppress_for_trial:z.boolean().default(false).meta(g),allow_stacking:z.boolean().default(false).meta(g),priority_collision_strategy:z.string().nullable().default(null).meta(g)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),ix=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":et,"x-revturbine-schema-exposure":Ot,...xt}),sx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),ax=z.object({unique_handle:z.string().min(1).meta(g),name:z.string().min(1).meta(g),type:sl.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":et,"x-revturbine-schema-exposure":Ot,...xt}),ox=z.object({id:z.string().min(1).meta(g),entitlement_id:z.string().min(1).meta(g),targets:z.array(Uu).min(1).meta(g),segment_ids:z.array(z.string()).default([]).meta(g),kind:sl.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}),..._a.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:cl.optional().meta(g)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),lx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),cx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),dx=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":et,"x-revturbine-schema-exposure":Ot}),ux=z.object({id:z.string().min(1).meta(g),surface_type:z.string().meta(g),fields:z.array(dx).optional().meta(g)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),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":et,"x-revturbine-schema-exposure":Ot}),mx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),px=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":et,"x-revturbine-schema-exposure":Ot,...xt}),fx=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":et,"x-revturbine-schema-exposure":Ot,...xt}),xh=z.object({header:z.string().optional().meta(g),body:z.string().optional().meta(g),cta_label:z.string().optional().meta(g),secondary_cta_label:z.string().optional().meta(g)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot}),hx=z.object({block_id:z.string().min(1).meta(g),tenant_id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),surface_template_id:z.string().optional().meta(g),default_content:xh.meta(g),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:xh})).optional().meta(g),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(g),tokens_used:z.array(z.string()).optional().meta(g),status:z.enum(["draft","active","archived"]).meta(g),created_at:z.string().datetime().meta({...g,readOnly:true}),updated_at:z.string().datetime().meta({...g,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),gx=z.object({label:z.string().meta(g),path:ol.meta(g),config:z.record(z.string(),z.string()).optional().meta(g)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot}),Ch=z.object({template_id:z.string().min(1).meta(g),fields:z.record(z.string(),z.string()).meta(g),ctas:z.array(gx).meta(g)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot}),kh=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":et,"x-revturbine-schema-exposure":Ot}),_x=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":et,"x-revturbine-schema-exposure":Ot}),Rh=z.object({max_per_period:_x.optional().meta(g),cooldown_days:z.number().int().min(0).optional().meta(g)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot}),bx=z.object({id:z.string().min(1).meta(g),target:kh.meta(g),surfaces:z.array(Ch).meta(g),caps:Rh.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":et,"x-revturbine-schema-exposure":Ot}),vx=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:ga}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ga}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ga}),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":et,"x-revturbine-schema-exposure":Ot}),yx=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot}),Eh=z.object({id:z.string().min(1).meta(g),name:z.string().min(1).meta(g),category:yx.meta(g),trigger:vx.meta(g),payloads:z.array(bx).meta(g),order:z.number().int().min(0).meta(g)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),xx=z.object({payload_id:z.string().min(1).meta(g),placement_id:z.string().min(1).meta(g),target:kh.meta(g),caps:Rh.optional().meta(g),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(g),created_at:z.string().meta({...g,readOnly:true}),updated_at:z.string().datetime().optional().meta({...g,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(g),surfaces:z.array(Ch).optional().meta(g),surface_slot_ids:z.array(z.string()).optional().meta(g),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(g)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),t1=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":et,"x-revturbine-schema-exposure":Ot,...xt}),n1=K.merge(lh).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xa}),r1=K.merge(ch).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xa}),Sx=z.object({plans:z.array(Xy).meta({...g,...xt}),addons:z.array(Jy).optional().meta({...g,..._l}),entitlements:z.array(ax).meta({...g,...xt}),entitlement_rules:z.array(ox).meta({...g,...xt}),segments:z.array(Ph).meta({...g,...xt}),content_ui_paths:z.array(mx).meta({...g,...xt}),slot_configs:z.array(lx).optional().meta({...g,...xt,...Zc({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,...xt,...Zc({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,...ZO,...Zc({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(cx).optional().meta({...g,...xt}),message_blocks:z.array(hx).optional().meta({...g,...xt}),placement_payloads:z.array(xx).optional().meta({...g,...xt}),placements:z.array(Eh).optional().meta({...g,...xt}),content_promotions:z.array(px).optional().meta({...g,...xt}),personalization_tokens:z.array(fx).optional().meta({...g,...xt}),surface_templates:z.array(ux).optional().meta({...g,...xt}),free_trial_rules:z.array(n1).optional().meta({...g,..._l}),reverse_trial_rules:z.array(r1).optional().meta({...g,..._l}),plan_variations:z.array(Qy).optional().meta({...g,..._l}),addon_variations:z.array(ex).optional().meta({...g,..._l}),extension_rules:z.array(t1).optional().meta({...g,...xt}),seat_types:z.array(tx).optional().meta({...g,...xt}),enforcement_defaults:z.array(nx).optional().meta({...g,...xt}),placement_settings:z.array(rx).optional().meta({...g,...xt}),segment_dimensions:z.array(ix).optional().meta({...g,...xt}),meter_bindings:z.array(sx).optional().meta({...g,...xt}),experiments:z.array(z.unknown()).max(0).optional().meta({...g,...xa}),signal_catalog:z.object({}).strict().optional().meta({...g,...xa})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt}),Ix=z.object({artifact_type:z.literal("playbook").meta({...g,...od,readOnly:true}),format_version:z.literal(Gy).meta({...g,...od,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...g,...od}),playbook_version_id:z.string().nullable().default(null).meta({...g,...bh,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),environment_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),project_id:z.string().min(1).optional().meta({...g,...vh,readOnly:true}),exported_at:z.string().datetime().optional().meta({...g,...bh,readOnly:true}),schema_version:z.string().min(1).optional().meta({...g,...od,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...g,...od,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...bh}),$u=Ix.extend(Sx.shape).meta({"x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt});function i1(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Px(n){if(!i1(n))return n;let e={...n};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(Px,$u).meta({id:"Playbook","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt});z.preprocess(Px,$u.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ot,...xt});({"/api/seat-type-anchors":{get:v({operationId:"listSeatTypeAnchors",requestParams:{query:D},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:q(WO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:v({operationId:"listSeatTypes",requestParams:{query:D},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:q(bl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:v({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(bl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:v({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",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:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:v({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:v({operationId:"listPersonalizationTokenAnchors",requestParams:{query:D},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:q(XO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:v({operationId:"listPersonalizationTokens",requestParams:{query:D},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:q(vl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:v({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(vl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:v({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",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:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:v({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:v({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:zn(Ku)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ku}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:v({operationId:"listMeteringConfigs",requestParams:{query:D},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:q(yl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:v({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(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:v({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:v({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:v({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:D},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:q(QO)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:v({operationId:"listUsageEnforcementSettings",requestParams:{query:D},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:q(xl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:v({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Yn(xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:v({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:v({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:v({operationId:"listPlacementSettingsAnchors",requestParams:{query:D},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:q(e1)}}},default:{description:"Error response",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:v({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:zn(Gu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Gu}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:Hs}=Ne,{Persisted:Tx}=nt,{Internal:Cx}=Ye,kx=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Tx,"x-revturbine-schema-exposure":Cx}),wh=K.merge(X).merge(ae).extend({action:kx.meta(Hs),resource_type:z.string().min(1).max(100).meta(Hs),resource_id:z.string().min(1).meta(Hs),resource_name:z.string().max(200).optional().meta(Hs),actor_id:z.string().min(1).meta(Hs),actor_email:z.string().email().optional().meta(Hs),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(Hs),summary:z.string().max(1e3).optional().meta(Hs),metadata:wt.meta(Hs)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Tx,"x-revturbine-schema-exposure":Cx});({"/api/changelog":{get:v({operationId:"listChangeLogEntries",requestParams:{query:D},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:q(wh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:v({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:wh}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Zu}=Ne,{Persisted:c1,Transient:d1}=nt,{Internal:Rx}=Ye,Ex=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":d1,"x-revturbine-schema-exposure":Rx}),Ks=K.merge(X).extend({name:Mt.meta(Zu),handle:lt.meta(Zu),status:Ex.default("active").meta(Zu),metadata:wt.meta(Zu)}).meta({id:"Tenant","x-revturbine-schema-persistence":c1,"x-revturbine-schema-exposure":Rx});({"/api/tenants":{get:v({operationId:"listTenants",requestParams:{query:D},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:q(Ks)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:v({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:v({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:Ks.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:v({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:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:v({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:Ai}=Ne,{Persisted:m1,Transient:wx}=nt,{Internal:Ah}=Ye,Ax=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":wx,"x-revturbine-schema-exposure":Ah}),to=K.merge(X).merge(ae).extend({name:Mt.meta(Ai),handle:lt.meta(Ai),description:li.meta(Ai),is_production:z.boolean().default(false).meta({...Ai,readOnly:true}),status:Ax.default("active").meta(Ai),cloned_from_environment_id:z.string().nullable().default(null).meta({...Ai,readOnly:true}),cloned_at:Nt.meta({...Ai,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...Ai,readOnly:true}),requires_approval:z.boolean().default(false).meta(Ai),auto_deploy_on_approval:z.boolean().default(false).meta(Ai),created_by:z.string().optional().meta(Ai),metadata:wt.meta(Ai)}).meta({id:"Environment","x-revturbine-schema-persistence":m1,"x-revturbine-schema-exposure":Ah}),Ox=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":wx,"x-revturbine-schema-exposure":Ah});({"/api/environments":{get:v({operationId:"listEnvironments",requestParams:{query:D},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:q(to)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:v({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:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:v({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:v({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:v({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:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:v({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Ox}}},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:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Me,Pii:ld}=Ne,{Transient:Ss,Persisted:f1}=nt,{External:Gi}=Ye,jx=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi});z.object({superseded_output_id:z.string().min(1).meta(Me),superseded_by:z.string().min(1).meta(Me),reason:jx.meta(Me)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":f1,"x-revturbine-schema-exposure":Gi,...Ne.Operational});var Fx=z.enum($c).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi}),Oh=z.object({output_id:z.string().meta(Me),category:z.string().meta(Me),surface:z.object({template:z.string().optional().meta(Me),type:Gc.meta(Me),slot_id:z.string().optional().meta(Me)}).meta(Me),content:z.record(z.string(),z.unknown()).meta(Me),promotion:z.record(z.string(),z.unknown()).optional().meta(Me),cta_path:z.record(z.string(),z.unknown()).optional().meta(Me),ui_path:z.record(z.string(),z.unknown()).optional().meta(Me),rule_id:z.string().meta(Me),decision_id:z.string().meta(Me),config_version:z.string().meta(Me),present_upsell:z.boolean().meta(Me),experiment_id:z.string().optional().meta(Me),variant_key:z.string().optional().meta(Me),experiment_version_id:z.string().optional().meta(Me)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi}),Lx=z.object({status:Fx.meta(Me),allowed:z.boolean().meta(Me),reason:z.string().optional().meta(Me),current_tier:z.string().optional().meta(Me),limit:z.number().optional().meta(Me),used:z.number().optional().meta(Me),remaining:z.number().optional().meta(Me),placement:Oh.optional().meta(Me)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi});z.object({id:z.string().meta(Me),name:z.string().optional().meta(Me),discount:z.string().optional().meta(Me),type:z.string().optional().meta(Me),status:z.string().optional().meta(Me)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi});var Vx=z.object({id:z.string().meta(ld),anonymous_id:z.string().optional().meta(Me),traits:z.record(z.string(),z.unknown()).optional().meta(ld)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi}),Ux=z.object({slot_id:z.string().optional().meta(Me),entitlement_handle:z.string().optional().meta(Me),plan_handle:z.string().optional().meta(Me),placement_handle:z.string().optional().meta(Me),visible:z.boolean().meta(Me),output:Oh.optional().meta(Me),reason_codes:z.array(z.string()).optional().meta(Me)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi}),Bx=Lx,qx=Qc.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi}),Dx=z.object({segments:z.array(z.string()).optional().meta(Me),traits:z.record(z.string(),z.unknown()).optional().meta(ld),usage_balances:z.record(z.string(),z.number()).optional().meta(Me)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi});z.object({version:z.literal("1.0.0").meta(Me),request_id:z.string().meta(Me),tenant_id:z.string().meta(Me),evaluated_at:z.string().datetime().meta(Me),ttl_seconds:z.number().int().min(0).max(86400).meta(Me),user:Vx.meta(ld),decisions:z.array(Ux).meta(Me),entitlements:z.record(z.string(),Bx).optional().meta(Me),theme:z.record(z.string(),z.unknown()).optional().meta(Me),trial_status:qx.optional().meta(Me),user_context:Dx.optional().meta(ld)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":Ss,"x-revturbine-schema-exposure":Gi});var {Unrestricted:Wt}=Ne,{Persisted:b1,Transient:Yu}=nt,{Internal:cd}=Ye,Mx=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":cd}),Il=K.merge(X).merge(ae).extend({environment_id:z.string().min(1).meta(Wt),name:Mt.meta(Wt),description:z.string().max(2e3).optional().meta(Wt),status:Mx.default("draft").meta(Wt),labels:z.array(z.string()).default([]).meta(Wt),created_by:z.string().min(1).meta(Wt),submitted_by:z.string().nullable().default(null).meta({...Wt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Wt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Wt,readOnly:true}),submitted_at:Nt.meta({...Wt,readOnly:true}),reviewed_at:Nt.meta({...Wt,readOnly:true}),deployed_at:Nt.meta({...Wt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Wt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Wt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Wt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Wt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Wt),review_notes:z.string().max(2e3).optional().meta(Wt),rejection_reason:z.string().max(2e3).optional().meta(Wt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Wt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Wt,readOnly:true}),metadata:wt.meta(Wt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":b1,"x-revturbine-schema-exposure":cd}),jh=z.object({handle:z.string().meta(Wt),resource_type:z.string().meta(Wt),resource_name:z.string().optional().meta(Wt),action:z.enum(["create","update","delete"]).meta(Wt),has_conflict:z.boolean().meta(Wt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":cd}),Nx=z.object({playbook_version_id:z.string().meta(Wt),entries:z.array(jh).meta(Wt),total_entries:z.number().int().min(0).meta(Wt),total_conflicts:z.number().int().min(0).meta(Wt),deployable:z.boolean().meta(Wt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":cd}),Hx=z.object({playbook_version_id:z.string().meta(Wt),deployed_count:z.number().int().min(0).meta(Wt),superseded_count:z.number().int().min(0).meta(Wt),skipped_conflicts:z.number().int().min(0).meta(Wt),deployed_at:z.string().datetime().meta(Wt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":cd});({"/api/playbook-versions/{playbookVersionId}/submit":{post:v({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:Il}}},default:{description:"Error",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:v({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:Il}}},default:{description:"Error",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:v({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:Il}}},default:{description:"Error",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:v({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:Hx}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:v({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:Il}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:v({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:Nx}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:v({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:D},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:q(jh)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:v({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:Il}}},default:{description:"Error",content:{"application/json":{schema:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:v({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:Ae}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:jt,Pii:y1}=Ne,{Persisted:$i}=nt,{Internal:Zi}=Ye,zx=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),dd=K.merge(X).merge(ae).extend({name:Mt.meta(jt),key_hash:z.string().min(1).meta({...y1,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...jt,readOnly:true}),key_last4:z.string().length(4).meta({...jt,readOnly:true}),status:zx.default("active").meta(jt),last_used_at:Nt.meta({...jt,readOnly:true}),expires_at:Nt.meta(jt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Kx=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Sa=K.merge(X).merge(ae).extend({key:z.string().min(1).max(100).meta(jt),value_type:Kx.default("boolean").meta(jt),value:z.string().max(4e3).default("false").meta(jt),description:li.meta(jt),enabled:z.boolean().default(true).meta(jt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Wu=K.merge(X).merge(ae).extend({workspace_name:z.string().min(1).max(200).meta(jt),support_email:z.string().email().nullable().default(null).meta(jt),timezone:z.string().max(50).default("UTC").meta(jt),default_currency:z.string().length(3).default("USD").meta(jt),logo_url:z.string().url().nullable().default(null).meta(jt),activity_window_days:z.number().int().min(1).default(30).meta(jt),activity_high_min:z.number().int().min(1).default(10).meta(jt),activity_medium_min:z.number().int().min(1).default(3).meta(jt),activity_low_min:z.number().int().min(1).default(1).meta(jt)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Xu=K.merge(X).merge(ae).extend({server_url:z.string().url().max(500).meta(jt),api_token_hint:z.string().max(50).nullable().default(null).meta(jt),allow_write_actions:z.boolean().default(false).meta(jt),enabled_tools:z.array(z.string().max(100)).default([]).meta(jt),enabled:z.boolean().default(false).meta(jt)}).meta({id:"McpConfig","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),ud=K.merge(X).merge(ae).extend({step_key:z.string().min(1).max(100).meta(jt),label:z.string().min(1).max(200).meta(jt),done:z.boolean().default(false).meta(jt),completed_at:Nt.meta({...jt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Gx=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),$x=K.merge(ae).extend({environment_id:z.string().min(1).default("production").meta(jt),actor_type:Gx.meta(jt),actor_id:z.string().nullable().default(null).meta(jt),action:z.string().min(1).max(120).meta(jt),object_type:z.string().max(120).nullable().default(null).meta(jt),object_id:z.string().max(200).nullable().default(null).meta(jt),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(jt),occurred_at:z.string().datetime().meta({...jt,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),Zx=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi}),md=K.merge(X).merge(ae).merge(vt).merge(At).extend({handle:lt.meta({...jt,readOnly:true}),identifier:z.string().min(1).max(200).meta(jt),identifier_type:Zx.default("user_id").meta(jt),note:z.string().max(500).nullable().default(null).meta(jt),added_by:z.string().meta(jt)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Zi,...ar()});({"/api/settings/api-keys":{get:v({operationId:"listApiKeys",requestParams:{query:D},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:q(dd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:v({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(dd)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:dd}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:v({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:dd}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:v({operationId:"listFeatureFlags",requestParams:{query:D},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:q(Sa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:v({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(Sa)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Sa}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:v({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:Sa}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:v({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:zn(Sa).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Sa}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:v({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:Sa}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:v({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:zn(Wu).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Wu}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:v({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:zn(Xu).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Xu}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:v({operationId:"listOnboardingSteps",requestParams:{query:D},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:q(ud)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:v({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:ud}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:v({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:zn(ud).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:ud}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:v({operationId:"listAuditEvents",requestParams:{query:D},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:q($x)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:v({operationId:"listPlacementTestUsers",requestParams:{query:D},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:q(md)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:v({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Yn(md)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:md}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:v({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:md}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:ue,Pii:Dr}=Ne,{Persisted:Jr,Transient:Fh}=nt,{Internal:yr}=Ye,Yx=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.merge(X).extend({name:Mt.meta(ue),email:z.string().email().meta(Dr),email_verified:z.boolean().default(false).meta(ue),image:z.string().url().nullable().default(null).meta(Dr),role:Yx.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:Nt.meta({...ue,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ue,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.merge(X).extend({expires_at:z.string().datetime().meta(ue),token:z.string().min(1).meta({...Dr,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Dr),user_agent:z.string().nullable().default(null).meta(Dr),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":Jr,"x-revturbine-schema-exposure":yr});K.merge(X).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({...Dr,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Dr,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Dr,readOnly:true}),access_token_expires_at:Nt.meta({...ue,readOnly:true}),refresh_token_expires_at:Nt.meta({...ue,readOnly:true}),scope:z.string().nullable().default(null).meta(ue),password:z.string().nullable().default(null).meta({...Dr,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.merge(X).extend({identifier:z.string().min(1).meta(Dr),value:z.string().min(1).meta({...Dr,readOnly:true}),expires_at:z.string().datetime().meta(ue)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.extend({secret:z.string().min(1).meta({...Dr,readOnly:true}),backup_codes:z.string().min(1).meta({...Dr,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":Jr,"x-revturbine-schema-exposure":yr});K.extend({name:Mt.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":Jr,"x-revturbine-schema-exposure":yr});var Lh=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});var Vh=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":yr}),Uh=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":yr});z.object({resource:Vh,action:Uh}).meta({id:"Permission","x-revturbine-schema-persistence":Fh,"x-revturbine-schema-exposure":yr});var E1=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],w1=["plans","entitlements","placements","targeting","content","experiments"],A1=["plans","entitlements","placements","targeting","content","experiments"],O1=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],j1=["read","create","update","delete","publish","approve","invite","manage_roles"];function Ju(n,e){return n.flatMap(t=>e.map(r=>({resource:t,action:r})))}var F1=Ju(E1,["read"]),L1=[...F1,...Ju(w1,["create","update"])];[...L1,...Ju(A1,["publish","approve","delete"])];Ju(O1,j1);var V1=Vh.options.flatMap(n=>Uh.options.map(e=>`${n}:${e}`));z.enum(V1).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.extend({organization_id:z.string().min(1).meta({...ue,readOnly:true}),user_id:z.string().min(1).meta({...ue,readOnly:true}),role:Lh.default("viewer").meta(ue),created_at:z.string().datetime().meta({...ue,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});var Wx=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":yr});K.extend({organization_id:z.string().min(1).meta({...ue,readOnly:true}),email:z.string().email().meta(Dr),role:Lh.nullable().default(null).meta(ue),status:Wx.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":Jr,"x-revturbine-schema-exposure":yr});K.extend({name:z.string().max(200).nullable().default(null).meta(ue),public_key:z.string().min(1).meta({...Dr,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":Jr,"x-revturbine-schema-exposure":yr});K.merge(X).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({...Dr,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:Nt.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:Nt.meta({...ue,readOnly:true}),expires_at:Nt.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":Jr,"x-revturbine-schema-exposure":yr});K.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":Jr,"x-revturbine-schema-exposure":yr});var Jx=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),Xx=z.string().datetime({offset:true}),z1=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),Bh=z.object({url:z.string().min(1),sha256:Jx,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),K1=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:z1}).strict(),G1=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:G1,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:Bh,standby:Bh.optional(),previous:Bh.optional(),not_before:Xx,expires_at:Xx,rollback_to:Jx.optional(),signature:K1.optional()}).strict().refine(n=>Date.parse(n.not_before)<=Date.parse(n.expires_at),{message:"not_before must be <= expires_at",path:["expires_at"]});var $1=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),Pl=class{constructor(){T(this,"types",new Map);T(this,"surfaceIndex",new Map);}register(e){let t=this.types.get(e.id);t&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:t.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(s=>s.surface.type===e.surfaceType)};this.types.set(r.id,r);let i=this.surfaceIndex.get(r.surfaceType)??[];i.includes(r.id)||(i.push(r.id),this.surfaceIndex.set(r.surfaceType,i));}unregister(e){let t=this.types.get(e);if(!t)return false;this.types.delete(e);let r=this.surfaceIndex.get(t.surfaceType);if(r){let i=r.filter(s=>s!==e);i.length>0?this.surfaceIndex.set(t.surfaceType,i):this.surfaceIndex.delete(t.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let i=this.types.get(e.surface.template);if(i)return i}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,s)=>s.priority-i.priority);for(let i of r)if(i.accepts?.(e))return i;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function Qx(n,e){let t={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=s=>{if(typeof s=="number"&&Number.isFinite(s))return s;if(typeof s=="string"&&s.trim().length>0){let a=Number(s);if(Number.isFinite(a))return a}},i=s=>{let a="_usage_remaining";if(s==="usage_remaining"){let l=r(e.usage_current??e.current_usage),y=r(e.usage_limit);return l!==void 0&&y!==void 0?Math.max(0,y-l):void 0}if(!s.endsWith(a))return;let o=s.slice(0,-a.length);if(!o)return;let p=r(e[`${o}_usage_current`]),b=r(e[`${o}_usage_limit`]);if(!(p===void 0||b===void 0))return Math.max(0,b-p)};return n.replace(/\{\{(\w+)\}\}/g,(s,a)=>{let o=t[a]??a,p=e[o];if(p!=null)return String(p);let b=i(o);return b!=null?String(b):`{{${a}}}`})}function Z1(n,e){let t={};for(let[r,i]of Object.entries(n))typeof i=="string"?t[r]=Qx(i,e):t[r]=i;return t}function Y1(n){let e=typeof n.type=="string"&&n.type.length>0?n.type:"dismiss",t={};for(let[r,i]of Object.entries(n))$1.has(r)||(t[r]=i);return {type:e,plan_handle:typeof n.plan_handle=="string"?n.plan_handle:void 0,promotion_id:typeof n.promotion_id=="string"?n.promotion_id:void 0,placement_handle:typeof n.placement_handle=="string"?n.placement_handle:void 0,url:typeof n.url=="string"?n.url:void 0,tour_id:typeof n.tour_id=="string"?n.tour_id:void 0,...Object.keys(t).length>0?{params:t}:{}}}function W1(n){if(n)return {id:typeof n.id=="string"?n.id:"",name:typeof n.name=="string"?n.name:void 0,discount:typeof n.discount=="string"?n.discount:void 0,type:typeof n.type=="string"?n.type:void 0,status:typeof n.status=="string"?n.status:void 0}}var pd=null,qh=null;function tS(n){}function X1(){return pd||(pd=new Pl,qh),pd}function J1(){pd=null;}var Mh=class{constructor(){T(this,"resolvers",new Map);}register(e,t){this.resolvers.has(e)&&console.warn(`[RevTurbine] Replacing existing CTA resolver for action type "${e}".`),this.resolvers.set(e,t);}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();}},Dh=null;function nS(){return Dh||(Dh=new Mh),Dh}function rS(n,e=nS()){let t=new Map;for(let[r,i]of Object.entries(n)){if(e.has(r))continue;let s=(a,o)=>{let p=o.placement.cta_path??o.placement.ui_path??{};Promise.resolve().then(()=>i(p)).catch(b=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,b);});};e.register(r,s),t.set(r,s);}return ()=>{for(let[r,i]of t)e.get(r)===i&&e.unregister(r);}}function iS(n,e=nS()){if(e.has("snooze"))return ()=>{};let t=(r,i)=>{let s=i.placement,a=typeof s.remind_later_minutes=="number"?s.remind_later_minutes:void 0;n(i.placement.output_id,a!==void 0?a*60:void 0);};return e.register("snooze",t),()=>{e.get("snooze")===t&&e.unregister("snooze");}}var fd={recommended_plan_handle:"",recommended_plan_name:""};function sS(n){let{strategy:e,planOverride:t,currentPlanHandle:r,plans:i}=n;if(i.length===0)return fd;if(e==="custom"){let o=t??"";if(o===""||o===r)return fd;let p=i.find(b=>b.unique_handle===o);return p?{recommended_plan_handle:p.unique_handle,recommended_plan_name:p.name}:fd}if(r==="")return fd;let s=Om(r,i);if(s===null)return fd;let a=i.find(o=>o.unique_handle===s);return {recommended_plan_handle:s,recommended_plan_name:a?.name??s}}var Nh="0123456789ABCDEFGHJKMNPQRSTVWXYZ",em=Nh.length,Q1=em-1,ej=10,Qu=16;function tj(n){let e=n,t="";for(let r=0;r<ej;r+=1){let i=e%em;t=Nh[i]+t,e=Math.floor(e/em);}return t}function aS(){let n=new Uint8Array(Qu);crypto.getRandomValues(n);let e=new Array(Qu);for(let t=0;t<Qu;t+=1)e[t]=n[t]%em;return e}function nj(n){for(let e=n.length-1;e>=0;e-=1){if(n[e]<Q1)return n[e]+=1,true;n[e]=0;}return false}function oS(){let n=-1,e=[];return {next(t=Date.now()){t<=n&&e.length===Qu?nj(e)||(n+=1,e=aS()):(n=t,e=aS());let r=tj(n);for(let i=0;i<e.length;i+=1)r+=Nh[e[i]];return r}}}var Hh=oS();var rj=new Set([408,429,500,502,503,504]);function ij(n){return new Promise(e=>setTimeout(e,n))}async function zh(n,e={}){let t=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??ij,s;for(let a=0;a<=t;a+=1){try{let o=await n();if(o.ok)return {delivered:!0,status:o.status,attempts:a+1};if(!rj.has(o.status))return {delivered:!1,status:o.status,attempts:a+1};s=new Error(`ingest_status_${o.status}`);}catch(o){s=o instanceof Error?o:new Error(String(o));}a<t&&await i(r*(a+1));}return {delivered:false,error:s,attempts:t+1}}function Kh(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function lS(){let n=typeof IntersectionObserver<"u",e=new Map;function t(i,s,a,o){a.fired||(a.fired=true,a.timer!==null&&(clearTimeout(a.timer),a.timer=null),i.io.unobserve(s),i.tracked.delete(s),a.onExposed(o));}function r(i,s){let a=`${i}|${s}`,o=e.get(a);if(o)return o;let p=new Map,l={io:new IntersectionObserver(y=>{let S=e.get(a);if(S)for(let I of y){let P=p.get(I.target);!P||P.fired||(I.isIntersecting?P.minVisibleMs<=0?t(S,I.target,P,"viewport"):P.timer===null&&(P.timer=setTimeout(()=>t(S,I.target,P,"viewport"),P.minVisibleMs)):P.timer!==null&&(clearTimeout(P.timer),P.timer=null));}},{threshold:i,rootMargin:s}),tracked:p};return e.set(a,l),l}return {supported:n,observe(i,s,a){if(!n){let y=false;return Promise.resolve().then(()=>{y||a("render_fallback");}),()=>{y=true;}}let o=s.threshold??.5,p=s.rootMargin??"0px",b=r(o,p),l={onExposed:a,minVisibleMs:s.minVisibleMs??0,timer:null,fired:false};return b.tracked.set(i,l),b.io.observe(i),()=>{l.fired||(l.timer!==null&&(clearTimeout(l.timer),l.timer=null),b.io.unobserve(i),b.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var Gh=lS();var Yh=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],sj=new Set(Yh),aj=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,oj=so();function $h(n){oj&&console.warn(n);}var pS=new Set(Cu.options),fS=["usage","account_id","email","email_type","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],cS=new Set(fS);function yz(n,e){return sm(e,"defineUiPathResolvers(resolvers)")}function sm(n,e){if(!n)return {};let t={};for(let[r,i]of Object.entries(n)){let s=String(r||"").trim();if(!s)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof i!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${s}'.`);t[s]=i;}return t}var tm={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function om(n){return n?.playbook??n?.exportedConfig}function xz(n){return {...n,runtimeMode:"revturbine_server"}}function Sz(n){return {...n,runtimeMode:"custom_endpoints",endpointOverrides:n.endpointOverrides}}function lj(n){let e=sm(n.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...n,runtimeMode:"local_only",localRuntime:n.localRuntime,uiPathResolvers:e}}function Iz(n){return lj(n)}function Pz(n,e,t={}){return {slotId:n,surfaceType:e,entitlementHandle:t.entitlementHandle,planHandle:t.planHandle,placementHandle:t.placementHandle}}function Tz(n,e={}){return {entitlementHandle:n,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function Cz(n,e={}){return {placementHandle:n,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function Ia(n,e,t){return {header:n,body:e,cta_label:t,title:n,cta:t}}function kz(n,e,t,r={}){return {userId:n,placementId:e,interactionType:t,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function Rz(n,e,t){return {eventType:n,payload:e,options:t}}var dS="revturbine:sdk-route-change",im="sdk_validation_warning",cj="revturbine:decision-cache",dj="revturbine:interaction-state",uj="revturbine:presentation-caps",mj="/api/track",pj="/api/sdk/meta",fj="/api/events/interactions",hj="/api/placements/interactions",gj="revturbine-web-sdk",Wh="user_context_observed",_j=20,bj=5e3;function hS(n,e){let t=n[e];if(typeof t=="string"&&t.trim().length>0)return t;let r=gS(n);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function gS(n){return Te(n.payload)?n.payload:null}var vj=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function yj(n){let e={};for(let t of vj)e[t]=hS(n,t);return e}var xj=["placement_","gate_","slot_","engagement_"],Sj=new Set(["impression","segment_enrolled","segment_unenrolled",Wh]);function Ij(n){let e=Hl(n);return e===im?"derived":Sj.has(e)||xj.some(t=>e.startsWith(t))?"automatic":"explicit"}var Pj=["decision_id"];function Tj(n){let e={};for(let t of Pj)e[t]=hS(n,t);return e}function Cj(n){return Rm(n,ng(8))}async function uS(n){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return qd(new Uint8Array(e))}function ng(n){let e=Math.ceil(n/2),t=new Uint8Array(e);crypto.getRandomValues(t);let r="";for(let i=0;i<t.length;i+=1){let s=t[i].toString(16).padStart(2,"0");r+=s;}return r.slice(0,n)}function xr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${ng(16)}`}function nm(){return Lo()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function mS(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function kj(n,e){let t={};for(let[r,i]of Object.entries(e))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(t[r]=i);return rp(n,t)}function Rj(n,e,t){if(n.length===0)return true;let r=new Map;for(let i of n){let s=t.get(i)??"__no_dim__",a=r.get(s)??[];a.push(i),r.set(s,a);}for(let i of r.values())if(!i.some(s=>e.has(s)))return false;return true}var Xh=class{constructor(e){T(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},am=class am{constructor(e,t,r,i){T(this,"endpoint",e);T(this,"tenantId",t);T(this,"token",r);T(this,"legacyTargetDefaults",i);T(this,"cached");T(this,"etag");T(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<am.REFRESH_TTL_MS)return this.cached;try{let t=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/octet-stream, application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,t.status===304||!t.ok)return this.cached;let i=(t.headers.get("content-type")??"").includes("application/octet-stream")?new Np(new Uint8Array(await t.arrayBuffer())).toPlaybook():await t.json(),s=ks(i,"GET /api/sdk/config",this.legacyTargetDefaults);return s&&(this.cached=s,this.etag=t.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};T(am,"REFRESH_TTL_MS",6e4);var Jh=am,Qh=class{constructor(e,t,r){T(this,"cached");T(this,"resolver");T(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=t;}getExportedConfig(){return this.cached}async refresh(){let e=ks(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},eg=class{constructor(e,t){T(this,"source");T(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=t;}getExportedConfig(){return ks(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return ks(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},hd=class hd{constructor(e){T(this,"tenantId");T(this,"apiKey");T(this,"ingestPublicKey");T(this,"environmentId");T(this,"testTraffic");T(this,"analyticsEnabled");T(this,"anonymousTelemetryEnabled");T(this,"previewMode");T(this,"telemetryConsent");T(this,"telemetryCounters",Kh());T(this,"maxBatchSize");T(this,"flushIntervalMs");T(this,"flushTimer");T(this,"batchingTeardown",[]);T(this,"anonTelemetryNoticeShown",false);T(this,"piiRedactionWarned",false);T(this,"endpoint");T(this,"runtimeMode");T(this,"endpointOverrides");T(this,"localRuntime");T(this,"localStorageKey");T(this,"mode");T(this,"policy");T(this,"extensionEnabled");T(this,"placementBehaviorOverrides");T(this,"derivedPlacementBehaviorMemo",null);T(this,"providerFailureSlotBehavior");T(this,"uiPathResolvers");T(this,"unbridgeUiPathCtaResolvers",()=>{});T(this,"unregisterBuiltinSnoozeResolver",()=>{});T(this,"persistentStore");T(this,"sessionStore");T(this,"anonymousId");T(this,"sessionId");T(this,"decisionCache",new Map);T(this,"interactionState",new Map);T(this,"interactionQueue",[]);T(this,"defaultDecisionTtlMs",6e4);T(this,"defaultDismissCooldownMs",1440*60*1e3);T(this,"dismissCooldownDefaultMs",10080*60*1e3);T(this,"defaultRemindLaterMs",3600*1e3);T(this,"defaultUsageWarningPercent",80);T(this,"defaultTrialExpiringDays",3);T(this,"events",[]);T(this,"placements",new Map);T(this,"syncedSurfaceSlotIds",new Set);T(this,"userContext");T(this,"pageContext");T(this,"clientContextToken");T(this,"serverUserContextProvider");T(this,"lastServerContextHash");T(this,"usageBalances",{});T(this,"localDecisionsByPlacementId",new Map);T(this,"localPlacementsByLookupKey",new Map);T(this,"localEntitlementsByHandle",new Map);T(this,"localUserContextsByUserId",new Map);T(this,"localTrialStatus",{in_trial:false});T(this,"presentationCapsByKey",new Map);T(this,"usageLimitByEntitlement",new Map);T(this,"usageTokenPrefixByEntitlement",new Map);T(this,"segmentIdsByPredicateField",new Map);T(this,"configuredSegmentsById",new Map);T(this,"dirtySegmentIds",new Set);T(this,"segmentMembershipBySegmentId",new Map);T(this,"segmentMembershipUserId");T(this,"lastTrialTriggerStage","none");T(this,"configProvider");T(this,"branding");T(this,"apiBranding");T(this,"cachedPlacementResolver");T(this,"cachedPlacementResolverConfig");T(this,"sdkDisabledByProviderFailure",false);T(this,"sdkDisabledReason");T(this,"providerRegistry");T(this,"placementTypeRegistry");T(this,"impressionHistory");T(this,"emittedResolutionDiagnostics",new Set);T(this,"emittedSdkErrors",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??_j),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??bj),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??tm.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=sm(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=oa(e.persistentStorage),this.sessionStore=ef(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?mS():{},...e.user||{}},this.pageContext={...this.policy.inferPage?nm():{},...e.page||{},tags:Nl(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),this.sessionId=xr(),this.providerRegistry=new xc,this.placementTypeRegistry=new Pl,this.impressionHistory=new Zp({store:new vu({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),tS(this.placementTypeRegistry),e.domainProviders)for(let t of e.domainProviders)this.providerRegistry.register(t);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=rS(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=iS((t,r)=>{this.snooze(t,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),jr()&&this.policy.routerAutoTrack&&this.installRouteTracking(),jr()&&this.extensionEnabled&&this.installBridge(),this.capture("page_view",{mode:this.mode,runtime_mode:this.runtimeMode,source:"sdk_init",placement_behavior_flags:this.placementBehavior}),this.startEventBatchFlushing(),this.emitSdkInitTelemetry();}isLocalOnlyMode(){return this.runtimeMode===tm.LocalOnly}resolveConfigProvider(e){let t={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new eg(e.configProvider,t);let r=ks(om(e.localRuntime),"localRuntime.playbook",t),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new Qh(i,t,r);if(r)return new Xh(r);let s=e.runtimeMode??tm.Server,a=e.ingestPublicKey??e.apiKey;if(s!==tm.LocalOnly&&e.endpoint&&a)return new Jh(e.endpoint,e.tenantId,a,t)}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 t=e?.placements??[],s={enableClientCapsEnforcement:[...t.flatMap(a=>a.payloads??[]),...e?.placement_payloads??[]].some(a=>a.caps?.max_per_period!==void 0||a.caps?.cooldown_days!==void 0||a.remind_later_minutes!==void 0&&a.remind_later_minutes!==null),enableAutoGatedPlacement:t.some(a=>a.category==="gated"),enableTrialAutoTriggers:t.some(a=>a.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:s},s}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let t=this.getConfiguredExportedConfig()?.segments??[];for(let r of t)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let i of r.predicates){let s=String(i.field||"").trim();if(!s)continue;let a=this.segmentIdsByPredicateField.get(s)??new Set;a.add(r.handle),this.segmentIdsByPredicateField.set(s,a);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let t=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(t)return this.cachedPlacementResolver=jo({placements:t,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,t=this.userContext.usage,r=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,a=this.userContext.tiers,o=a!==void 0&&Object.keys(a).length>0,p=this.userContext.experiments,b=p!==void 0&&Object.keys(p).length>0;if(!e&&!t&&!o&&!b)return;let l={};if(t&&typeof t=="object"){let S=Es(t);for(let[I,P]of Object.entries(t)){if(!P||typeof P!="object")continue;let R=typeof P.amount=="number"?P.amount:S[I]??0,N=typeof P.limit=="number"?P.limit:0,Z=N>0?Math.max(0,N-R):0;l[I]={used:R,limit:N,remaining:Z,unit:typeof P.unit=="string"?P.unit:void 0,reset_date:typeof P.reset_date=="string"?P.reset_date:void 0};}}let y={...r.in_trial!==void 0?{trialActive:r.in_trial}:{},...r.trial_limit_type!==void 0?{trialLimitType:r.trial_limit_type}:{},...r.progress_percent!==void 0?{trialProgressPercent:r.progress_percent}:{},...r.days_remaining!==void 0?{trialDaysRemaining:r.days_remaining}:{},...r.day_number!==void 0&&r.days_remaining!==void 0?{trialDaysTotal:r.day_number+r.days_remaining}:{},...r.state!==void 0?{trialState:r.state}:{},...r.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:r.usage_entitlement_handle}:{},...r.usage_consumed!==void 0?{trialUsageConsumed:r.usage_consumed}:{},...r.usage_limit!==void 0?{trialUsageLimit:r.usage_limit}:{}};return {...e?{plan:{currentPlanHandle:e.id??e.name??"",currentPlanName:e.name,...y,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(l).length>0||o?{entitlements:{entries:{},usage:l,...o?{tiers:a}:{}}}:{},...b?{experiments:{assignments:p}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let t of e){let r=this.segmentIdsByPredicateField.get(t);if(r)for(let i of r)this.dirtySegmentIds.add(i);}}toSegmentEvaluationTraits(e,t,r){return Nd(e,t,r)}buildTargetingState(e){return Hd(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,t){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,i=t.id||this.anonymousId;if(r!==i){this.segmentMembershipUserId=i,this.markAllSegmentsDirty();return}let s=this.buildTargetingState(e),a=this.buildTargetingState(t),o=new Set,p=new Set([...Object.keys(s.segmentTraits),...Object.keys(a.segmentTraits)]);for(let b of p)s.segmentTraits[b]!==a.segmentTraits[b]&&o.add(b);this.markSegmentsDirtyForFields(o);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return jr()?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,t){let r=this.providerFailureSlotBehavior==="placeholder",i=r?`${t??e} temporarily unavailable`:`${t??e} unavailable`,s=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:xr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:Ia(i,s,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let t=`disabled_output_${xr()}`,r=e.slotId?`${e.slotId} temporarily unavailable`:"Placement temporarily unavailable";return {output_id:t,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:t,config_version:"sdk-fallback",present_upsell:false}}endpointFor(e,t){let r=this.endpointOverrides[e];return r&&r.trim().length>0?/^https?:\/\//i.test(r)?r:`${this.endpoint}${r.startsWith("/")?"":"/"}${r}`:`${this.endpoint}${t}`}localPlacementLookupKey(e){return Gm(e)}localLookupMatchesConfig(e,t){if(t.slotId&&e.slotId&&e.slotId!==t.slotId||t.surfaceType&&e.surfaceType&&e.surfaceType!==t.surfaceType)return false;let r=(i,s)=>!i||!s?true:i===s;return r(t.entitlementHandle,e.entitlementHandle)&&r(t.planHandle,e.planHandle)&&r(t.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,t){return Am(e,t.planHandle)}applyCategoryConflictSuppression(e){return Dd(e)}resolveLocalPlacementFromCandidates(e,t){return Zm(e,true,{fixedOnly:t?.fixedOnly??false})}localPlacementForConfig(e){let t=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(t&&!this.localOutputMatchesConfig(t,e))return null;let r=[];for(let[i,s]of this.localPlacementsByLookupKey.entries()){if(!s)continue;let a=wm(i);this.localLookupMatchesConfig(a,e)&&this.localOutputMatchesConfig(s,e)&&r.push(s);}return t&&!r.some(i=>i.output_id===t.output_id)&&r.push(t),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,i]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,i);if(e?.placementsByLookupKey)for(let[r,i]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,i);if(e?.entitlementByHandle)for(let[r,i]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,i);if(e?.userContextByUserId)for(let[r,i]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,i);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let t=this.persistentStore.getItem(this.localStorageKey);if(!t){this.persistLocalRuntimeState();return}try{let r=JSON.parse(t);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let i of r.placements||[])this.placements.set(i.id,i);for(let[i,s]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,s);for(let[i,s]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,s);for(let[i,s]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,s);for(let[i,s]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,s);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${cj}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${dj}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${uj}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let t=JSON.parse(e),r=Date.now();Object.entries(t).forEach(([i,s])=>{!s||typeof s!="object"||!Number.isFinite(s.expiresAt)||s.expiresAt<=r||this.decisionCache.set(i,s);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),t=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(t));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let t=JSON.parse(e);Object.entries(t).forEach(([r,i])=>{!i||typeof i!="object"||this.interactionState.set(r,i);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let t=JSON.parse(e);for(let[r,i]of Object.entries(t)){if(!i||typeof i!="object")continue;let s=Array.isArray(i.seenAt)?i.seenAt.filter(o=>Number.isFinite(o)&&o>0):[],a=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:s,cooldownUntil:a});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan;if(Te(e)&&typeof e.id=="string"&&e.id)return e.id;let t=this.userContext.custom;return typeof t?.plan=="string"&&t.plan?t.plan:typeof t?.plan_handle=="string"&&t.plan_handle?t.plan_handle:""}activePlanIdentifiers(e){let t=this.resolveContextPlanRaw(),r=String(t||"").toLowerCase(),i=new Set;if(!r)return i;i.add(r);for(let s of e.plans??[]){let a=typeof s.unique_handle=="string"?s.unique_handle.toLowerCase():"";a===r&&i.add(a);}return i}ruleTargetsActivePlan(e,t){let i=(Array.isArray(e.targets)?e.targets:[]).filter(s=>Te(s)&&s.kind==="plan");return i.length===0?true:i.some(s=>typeof s.id=="string"&&t.has(s.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let t=this.activePlanIdentifiers(e),r=new Map,i=e.entitlements??[];for(let a of i){let o=typeof a.unique_handle=="string"?a.unique_handle:"";o&&r.set(o,o);}let s=e.entitlement_rules??[];for(let a of s){if(!Te(a))continue;let o=typeof a.entitlement_id=="string"?a.entitlement_id:"";if(!o)continue;let p=typeof a.kind=="string"?a.kind:"";if(!(p==="usage_limit"||p==="credits"||p==="seat"))continue;let l=r.get(o)??"",y=typeof a.unit=="string"?a.unit:"",S=jm(y),I=S&&!Fm(S)?S:oo(l||o);I&&(this.usageTokenPrefixByEntitlement.set(o,I),l&&this.usageTokenPrefixByEntitlement.set(l,I));let P=Number(a.limit_value??a.allowance_value);if(!Number.isFinite(P)||P<=0||!this.ruleTargetsActivePlan(a,t))continue;let R=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(o,{limit:P,warningPercent:R}),l&&this.usageLimitByEntitlement.set(l,{limit:P,warningPercent:R});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let t=Qm({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:i=>this.usageThresholdForEntitlement(i)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...t,...r}};}deriveRecommendedPlanTokens(e,t){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let i=this.resolveContextPlanRaw(),s=String(i||"").toLowerCase(),a=e.plans.map(o=>({source_id:o.unique_handle,unique_handle:o.unique_handle,name:o.name,tier_position:o.tier_position??0,sort_order:o.sort_order??0}));return sS({strategy:t?.strategy??"next_tier_up",planOverride:t?.planOverride,currentPlanHandle:s,plans:a})}getPersonalizationTokens(e){let t={},r=this.userContext.personalization??{};for(let[i,s]of Object.entries(r))i!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(t[i]=s);if(t.plan_name===void 0){let i=Ra(this.getConfiguredExportedConfig(),this.userContext.plan);i?t.plan_name=i:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(t.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let i=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});t.recommended_plan_handle=i.recommended_plan_handle,t.recommended_plan_name=i.recommended_plan_name;}return t}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...Es(this.userContext.usage),...this.usageBalances},t={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let s=this.usageTokenPrefixByEntitlement.get(r)??oo(r)??r,a=this.usageThresholdForEntitlement(r);t[s]={current:i,...a?.limit!==void 0?{limit:a.limit}:{}};}return t}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 Wp({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,t){let r=this.getConfiguredExportedConfig();if(!r)return null;let i=this.resolveContextPlanRaw(),s=String(i||"").toLowerCase(),a=this.getTargeting(),o=new Set(a.segmentIds??[]),{trialGrantedEntitlementHandles:p,effectivePlanHandle:b}=this.resolveReverseTrialGrants(r);return $l({handle:e,context:t,currentPlanHandle:s,segmentIds:o,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...p!==void 0?{trialGrantedEntitlementHandles:p}:{},...b!==void 0?{effectivePlanHandle:b}:{}})}resolveReverseTrialGrants(e){let t=this.localTrialStatus;if(!t.in_trial||t.trial_type!=="reverse")return {};let r=t.plan_handle;if(!r)return {};let s=(e.reverse_trial_rules??[]).find(a=>a.fallback_plan_id===r&&a.is_active!==false);return !s||s.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(s.entitlements_during_trial),effectivePlanHandle:s.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,t=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=Ra(r,this.userContext.plan),s=i??t?.plan??(this.resolveContextPlanRaw()||void 0),a=[...r?.segments??[]],o=Array.from(new Set(a.flatMap(S=>(S.predicates??[]).map(I=>I.field)))).sort((S,I)=>S.localeCompare(I)),p={...t?.traits??{},...this.userContext.custom??{}};for(let[S,I]of Object.entries(this.userContext.entitlements??{}))p[S]===void 0&&(p[S]=I);i&&p.plan_name===void 0&&(p.plan_name=i),s&&p.plan===void 0&&(p.plan=s);let b={...t?.usage??{},...Es(this.userContext.usage),...this.usageBalances};for(let[S,I]of Object.entries(b))p[S]===void 0&&(p[S]=I);let l={};for(let[S,I]of Object.entries(p))(typeof I=="string"||typeof I=="number"||typeof I=="boolean")&&(l[S]=I);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),a.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),a.length>0&&this.dirtySegmentIds.size>0){for(let S of this.dirtySegmentIds){let I=this.configuredSegmentsById.get(S)??a.find(R=>R.handle===S);if(!I){this.segmentMembershipBySegmentId.delete(S);continue}let P=Jl([I],l).length>0;this.segmentMembershipBySegmentId.set(S,P);}this.dirtySegmentIds.clear();}let y=a.length>0?a.filter(S=>this.segmentMembershipBySegmentId.get(S.handle)===true).map(S=>S.handle):[...t?.segmentIds??[]];return {userId:e,segmentIds:y,traits:p,...s?{plan:s}:{},...Object.keys(b).length>0?{usage:b}:{},configuredSegments:a,configuredTraitFields:o}}async explainPlacementDecision(e){let t=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),s=this.getPolicy(),a=this.getConfiguredExportedConfig(),o=new Set(r.segmentIds),p=r.configuredSegments.map(W=>{let Pt=Array.isArray(W.predicates)?W.predicates.map(Jt=>kj(Jt,r.traits)):[],Xt=Pt.length>0?Pt.every(Jt=>Jt.matched):o.has(W.handle);return {segmentId:W.handle,...W.name?{segmentName:W.name}:{},matched:Xt,predicates:Pt}}),b=new Map,l=new Map;if(Array.isArray(a?.entitlements))for(let W of a.entitlements){let Pt=Kn(W.unique_handle),Xt=Pt;Xt&&Pt&&b.set(Xt,Pt);let Jt=Kn(W.type);Xt&&Jt&&l.set(Xt,Jt);}let y=new Map;if(Array.isArray(a?.plans))for(let W of a.plans){let Pt=Kn(W.unique_handle),Xt=Pt;Xt&&Pt&&y.set(Xt,Pt);}let I=(Kn(r.plan,r.traits.plan,r.traits.plan_handle,r.traits.plan_id)??"").toLowerCase(),P=new Map;if(Array.isArray(a?.segments))for(let W of a.segments){let Pt=Kn(W.handle),Xt=Kn(W.dimension_id);Pt&&Xt&&P.set(Pt,Xt);}let R=Array.isArray(a?.entitlement_rules)?a.entitlement_rules.map((W,Pt)=>{let Xt=Kn(W.id)??`entitlement_rule_${Pt}`,Jt=Kn(W.entitlement_id),rt=Jt?b.get(Jt):void 0,yn=Array.isArray(W.targets)?W.targets.filter(ze=>ze.kind==="plan").map(ze=>ze.id):[],Mn=yn.map(ze=>y.get(ze)??ze),ht=Array.isArray(W.segment_ids)?W.segment_ids.filter(ze=>typeof ze=="string"):[],rn=Kn(W.kind),Nn=!I||yn.some(ze=>ze.toLowerCase()===I),Sr=Rj(ht,o,P),ln=Nn&&Sr,sn=rt?i[rt]:Jt?i[Jt]:void 0,mr=ln?sn?.status??"unknown":"unknown",bn;if(ln)switch(rn){case "feature":bn=W.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let ze=Kn(W.tier_name);bn=ze?`unlocks ${ze} tier`:"unlocks capability tier";break}case "usage_limit":{let ze=typeof W.limit_value=="number"?W.limit_value:void 0,cr=Kn(W.unit)??"",mi=Kn(W.period_scope)??"",Tt=mi?` / ${mi.replace("per_","")}`:"";bn=ze!=null?`sets limit to ${ze.toLocaleString()}${cr?` ${cr}`:""}${Tt}`:"sets usage limit";break}case "credits":{let ze=W.allowance_value,cr=typeof ze=="number"?ze:void 0,mi=Kn(W.unit)??"credits",Tt=Kn(W.reset_period)??"",Ir=Tt?` / ${Tt.replace("per_","")}`:"";bn=cr!=null?`grants ${cr.toLocaleString()} ${mi}${Ir}`:"grants credit allowance";break}case "seat":{let ze=W.included_count,cr=typeof ze=="number"?ze:void 0;bn=cr!=null?`includes ${cr} seat${cr===1?"":"s"}`:"includes seats";break}default:if(Jt){let ze=l.get(Jt);ze==="feature"?bn="grants access":ze&&(bn=`${ze.replace(/_/g," ")} entitlement`);}break}return {ruleId:Xt,...Jt?{entitlementId:Jt}:{},...rt?{entitlementHandle:rt}:{},...rn?{kind:rn}:{},planScopes:Mn,planIds:yn,...ht.length>0?{segmentIds:ht}:{},matchesPlan:Nn,matchesSegment:Sr,matched:ln,outcome:mr,...bn?{outcomeDescription:bn}:{},...sn?.reason?{reason:sn.reason}:{}}}):[],N=Kn(t.output?.output_id),Z=this.placements.get(e.placementId),se=Kn(Z?.name)??"",Pe=Array.isArray(Z?.metadata?.surface_template_ids)?Z.metadata.surface_template_ids:[],Y=[],U=new Set;if(Array.isArray(a?.placements))for(let W of a.placements){if(!W||typeof W!="object")continue;let Pt=Kn(W.id)??"",Xt=Kn(W.name)??"";if(U.has(Pt))continue;let Jt=Kn(t.output?.rule_id);if(Jt&&Pt===Jt){U.add(Pt),Y.push(W);continue}if(se&&(Pt===se||Xt===se||Pt===`pl_${se}`||Xt===`pl_${se}`)){U.add(Pt),Y.push(W);continue}Pe.length>0&&(W.payloads??[]).some(Mn=>(Mn.surfaces??[]).some(rn=>{let Nn=Kn(rn.template_id);return Nn?Pe.includes(Nn):false}))&&(U.add(Pt),Y.push(W));}let Oe=Y.flatMap(W=>(W.payloads??[]).map(Xt=>{let Jt=Xt.target,rt=Jt?.plan_ids??[],yn=rt.map(mr=>y.get(mr)??mr),Mn=Jt?.segment_chips??[],rn=(Xt.surfaces??[]).map(mr=>Kn(mr.template_id)).filter(mr=>typeof mr=="string"),Nn=rt.length===0||!I||rt.some(mr=>mr.toLowerCase()===I),Sr=Mn.length===0||Mn.some(mr=>o.has(mr)),ln="active",sn=ln==="active"&&Nn&&Sr;return {payloadId:String(Xt.id??""),placementId:String(W.id??""),placementName:String(W.name??""),status:ln,planIds:rt,planScopes:yn,segmentChips:Mn,surfaceTemplateIds:rn,matchesPlan:Nn,matchesSegment:Sr,eligible:sn,selected:!!N&&N===String(Xt.id??"")}})),It=t.output?this.extractPlacementCapPolicies(t.output).flatMap(W=>W.rules.length===0&&W.cooldownMs===void 0?[]:W.rules.length===0?[{count:0,period:"session",cooldownMs:W.cooldownMs}]:W.rules.map(Pt=>({count:Pt.count,period:Pt.period,...W.cooldownMs!==void 0?{cooldownMs:W.cooldownMs}:{}}))):[],Dn={ruleId:t.output?.rule_id,decisionId:t.output?.decision_id,category:t.output?.category,suppressionReason:t.suppressionReason,reasonCodes:t.reasonCodes,capPolicies:It};return {generatedAt:new Date().toISOString(),input:e,decision:t,targeting:r,policy:s,entitlements:i,segments:p,entitlementRules:R,eligiblePayloads:Oe,placementRules:Dn}}usageThresholdForEntitlement(e){return Nm(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,t){return ep(e,t,i=>this.usageThresholdForEntitlement(i)).map(i=>this.emitTrigger(i.type,{entitlement_handle:i.entitlement_handle,current_usage:i.current_usage,usage_limit:i.usage_limit,usage_percent:i.usage_percent,threshold:i.threshold}))}deriveTrialTriggerStage(e){return tp(e,this.lastTrialTriggerStage,this.defaultTrialExpiringDays)}async evaluateTrialLifecycleTriggers(e){let t=this.deriveTrialTriggerStage(e);if(!this.placementBehavior.enableTrialAutoTriggers){this.lastTrialTriggerStage=t;return}if(t!==this.lastTrialTriggerStage){if(this.lastTrialTriggerStage=t,t==="midpoint"){await this.emitTrigger("trial_midpoint",{days_remaining:e.days_remaining});return}if(t==="expiring"){await this.emitTrigger("trial_expiring",{days_remaining:e.days_remaining});return}t==="expired"&&await this.emitTrigger("trial_expired",{days_remaining:0});}}resolveAnonymousId(){let e=`revturbine:${this.tenantId}:anon`;try{let t=this.persistentStore.getItem(e);if(t)return t;let r=xr();return this.persistentStore.setItem(e,r),r}catch{return xr()}}installBridge(){let e={getSnapshot:()=>({tenantId:this.tenantId,user:this.userContext,page:this.pageContext,placements:Array.from(this.placements.values())}),setPageContext:t=>{this.setPageContext(t);},setUserContext:t=>{this.setUserContext(t);}};window.__RT_SDK_BRIDGE__=e;}installRouteTracking(){if(Lo())return;let e=window.history;if(e.__rtPatched)return;let t=()=>{window.dispatchEvent(new CustomEvent(dS,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...s)=>{r(...s),t();});let i=e.replaceState.bind(e);e.replaceState=((...s)=>{i(...s),t();}),window.addEventListener("popstate",t),window.addEventListener(dS,s=>{let a=s.detail;this.onRouteChange({path:a.path,title:a.title,tags:a.tags});}),e.__rtPatched=true;}mergeUserContext(e){return Xm(this.userContext,e)}mergePageContext(e){return {...this.pageContext,...e,tags:Nl(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],t={...this.policy.inferPage?nm():{},...this.pageContext},r=String(t.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 t.tags&&!Array.isArray(t.tags)&&e.push({code:"invalid_page_context_tags",reason:"Page tags must be an array of strings."}),e}collectPayloadIssues(e){let t=[];if(!Te(e))return t.push({code:"invalid_event_payload",reason:"Event payload must be a plain object."}),t;let r=gS(e),i=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof i=="string"&&i.trim()&&(this.placements.has(i)||t.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:i}})),t}buildValidationWarningEvent(e,t,r){return this.toEventEnvelope(im,{source_event_type:e,warning_count:t.length,warning_codes:t.map(i=>i.code),warnings:t,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:Te(r)?r:null})}toEventEnvelope(e,t){let r={...this.policy.inferPage?nm():{},...this.pageContext},i=r.url||(jr()?window.location.href:""),s=(()=>{try{return new URL(i).pathname}catch{return jr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:s,page_title:r.title||(jr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:Nl(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===Wh?{}:{...this.userContext.custom||{}}},properties:t}}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&&jr()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&jr()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let t=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(t)||this.emittedResolutionDiagnostics.size>=hd.RESOLUTION_DIAGNOSTIC_SESSION_CAP||(this.emittedResolutionDiagnostics.add(t),this.postAnonMeta("resolution_failure",e));}reportSdkError(e,t){if(this.diagnosticTelemetryActive()&&!this.emittedSdkErrors.has(e)&&!(this.emittedSdkErrors.size>=hd.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",t?{reason:e,message:t}:{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 t=e.placements??[],r=t.reduce((i,s)=>i+(s.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:t.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,t={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,t));}async postAnonMeta(e,t={}){try{let r=this.getConfiguredExportedConfig(),i=r?.format_version!=null?String(r.format_version):void 0,s=i?`${this.tenantId}:${i}`:this.tenantId,a=(await uS(s)).slice(0,64),p={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:xr(),config_hash_id:a,sdk_version:Cv,runtime_mode:this.runtimeMode,...i?{bundle_version:i}:{},...t.config_shape?{config_shape:t.config_shape}:{},...t.message?{message:t.message.slice(0,500)}:{},...t.reason?{reason:t.reason.slice(0,64)}:{},...t.placement_handle?{placement_handle:t.placement_handle.slice(0,64)}:{},...t.slot_handle?{slot_handle:t.slot_handle.slice(0,64)}:{},...t.surface?{surface:t.surface.slice(0,64)}:{},...t.plan_handle?{plan_handle:t.plan_handle.slice(0,64)}:{},...t.entitlement_handle?{entitlement_handle:t.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",pj),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(p),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 t=0,r=e.map(y=>{let S=gb(y);return t+=S.redactions,S.value}),i=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(t>0&&i&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=t,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let s=xr(),a=this.getConfiguredExportedConfig()?.playbook_version_id,o=r.map(y=>{let S=y.user_id||y.anonymous_id,I=Jp(this.userContext.account_id||S),P=Xp({level:y.level,message:y.message,path:y.path,url:y.url,page_title:y.page_title,session_id:y.session_id,anonymous_id:y.anonymous_id,tags:y.tags,traits:y.identity.traits??null,payload:y.properties,source:gj});return t+=P.redactions+(I.redacted?1:0),{environment_id:this.environmentId,user_id:S,account_id:I.value,event_name:Hl(y.type).slice(0,120),event_ts:y.event_time,properties:JSON.stringify(P.value),...yj(y.properties),...Tj(y.properties),origin:Ij(y.type),playbook_version:typeof a=="string"&&a.length>0?a:null,event_id:Hh.next(),request_id:xr(),tenant_id:y.tenant_id,...this.testTraffic?{test:true}:{}}});t>0&&this.warnPiiRedactedOnce();let p=this.endpointFor("ingestEvents",mj),b={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":s},body:JSON.stringify({events:o}),keepalive:true};(await zh(()=>fetch(p,b))).delivered?this.telemetryCounters.sent+=o.length:this.telemetryCounters.failed+=o.length;}dispatchToEventConsumers(e){this.providerRegistry.has("events")&&this.providerRegistry.get("events").then(t=>{let r=t?.consumers;if(!(!r||r.length===0))for(let i of r)try{Promise.resolve(i.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,t,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let i=Hl(e),s=this.toEventEnvelope(i,t),a=[...this.collectPageContextIssues(),...this.collectPayloadIssues(t)],o=[s];if(a.length>0&&o.push(this.buildValidationWarningEvent(i,a,t)),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,t={},r){let{eventName:i,properties:s}=Qp(e,t);await this.capture(i,s,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!jr()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},t=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",t),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",t));}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,t,r){let i=Te(t)?t:{};await this.capture(e,{semantic:true,payload:i},r);}async evaluateUserSegmentsAndUsage(e,t=false){let r=await this.fetchUserContext(this.userContext.id||""),i={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},s=await this.fetchUserContext(i.id||""),a=new Set(r.segmentIds||[]),o=new Set(s.segmentIds||[]),p=Array.from(o).filter(l=>!a.has(l)),b=Array.from(a).filter(l=>!o.has(l));for(let l of p)await this.emitSemantic("segment_enrolled",{segment_id:l,user_id:i.id??null});for(let l of b)await this.emitSemantic("segment_unenrolled",{segment_id:l,user_id:i.id??null});if(t){let l=r.usage||{},y={...l,...this.usageBalances},S=this.evaluateUsageThresholdCrossings(l,y);await Promise.all(S);}}emitObservedContextFields(e){let t=Object.keys(e??{}).filter(r=>r.length>0).sort();t.length!==0&&this.capture(Wh,{context_fields:t});}setUserContext(e){let t=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(t,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom);}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(nm());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let t=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,i=Date.now()+r;for(let s of e.decisions??[]){if(!s.output)continue;let a=[this.tenantId,s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),o=Te(s.output?.content)?s.output.content:{};this.decisionCache.set(a,{value:{placementId:s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",requestId:e.request_id,visible:s.visible,decisionSource:"cache",reasonCodes:s.reason_codes??[],content:Ia(String(o.header??""),String(o.body??""),String(o.cta_label??"")),output:s.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[s,a]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(s,{status:a.status,allowed:a.allowed,reason:a.reason,current_tier:a.current_tier,placement:a.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(t,this.userContext);}async generatePlacementId(e){return Km({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:uS,randomHex:ng})}async registerPlacement(e){let t=String(e.placementScopeKey||e.name||"").trim();return this.registerSurfaceSlot({id:t||String(e.name||"surface_slot").trim(),name:e.name,metadata:Te(e.metadata)?e.metadata:void 0})}async upsertSurfaceSlot(e){if(this.isLocalOnlyMode())return;let t=xr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),i=Cj(e.placementScopeKey||e.id||e.name),s={...Te(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},a={name:e.name,slug:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:s},o={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":t},p=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:o,body:JSON.stringify(a)});if(p.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(p.status!==404)throw new Error(`surface_slot_upsert_failed:${p.status}`);let b=await fetch(r,{method:"POST",headers:o,body:JSON.stringify(a)});if(!b.ok)throw new Error(`surface_slot_create_failed:${b.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let t=ao(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),s=[];r||s.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||s.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!Te(e.metadata)&&s.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let a=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:t}),o={id:a,route:t,name:i||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...Te(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},p=this.placements.get(a),b=p?this.stableStringify(p):null,l=this.stableStringify(o);return (!p||b!==l)&&(this.placements.set(a,o),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(a)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(a)&&await this.upsertSurfaceSlot(o),s.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",s,{surface_slot_id:r||null,placement_id:a,route:t,placement_name:i||null})]),a}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;let t=(Array.isArray(e)?e:[]).map(s=>wj(s)).filter(s=>s!==null);if(t.length===0)return;let r=xr(),i=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:t})});if(!i.ok)throw new Error(`persist_placement_types_failed:${i.status}`)}stableStringify(e){return Rs(e)}decisionCacheKey(e,t){return $m({tenantId:this.tenantId,placementId:e.placementId,userId:e.userId,contextMode:e.contextMode??"auto",overrides:e.overrides??{},traits:e.traits??{},route:this.currentPathname(),...t?{runtimeContextFingerprint:t}:{}})}interactionStateKey(e){return ab({tenantId:this.tenantId,...e})}readDecisionCache(e){let t=this.decisionCache.get(e);return t?t.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...t.value,decisionSource:"cache"}:null}writeDecisionCache(e,t,r){let i=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:i,value:t}),this.persistDecisionCache();}suppressionForState(e){return ob(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return Md(e)}applyPlacementCapsIfNeeded(e,t={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=t.tick??true,i=this.placementCapKey(e),s=this.presentationCapsByKey.get(i),a=Wm(e,i,s,Date.now());return a.updatedState&&r&&(this.presentationCapsByKey.set(i,a.updatedState),a.allowed&&this.persistPresentationCaps()),{allowed:a.allowed,reason:a.reason}}gateDecisionByCaps(e,t={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:t.tick??true});if(r.allowed)return e;let i=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],i],suppressionReason:i}}normalizeDecisionFromResponse(e,t,r,i){return Ym(e,t,r,i)}async getPlacementDecision(e){let t=this.placements.get(e.placementId),r=xr();if(this.isDisabledByProviderFailure())return this.disabledDecisionForPlacement(e.placementId,t?.name);if(!t)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:Ia("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),s=this.suppressionForState(this.interactionState.get(i));if(s.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Ia(`${t.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let a,o=await this.localRuntime?.getContext?.(),p=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(o||p)&&(a=this.stableStringify({legacyCtx:o??{},providerCtx:p??{}}));let b=this.decisionCacheKey(e,a),l=this.readDecisionCache(b);if(l)return this.gateDecisionByCaps(l,{tick:false});{let S=this.getOrBuildPlacementResolver();if(S){let P={...o,...p?{__providers:p}:{}},R=this.gateDecisionByCaps(await S(e,t,P));return this.localDecisionsByPlacementId.set(e.placementId,R),this.writeDecisionCache(b,R,e.ttlMs),this.persistLocalRuntimeState(),R}let I=this.localDecisionsByPlacementId.get(e.placementId);if(I){let P=this.gateDecisionByCaps({...I,decisionSource:"fallback"});return this.writeDecisionCache(b,P,e.ttlMs),this.persistLocalRuntimeState(),P}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let y={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:Ia(`${t.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),y}async preloadPlacementDecisions(e){let t=new Map;for(let r of e)t.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(t.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let i=await this.getPlacementDecision(r),s=this.decisionCacheKey(r);this.writeDecisionCache(s,i,r.ttlMs);}));return}let t=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let s=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),a=t.get(s);if(a){a.placementIds.push(r.placementId);continue}t.set(s,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of t.values()){let i=e.filter(s=>r.placementIds.includes(s.placementId)&&s.userId===r.userId);await Promise.allSettled(i.map(s=>this.getPlacementDecision(s)));}}updateInteractionState(e){let t=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=e.metadata??{},a={...this.interactionState.get(t)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let o=Number(i.remind_after_seconds);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(a.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let o=Number(i.suppress_duration_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.defaultDismissCooldownMs);}this.interactionState.set(t,a),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let t=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",fj),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":xr()},body:JSON.stringify(t.length===1?t[0]:t)})).ok||(await fetch(this.endpointFor("legacyInteractions",hj),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":xr()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let t={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(t),this.interactionQueue.push(t),this.flushInteractionQueue();let r=t.placementId,i=t.treatmentId,s=t.metadata??{},a=Number(s.cooldown_ms),o=Number.isFinite(a)&&a>0?a:void 0;if(t.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,o);else if(t.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,i);else if(t.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,i,void 0,void 0,o);else if(t.interactionType==="suppress"){let l=Number(s.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,s,Number.isFinite(l)&&l>0?l:void 0);}let p=t.metadata??{},b=typeof p.decision_id=="string"?p.decision_id:null;await this.emitSemantic("placement_interaction",{user_id:t.userId,placement_id:t.placementId,treatment_id:t.treatmentId??null,interaction_type:t.interactionType,interaction_at:t.interactionAt??null,...b?{decision_id:b}:{},...t.experimentId?{experiment_id:t.experimentId}:{},...t.variantKey?{variant_key:t.variantKey}:{},metadata:p},{immediate:false});}async getPlacementContent(e,t){let r=this.placements.get(e),i=xr();if(this.isDisabledByProviderFailure()){let o=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:o.content}}if(this.isLocalOnlyMode()){let o=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:o?"remote":"fallback",content:Ia(typeof o?.content?.title=="string"?String(o.content.title):`${r?.name??e} treatment`,typeof o?.content?.body=="string"?String(o.content.body):"Local runtime placement content.",typeof o?.content?.cta=="string"?String(o.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:i,decisionSource:"fallback",content:Ia("Placement not found","Register the placement before requesting content.","Register placement")};let s=this.userContext.id??this.anonymousId,a=await this.getPlacementDecision({placementId:e,userId:s});return {placementId:e,requestId:i,decisionSource:a.decisionSource==="fallback"?"fallback":"remote",content:a.content??Ia(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}normalizePlacementOutput(e){let t=Ud(e,xr);return t&&Te(e)&&typeof e.decision_id!="string"&&this.capture(im,{reason:"placement response missing decision_id; generated synthetic",output_id:t.output_id,synthetic_decision_id:t.decision_id}),t}validateTrialStatusShape(e){return qm(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let t=e.slotId,r=e.surfaceType;if(r&&!pS.has(r))return this.capture(im,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:t??null}),null;xr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let o=await this.localRuntime.resolvers.getPlacement(e);return o&&this.applyPlacementCapsIfNeeded(o).allowed?o:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let s=this.localPlacementForConfig(e);return s&&this.applyPlacementCapsIfNeeded(s).allowed?s:null}async checkEntitlement(e,t){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let s=this.localRuntime?.resolvers?.checkEntitlement;if(s){let a=await s(e,t);return this.localEntitlementsByHandle.set(e,a),this.persistLocalRuntimeState(),a}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,t);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let i=this.localEntitlementsByHandle.get(e);return i||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"local_runtime_default_allow":"config_unavailable"})}updateUsage(e){let t=this.userContext;this.usageBalances={...this.usageBalances,...e},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(t,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true);}getUserContext(){let e=this.userContext.id||this.anonymousId,t=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:t,updated_at:t,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 t=xr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let s=await r(e);return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}let i=this.localUserContextsByUserId.get(e);return i||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":t},body:JSON.stringify({request_id:t,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let i=await r.json(),s={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(a=>typeof a=="string"):[],traits:Te(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:Te(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,a])=>typeof a=="number")):void 0};return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new Sc,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e);let t=this.clientContextToken;if(t)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!r.ok){r.status===401&&(this.clientContextToken=void 0);return}let i=await r.json(),s=this.mapClientSafeContext(i);if(Object.keys(s).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:s.trial?{in_trial:s.trial.in_trial,state:s.trial.state,days_remaining:s.trial.days_remaining}:void 0,payment_at_risk:s.payment_at_risk});let a=JSON.parse(JSON.stringify({trial:s.trial??null,plan:s.plan??null})),o=await Jm(a)+`:${s.payment_at_risk===!0?1:0}`;if(o===this.lastServerContextHash)return;this.lastServerContextHash=o,this.applyServerContextPatch(s);}catch{}}mapClientSafeContext(e){let t={},i=["active","running_out","expired","converted","none"].find(a=>a===e.trial?.status);i&&(t.trial={in_trial:i==="active"||i==="running_out",state:i,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(t.payment_at_risk=true);let s=e.plan?.handle;return typeof s=="string"&&s.length>0&&(t.plan={id:s,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:s}),t}applyServerContextPatch(e){let t=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(t,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,t,r,i){await this.impressionHistory.recordImpression(e,t,r,i);}async recordDismissal(e,t,r,i,s){await this.impressionHistory.recordDismissal(e,t,r,i,s);}async recordClickThru(e,t,r,i,s){await this.impressionHistory.recordClickThru(e,t,r,i,s);}async recordConversion(e,t,r,i){await this.impressionHistory.recordConversion(e,t,r,i);}async getTrialStatus(){let e=xr();if(this.isLocalOnlyMode()){let t=this.localRuntime?.resolvers?.getTrialStatus;if(t){let r=await t();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let t=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(!t.ok)return {in_trial:!1};let r=await t.json(),i=this.validateTrialStatusShape(r);return this.localTrialStatus=i,await this.evaluateTrialLifecycleTriggers(i),this.persistLocalRuntimeState(),i}catch{return {in_trial:false}}}async setTrialInstances(e,t){let r=this.getConfiguredExportedConfig(),i=t?.nowIso??new Date().toISOString(),{trial:s}=Ad({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:i,usageBalances:this.usageBalances,...t?.basePlanHandle!==void 0?{basePlanHandle:t.basePlanHandle}:{}}),a=s??{in_trial:false};return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let t=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:Te(t)&&Array.isArray(t.content_ui_paths)?t.content_ui_paths:[],i=e.includeProviderHandlers??true,s=sm(e.resolvers,"validateUiPathResolvers(options.resolvers)"),a={...this.uiPathResolvers,...s};if(i&&this.providerRegistry.has("cta"))try{let l=await this.providerRegistry.resolveAll();Te(l.cta)&&Te(l.cta.handlers)&&Object.assign(a,l.cta.handlers);}catch{}let o=[],p=0;for(let l of r){let y=Te(l)?l:{},S=typeof y.action_type=="string"?y.action_type.trim():"";if(!S){o.push({actionType:"unknown",reason:"missing_action_type",...typeof y.id=="string"?{uiPathId:y.id}:{},...typeof y.name=="string"?{name:y.name}:{}});continue}if(typeof a[S]=="function"){p+=1;continue}o.push({actionType:S,reason:"missing_resolver",...typeof y.id=="string"?{uiPathId:y.id}:{},...typeof y.name=="string"?{name:y.name}:{}});}let b={valid:o.length===0,totalUiPaths:r.length,resolvedUiPaths:p,issues:o};if(!b.valid&&e.throwOnMissing){let l=b.issues.filter(S=>S.reason==="missing_resolver").map(S=>S.actionType),y=l.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(l)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${b.issues.length} issue(s).${y}`)}return b}warnOnUiPathResolverCoverageGaps(){let e=this.getConfiguredExportedConfig(),t=Te(e)&&Array.isArray(e.content_ui_paths)?e.content_ui_paths:[];if(t.length===0)return;let r=[],i=0;for(let o of t){let b=(Te(o)?o:{}).action_type,l=typeof b=="string"?b.trim():"";if(!l){i+=1;continue}typeof this.uiPathResolvers[l]!="function"&&r.push(l);}if(i===0&&r.length===0)return;let s=Array.from(new Set(r)),a=[];s.length>0&&a.push(`missing resolvers for action_type: ${s.join(", ")}`),i>0&&a.push(`content_ui_paths with missing action_type: ${i}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${a.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,t=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:t},{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,t,r){await this.emitSemantic(e,{...t,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,t){await this.capture(e,t??{});}identify(e,t){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}aj.test(e)&&$h(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,i=t!=null&&typeof t=="object"&&!Array.isArray(t)&&("account_id"in t||"email"in t||"plan"in t||"plan_handle"in t||"usage"in t||"entitlements"in t||"custom"in t);if(t!=null&&typeof t=="object"&&!Array.isArray(t)){let s=Object.keys(t).filter(a=>!sj.has(a));s.length>0&&$h(i?`[RevTurbine] identify() ignoring unrecognized user-context key(s): ${s.join(", ")}. Recognized keys: ${Yh.join(", ")}.`:`[RevTurbine] identify() found no recognized user-context key \u2014 treating the object as legacy traits (stored under custom). Keys seen: ${s.join(", ")}; recognized keys: ${Yh.join(", ")}. For plan-scoped rules use { plan: { id, name } } or { plan_handle }.`);}if(i){let s=t;s.usage&&(this.usageBalances={...this.usageBalances,...Es(s.usage)});let a=!s.plan&&typeof s.plan_handle=="string"&&s.plan_handle.trim()!==""?{id:s.plan_handle,name:s.plan_handle}:void 0;this.userContext=this.mergeUserContext({id:e,account_id:s.account_id,email:s.email,plan:s.plan??a,usage:s.usage,entitlements:s.entitlements,custom:a?{plan_handle:a.id,...s.custom??{}}:s.custom,personalization:s.personalization});}else this.userContext=this.mergeUserContext({id:e,custom:t,usage:{}});this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.emitObservedContextFields(i?t.custom:t);}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let t=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?mS():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(t,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate();}can(e,t){return this.checkEntitlement(e,t)}async gate(e,t,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let i=await this.checkEntitlement(e,r);return i.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await t(),entitlement:i}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:i.reason??null},{immediate:false}),{ran:false,entitlement:i})}track(e,t){return this.trackEvent(e,t)}update(e){let{usage:t,...r}=e??{},i=Object.entries(r).filter(([a])=>cS.has(a)),s=Object.keys(r).filter(a=>!cS.has(a));s.length>0&&$h(`[RevTurbine] update() ignored unrecognized key(s): ${s.join(", ")}. Patchable fields: ${fS.join(", ")}. A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify().`),i.length>0&&this.setUserContext(Object.fromEntries(i)),t&&this.updateUsage(t);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${jr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};T(hd,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var tg=hd;function rg(n){let e=Ej(n),t=new tg(e);if(!e.provider)return t;let r=(l,y)=>{try{return typeof l=="function"?l(e):l}catch(S){return console.warn(`[RevTurbine] Provider factory failed at chain index ${y}.`,S),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((l,y)=>r(l,y+1))].filter(l=>l!==null);if(i.length===0)return t.disableForProviderFailure("provider_factory_chain_failed"),t;let s=async(l,y,S)=>{let I=[];for(let P=0;P<i.length;P+=1){let N=i[P][l];if(N){I.push(P);try{return await N(...y)}catch(Z){let se=i.slice(P+1).some(Pe=>typeof Pe[l]=="function");console.warn(P===0&&se?`[RevTurbine] Primary provider ${l} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${l} failed at chain index ${P}.`,Z);}}}return I.length===0||t.disableForProviderFailure(`provider_${l}_chain_failed`),S()},a=t.getPlacement.bind(t),o=t.checkEntitlement.bind(t),p=t.persistPlacementTypes.bind(t),b=t.identify.bind(t);return t.getPlacement=async l=>s("getPlacement",[l],()=>a(l)),t.checkEntitlement=async(l,y)=>s("checkEntitlement",[l,y],()=>o(l,y)),t.persistPlacementTypes=async l=>s("persistPlacementTypes",[l],()=>p(l)),t.identify=(l,y)=>{let S=0;for(let I=0;I<i.length;I+=1){let P=i[I];if(P.identify){S+=1;try{P.identify(l,y);return}catch(R){let N=i.slice(I+1).some(Z=>typeof Z.identify=="function");console.warn(I===0&&N?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${I}.`,R);}}}if(S>0){t.disableForProviderFailure("provider_identify_chain_failed"),b(l,y);return}b(l,y);},t}var rm={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function Zh(n){return typeof n=="string"&&n.trim().length>0}function Ej(n){return om(n.localRuntime)!==void 0?{...n,tenantId:Zh(n.tenantId)?n.tenantId:rm.tenantId,apiKey:Zh(n.apiKey)?n.apiKey:rm.apiKey,endpoint:Zh(n.endpoint)?n.endpoint:rm.endpoint,mode:n.mode??rm.mode,runtimeMode:n.runtimeMode??"local_only"}:n}function wj(n){if(!Te(n))return null;let e=(p,b)=>String(p??"").trim().slice(0,b),t=e(n.id,256),r=e(n.label,256),i=e(n.description,1024),s=e(n.surfaceType,64);if(!t||!r||!i||!pS.has(s))return null;let a=Number(n.priority),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0;return {id:t,label:r,description:i,surfaceType:s,priority:o}}typeof window<"u"&&(window.RevTurbine={init:rg});var Yi=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 Tl(n){return n?{id:n.id??Yi.id,name:n.name??Yi.name,version:n.version??Yi.version,colors:{...Yi.colors,...n.colors},typography:{...Yi.typography,...n.typography},shape:{...Yi.shape,...n.shape},shadows:{...Yi.shadows,...n.shadows}}:{...Yi}}var Aj="revturbine:theme";function ig(n){return `${Aj}:${n}`}function Oj(n,e){try{let t=e.getItem(ig(n));if(!t)return null;let r=JSON.parse(t);return typeof r!="object"||r===null?null:r}catch{return null}}function jj(n,e,t){try{t.setItem(ig(n),JSON.stringify(e));}catch{}}function Fj(n,e){let t=e??oa();try{t.removeItem(ig(n));}catch{}}async function sg(n,e){let{tenantId:t,endpoint:r,apiKey:i,base:s}=n,a=n.storage??oa(),o=Oj(t,a),p=Tl({...s,...o});return n.onOverride?.(o),Lj(r,t,i).then(b=>{b&&(o?.version&&b.version===o.version||(jj(t,b,a),n.onOverride?.(b),e?.(Tl({...s,...b}))));}).catch(()=>{}),p}async function Lj(n,e,t){let r=n.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,s=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${t}`,"x-tenant-id":e,"x-request-id":i}});if(!s.ok)return null;let a=await s.json();return typeof a!="object"||a===null?null:a}var lm=class{constructor(e,t){T(this,"sdk");T(this,"options");T(this,"listeners",new Set);T(this,"_placementId","");T(this,"_decision",null);T(this,"_isLoading",false);T(this,"_error","");T(this,"_impressionTracked",false);T(this,"_loadSeq",0);T(this,"_rendered",false);T(this,"_exposed",false);T(this,"_exposureBasis",null);T(this,"_lastSlotKey",null);this.sdk=e,this.options=t;}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 t=this._decision;if(!t?.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:t.output?.surface?.slot_id,surfaceTemplateId:t.output?.surface?.template,payloadId:t.output?.output_id,experimentId:t.output?.experiment_id,variantKey:t.output?.variant_key,metadata:{decision_source:t.decisionSource,exposure_basis:e,decision_id:t.output?.decision_id??null}}));}emitPlacementLifecycle(e,t){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,...t?{exposure_basis:t}:{}},{immediate:!1});}catch{}}slotContext(){let e=this._decision,t=this.options.surfaceSlot;return {surface_slot_id:e?.output?.surface?.slot_id??t?.id??null,slot_name:t?.name??null,template_ids:t?.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,t=e?.visible?"slot_filled":e?.suppressionReason?"slot_suppressed":"slot_empty",r=`${this._placementId}|${e?.output?.decision_id??e?.requestId??""}|${t}`;if(this._lastSlotKey===r)return;this._lastSlotKey=r;let i=this.slotContext();this.emitSlotEvent("slot_evaluated",i),this.emitSlotEvent(t,i);}emitSlotError(e){let t=`${this._placementId}|slot_error`;this._lastSlotKey!==t&&(this._lastSlotKey=t,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,t){try{this.sdk.emitSemantic(e,t,{immediate:!1});}catch{}}emitPlacementOutcome(e){let t=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:t?.output?.surface?.slot_id??null,payload_id:t?.output?.output_id??null,decision_id:t?.output?.decision_id??null,decision_source:t?.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,t=e.userId||this.sdk.getUserContext().user_id;if(!t)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let i=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:t,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=i,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let s=this.exposureMode;return s==="legacy_resolution"?this.fireImpression("legacy_resolution"):s==="viewport"&&!Gh.supported&&this.fireImpression("render_fallback"),i}catch(i){return r===this._loadSeq&&(this._error=i instanceof Error?i.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,t){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let i=this._decision?.output?.decision_id??null;await this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,treatmentId:this._decision?.placementId,interactionType:e,surfaceSlotId:this._decision?.output?.surface?.slot_id,surfaceTemplateId:this._decision?.output?.surface?.template,payloadId:this._decision?.output?.output_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:i?{...t,decision_id:i}:t}),(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 gd(n){return n!==null&&(n.status==="denied"||n.allowed===false)}var cm=class{constructor(e,t){T(this,"sdk");T(this,"options");T(this,"listeners",new Set);T(this,"_isLoading",false);T(this,"_error",null);T(this,"_result",null);T(this,"_gatedPlacement",null);T(this,"_lastEvaluatedKey",null);this.sdk=e,this.options=t;}get state(){return {isLoading:this._isLoading,error:this._error,result:this._result,allowed:this._result?.status==="allowed",limited:this._result?.status==="limited",denied:gd(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return gd(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:t,autoGate:r,gatePlacementRequest:i}=this.options;this._isLoading=true,this._error=null,this.notify();try{let s=await this.sdk.checkEntitlement(e,t);if(this._result=s,this.emitGateEvaluated(e,s),!r||!gd(s))this._gatedPlacement=null;else if(s.placement)this._gatedPlacement=s.placement;else {let a=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=a;}return s}catch(s){return this._error=s instanceof Error?s.message:String(s),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,t){let r=`${e}|${t.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:t.status,gated:gd(t),reason:t.reason??null,limit:t.limit??null,used:t.used??null,remaining:t.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}notify(){for(let e of this.listeners)e();}},dm=class{constructor(e,t){T(this,"sdk");T(this,"theme");this.sdk=e,this.theme=t;}identify(e,t){this.sdk.identify(e,t);}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 lm(this.sdk,e)}async getPlacementBySlotId(e,t){return this.placement({...t,surfaceSlot:{id:e,name:e}}).load()}async getPlacement(e){return this.sdk.getPlacement(e)}entitlement(e){return new cm(this.sdk,e)}async checkEntitlement(e,t){return this.sdk.checkEntitlement(e,t)}async can(e,t){return this.sdk.checkEntitlement(e,t)}async trackEvent(e,t){return this.sdk.trackEvent(e,t)}track(e,t){return this.sdk.track(e,t)}async flushEvents(){return this.sdk.flushEvents()}};async function Vj(n){let{bootstrapPlacements:e,...t}=n,r=t,i=rg(r),s=r.user;s&&typeof s=="object"&&s.id&&i.identify(s.id,s);let a=Yi,p=om(r.localRuntime)?.theme;if(p&&typeof p=="object"?a=Tl(p):a=await sg({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let b=i.getUserContext().user_id,l=[];for(let y of e){let S=await i.registerPlacement(y.placement),I=y.userId||b;I&&l.push({placementId:S,userId:I,contextMode:y.contextMode,overrides:y.overrides,traits:y.traits,ttlMs:y.ttlMs});}l.length>0&&await i.bootstrapPlacementDecisions(l);}return new dm(i,a)}var Uj=/\{[^{}]+\}/g,Bj=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function qj(){return Math.random().toString(36).slice(2,11)}function yS(n){let{baseUrl:e="",Request:t=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:s,pathSerializer:a,headers:o,requestInitExt:p=void 0,...b}={...n};p=Bj()?p:void 0,e=vS(e);let l=[];async function y(S,I){let{baseUrl:P,fetch:R=r,Request:N=t,headers:Z,params:se={},parseAs:Pe="json",querySerializer:Y,bodySerializer:U=s??Mj,pathSerializer:Oe,body:It,middleware:Dn=[],...W}=I||{},Pt=e;P&&(Pt=vS(P)??e);let Xt=typeof i=="function"?i:_S(i);Y&&(Xt=typeof Y=="function"?Y:_S({...typeof i=="object"?i:{},...Y}));let Jt=Oe||a||Dj,rt=It===void 0?void 0:U(It,bS(o,Z,se.header)),yn=bS(rt===void 0||rt instanceof FormData?{}:{"Content-Type":"application/json"},o,Z,se.header),Mn=[...l,...Dn],ht={redirect:"follow",...b,...W,body:rt,headers:yn},rn,Nn,Sr=new N(Nj(S,{baseUrl:Pt,params:se,querySerializer:Xt,pathSerializer:Jt}),ht),ln;for(let bn in W)bn in Sr||(Sr[bn]=W[bn]);if(Mn.length){rn=qj(),Nn=Object.freeze({baseUrl:Pt,fetch:R,parseAs:Pe,querySerializer:Xt,bodySerializer:U,pathSerializer:Jt});for(let bn of Mn)if(bn&&typeof bn=="object"&&typeof bn.onRequest=="function"){let ze=await bn.onRequest({request:Sr,schemaPath:S,params:se,options:Nn,id:rn});if(ze)if(ze instanceof N)Sr=ze;else if(ze instanceof Response){ln=ze;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!ln){try{ln=await R(Sr,p);}catch(bn){let ze=bn;if(Mn.length)for(let cr=Mn.length-1;cr>=0;cr--){let mi=Mn[cr];if(mi&&typeof mi=="object"&&typeof mi.onError=="function"){let Tt=await mi.onError({request:Sr,error:ze,schemaPath:S,params:se,options:Nn,id:rn});if(Tt){if(Tt instanceof Response){ze=void 0,ln=Tt;break}if(Tt instanceof Error){ze=Tt;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(ze)throw ze}if(Mn.length)for(let bn=Mn.length-1;bn>=0;bn--){let ze=Mn[bn];if(ze&&typeof ze=="object"&&typeof ze.onResponse=="function"){let cr=await ze.onResponse({request:Sr,response:ln,schemaPath:S,params:se,options:Nn,id:rn});if(cr){if(!(cr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");ln=cr;}}}}let sn=ln.headers.get("Content-Length");if(ln.status===204||Sr.method==="HEAD"||sn==="0"&&!ln.headers.get("Transfer-Encoding")?.includes("chunked"))return ln.ok?{data:void 0,response:ln}:{error:void 0,response:ln};if(ln.ok)return {data:await(async()=>{if(Pe==="stream")return ln.body;if(Pe==="json"&&!sn){let ze=await ln.text();return ze?JSON.parse(ze):void 0}return await ln[Pe]()})(),response:ln};let mr=await ln.text();try{mr=JSON.parse(mr);}catch{}return {error:mr,response:ln}}return {request(S,I,P){return y(I,{...P,method:S.toUpperCase()})},GET(S,I){return y(S,{...I,method:"GET"})},PUT(S,I){return y(S,{...I,method:"PUT"})},POST(S,I){return y(S,{...I,method:"POST"})},DELETE(S,I){return y(S,{...I,method:"DELETE"})},OPTIONS(S,I){return y(S,{...I,method:"OPTIONS"})},HEAD(S,I){return y(S,{...I,method:"HEAD"})},PATCH(S,I){return y(S,{...I,method:"PATCH"})},TRACE(S,I){return y(S,{...I,method:"TRACE"})},use(...S){for(let I of S)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()`");l.push(I);}},eject(...S){for(let I of S){let P=l.indexOf(I);P!==-1&&l.splice(P,1);}}}}function um(n,e,t){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 `${n}=${t?.allowReserved===true?e:encodeURIComponent(e)}`}function xS(n,e,t){if(!e||typeof e!="object")return "";let r=[],i={simple:",",label:".",matrix:";"}[t.style]||"&";if(t.style!=="deepObject"&&t.explode===false){for(let o in e)r.push(o,t.allowReserved===true?e[o]:encodeURIComponent(e[o]));let a=r.join(",");switch(t.style){case "form":return `${n}=${a}`;case "label":return `.${a}`;case "matrix":return `;${n}=${a}`;default:return a}}for(let a in e){let o=t.style==="deepObject"?`${n}[${a}]`:a;r.push(um(o,e[a],t));}let s=r.join(i);return t.style==="label"||t.style==="matrix"?`${i}${s}`:s}function SS(n,e,t){if(!Array.isArray(e))return "";if(t.explode===false){let s={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[t.style]||",",a=(t.allowReserved===true?e:e.map(o=>encodeURIComponent(o))).join(s);switch(t.style){case "simple":return a;case "label":return `.${a}`;case "matrix":return `;${n}=${a}`;default:return `${n}=${a}`}}let r={simple:",",label:".",matrix:";"}[t.style]||"&",i=[];for(let s of e)t.style==="simple"||t.style==="label"?i.push(t.allowReserved===true?s:encodeURIComponent(s)):i.push(um(n,s,t));return t.style==="label"||t.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function _S(n){return function(t){let r=[];if(t&&typeof t=="object")for(let i in t){let s=t[i];if(s!=null){if(Array.isArray(s)){if(s.length===0)continue;r.push(SS(i,s,{style:"form",explode:true,...n?.array,allowReserved:n?.allowReserved||false}));continue}if(typeof s=="object"){r.push(xS(i,s,{style:"deepObject",explode:true,...n?.object,allowReserved:n?.allowReserved||false}));continue}r.push(um(i,s,n));}}return r.join("&")}}function Dj(n,e){let t=n;for(let r of n.match(Uj)??[]){let i=r.substring(1,r.length-1),s=false,a="simple";if(i.endsWith("*")&&(s=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(a="label",i=i.substring(1)):i.startsWith(";")&&(a="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let o=e[i];if(Array.isArray(o)){t=t.replace(r,SS(i,o,{style:a,explode:s}));continue}if(typeof o=="object"){t=t.replace(r,xS(i,o,{style:a,explode:s}));continue}if(a==="matrix"){t=t.replace(r,`;${um(i,o)}`);continue}t=t.replace(r,a==="label"?`.${encodeURIComponent(o)}`:encodeURIComponent(o));}return t}function Mj(n,e){return n instanceof FormData?n: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(n).toString():JSON.stringify(n)}function Nj(n,e){let t=`${e.baseUrl}${n}`;e.params?.path&&(t=e.pathSerializer(t,e.params.path));let r=e.querySerializer(e.params.query??{});return r.startsWith("?")&&(r=r.substring(1)),r&&(t+=`?${r}`),t}function bS(...n){let e=new Headers;for(let t of n){if(!t||typeof t!="object")continue;let r=t instanceof Headers?t.entries():Object.entries(t);for(let[i,s]of r)if(s===null)e.delete(i);else if(Array.isArray(s))for(let a of s)e.append(i,a);else s!==void 0&&e.set(i,s);}return e}function vS(n){return n.endsWith("/")?n.substring(0,n.length-1):n}function Hj(n){let e={...n.headers};return n.tenantId&&(e["x-rt-tenant-id"]=n.tenantId),n.token&&(e.Authorization=`Bearer ${n.token}`),yS({baseUrl:n.baseUrl,headers:e})}var ag=class extends Error{constructor(t,r){super(r);T(this,"status",t);this.name="ApiError";}};var og=class extends ub{constructor(t){let{exportedConfig:r,environmentId:i,...s}=t,a=ks(r,"BrowserRuntime.exportedConfig",{tenantId:t.tenantId,environmentId:i??"default"});if(!a)throw new Error("BrowserRuntime requires exportedConfig");let o=oa(t.storage),p=new vu({storage:o,tenantId:t.tenantId,maxRecords:t.maxImpressionRecords});super({...s,exportedConfig:a,storage:o,impressionStore:p});T(this,"_hydratePromise");let b=t.autoHydrate??true;this._hydratePromise=b?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function zj(n){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=Math.imul(e,16777619)>>>0;return e>>>0}function IS(n){return zj(n)/4294967296}function Kj(n){return Array.isArray(n)?n.map(e=>[e,1]):Object.entries(n).filter(([,e])=>Number.isFinite(e)&&e>0).map(([e,t])=>[e,t])}function PS(n,e,t){if(!n)return;let r=Kj(t.variants);if(r.length===0)return;let{exposure:i}=t;if(i!==void 0&&(!(i>0)||i<1&&IS(`${n}:${e}:exposure`)>=i))return;let s=r.reduce((o,[,p])=>o+p,0),a=IS(`${n}:${e}:variant`)*s;for(let[o,p]of r)if(a-=p,a<0)return o;return r[r.length-1][0]}function Gj(n){let{experiments:e,subject:t}=n;return {domain:"experiments",resolve(){let r=typeof t=="function"?t():t;if(!r)return {assignments:{}};let i={};for(let[s,a]of Object.entries(e)){let o=PS(r,s,a);o!==void 0&&(i[s]=o);}return {assignments:i}}}}var $j=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function Zj(n){let e={};for(let[t,r]of Object.entries(n.properties))e[$j.has(t)?`rt_prop_${t}`:t]=r;return {...e,tenant_id:n.tenant_id,user_id:n.user_id,anonymous_id:n.anonymous_id,session_id:n.session_id,url:n.url,path:n.path,page_title:n.page_title,event_time:n.event_time}}var lg=class{constructor(e){T(this,"name");T(this,"handler");T(this,"transform");T(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 t of e){if(this.filterSet&&!this.filterSet.has(t.type))continue;let r=t.type,i=Zj(t);if(this.transform){let s=this.transform(r,i);if(s===null)continue;r=s.eventName,i=s.properties;}try{this.handler(r,i);}catch{}}}};function TS(n){let e=new lg(n);return {domain:"events",resolve:()=>({consumers:[e]})}}function CS(n){let{posthog:e,filter:t,transform:r,name:i}=n;return TS({name:i??"posthog",filter:t,transform:r,handler:(s,a)=>{e.capture(s,a);}})}function Yj(n){let{posthog:e,filter:t,transform:r,name:i,syncIdentity:s=false,syncAccountGroup:a=false,mirrorNavigation:o=false}=n,p=i??"posthog",b=CS({posthog:e,filter:t,transform:r,name:p}),l=null,y=null,S=I=>{try{if(s){let P=I.user_id;P&&P!==l?(e.identify?.(P,I.identity.traits),l=P):!P&&l!==null&&(e.reset?.(),l=null);}if(a){let P=I.identity.traits.account_id;typeof P=="string"&&P&&P!==y&&(e.group?.("account",P),y=P);}o&&I.type==="page_view"&&e.capture("$pageview",{$current_url:I.url});}catch{}};return {domain:"events",async resolve(){let P=(await b.resolve())?.consumers??[];return {consumers:[{name:p,consume(N){for(let Z of N)S(Z);for(let Z of P)Z.consume(N);}}]}}}}var Wj=["banner_placement"],Xj=["banner_placement","in_page_card"],Jj=["toast_message"],Qj=["modal_overlay"];var e2=["banner_placement","in_page_card","usage_counter","button"],t2=["modal_overlay","inline_gate_message"],n2=["toast_message","modal_overlay","banner_placement"];function Cl(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var mm=class extends Error{constructor(t,r){super(`RevTurbine client-session mint failed (status ${t})`);T(this,"status",t);T(this,"requestId",r);this.name="RevTurbineClientSessionError";}},pm=class{constructor(e){T(this,"tenantId");T(this,"apiKey");T(this,"endpoint");T(this,"defaultTtlSeconds");T(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 t=Cl(),r=e.anonymousId??Cl(),[i,s,a,o,p]=await Promise.all([this.evaluatePlacements(t,e),this.evaluateEntitlements(t,e),e.includeTrialStatus?this.fetchTrialStatus(t,e.userId):Promise.resolve(void 0),e.includeUserContext?this.fetchUserContext(t,e.userId):Promise.resolve(void 0),e.includeTheme?this.fetchTheme(t):Promise.resolve(void 0)]),b={version:"1.0.0",request_id:t,tenant_id:this.tenantId,evaluated_at:new Date().toISOString(),ttl_seconds:this.defaultTtlSeconds,user:{id:e.userId,anonymous_id:r,traits:e.traits},decisions:i};return s&&Object.keys(s).length>0&&(b.entitlements=s),a&&(b.trial_status=a),o&&(b.user_context=o),p&&(b.theme=p),b}async getPlacement(e,t,r){let i=Cl(),s={request_id:i,user_id:e,traits:r??{},slot_id:t.slotId,entitlement_handle:t.entitlementHandle,plan_handle:t.planHandle,placement_handle:t.placementHandle};try{let a=await this.apiCall(i,"/api/decision-api/v1/decide-context",s);if(!a.ok)return {slot_id:t.slotId,entitlement_handle:t.entitlementHandle,plan_handle:t.planHandle,placement_handle:t.placementHandle,visible:!1,reason_codes:["api_error"]};let o=await a.json(),p=o.decision,b=p?.visible??!1,l={slot_id:t.slotId,entitlement_handle:t.entitlementHandle,plan_handle:t.planHandle,placement_handle:t.placementHandle,visible:b};return b&&p&&(l.output=p),o.reason_codes&&(l.reason_codes=o.reason_codes),l}catch{return {slot_id:t.slotId,entitlement_handle:t.entitlementHandle,plan_handle:t.planHandle,placement_handle:t.placementHandle,visible:false,reason_codes:["network_error"]}}}async checkEntitlement(e,t,r){let i=Cl(),s={request_id:i,user_id:e,entitlement_handle:t,...r??{}};try{let a=await this.apiCall(i,"/api/decision-api/v1/check-entitlement",s);if(!a.ok)return {status:"denied",allowed:!1,reason:"api_error"};let o=await a.json();return {status:o.status??"denied",allowed:o.allowed??!1,reason:o.reason,current_tier:o.current_tier}}catch{return {status:"denied",allowed:false,reason:"network_error"}}}can(e,t,r){return this.checkEntitlement(e,t,r)}async getTrialStatus(e){let t=Cl();return this.fetchTrialStatus(t,e)}async createClientSession(e){let t=Cl(),r=await this.apiCall(t,"/api/sdk/client-sessions",{subject:e.subject,surface:e.surface,capabilities:e.capabilities??["context:read"]});if(!r.ok)throw new mm(r.status,t);let i=await r.json();return {client_token:i.client_token,expires_at:i.expires_at}}async apiCall(e,t,r){return this.fetchFn(`${this.endpoint}${t}`,{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,t){return this.fetchFn(`${this.endpoint}${t}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}async evaluatePlacements(e,t){let r=t.placements??[];return r.length===0?[]:r.length>1?this.evaluatePlacementsBatch(e,t,r):[await this.getPlacement(t.userId,r[0],t.traits)]}async evaluatePlacementsBatch(e,t,r){let i={request_id:e,user_id:t.userId,traits:t.traits??{},usage_balances:t.usageBalances??{},page:t.page??{},placements:r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle}))};try{let s=await this.apiCall(e,"/api/decision-api/v1/bootstrap-context",i);return s.ok?(await s.json()).decisions.map((o,p)=>{let b=r[p]??{},l=o.result.decision?.visible??!1,y={slot_id:b.slotId,entitlement_handle:b.entitlementHandle,plan_handle:b.planHandle,placement_handle:b.placementHandle,visible:l};return l&&o.result.decision&&(y.output=o.result.decision),o.result.reason_codes&&(y.reason_codes=o.result.reason_codes),y}):r.map(o=>({slot_id:o.slotId,entitlement_handle:o.entitlementHandle,plan_handle:o.planHandle,placement_handle:o.placementHandle,visible:!1,reason_codes:["api_error"]}))}catch{return r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle,visible:false,reason_codes:["network_error"]}))}}async evaluateEntitlements(e,t){let r=t.entitlementHandles??[];if(r.length===0)return;let i={},s=await Promise.allSettled(r.map(async a=>{let o=await this.checkEntitlement(t.userId,a);return {handle:a,result:o}}));for(let a of s)a.status==="fulfilled"&&(i[a.value.handle]=a.value.result);return i}async fetchTrialStatus(e,t){try{let r=await this.apiCall(e,"/api/decision-api/v1/trial-status",{request_id:e,user_id:t});if(!r.ok)return {in_trial:!1};let i=await r.json();return {in_trial:i.in_trial??!1,...i.trial_type!==void 0?{trial_type:i.trial_type}:{},...i.plan_handle!==void 0?{plan_handle:i.plan_handle}:{},...i.trial_limit_type!==void 0?{trial_limit_type:i.trial_limit_type}:{},...i.progress_percent!==void 0?{progress_percent:i.progress_percent}:{},...i.day_number!==void 0?{day_number:i.day_number}:{},...i.days_remaining!==void 0?{days_remaining:i.days_remaining}:{},...i.usage_entitlement_handle!==void 0?{usage_entitlement_handle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{usage_consumed:i.usage_consumed}:{},...i.usage_remaining!==void 0?{usage_remaining:i.usage_remaining}:{},...i.usage_limit!==void 0?{usage_limit:i.usage_limit}:{}}}catch{return {in_trial:false}}}async fetchUserContext(e,t){try{let r=await this.apiCall(e,"/api/decision-api/v1/user-context",{request_id:e,user_id:t});if(!r.ok)return;let i=await r.json();return {segments:i.segments,traits:i.traits,usage_balances:i.usage_balances}}catch{return}}async fetchTheme(e){try{let t=await this.apiGet(e,"/api/sdk/theme");if(!t.ok)return;let r=await t.json();return typeof r!="object"||r===null?void 0:r}catch{return}}};var i2=/^[a-z0-9._]{1,100}$/,Pa={Persisted:"persisted",Transient:"transient"},Is={Internal:"internal",External:"external"},Wi={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},s2="readOnly";function di(n){let e={};for(let[t,r]of Object.entries(n.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[s2]===true||(e[t]=r);}return z.object(e)}function Mr(n){let e=di(n),t=e.shape.handle;return t&&typeof t.regex=="function"?e.extend({handle:t.regex(i2)}):e}var {Unrestricted:Qr}=Wi,{Transient:ei,Persisted:o2}=Pa,{Internal:no,External:Gs}=Is;z.object({page:z.coerce.number().int().min(1).default(1).meta(Qr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Qr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs});var Fn=z.object({created_at:z.string().datetime().meta({...Qr,readOnly:true}),updated_at:z.string().datetime().meta({...Qr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs}),Cn=z.object({id:z.string().min(1).meta({...Qr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs}),Ln=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Qr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":no});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs});var dg=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":ei,"x-revturbine-schema-exposure":Gs}),RS=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs});var fm=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs}),ES=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Gs});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":no});var $s=z.string().min(1).max(200),or=z.string().min(1).max(100),hm=z.string().max(500).optional(),vi=z.record(z.string(),z.unknown()).default({}),ro=z.number().int().min(10).max(100).multipleOf(10),gm=z.string().datetime().nullable().default(null),tr=z.object({environment_id:z.string().min(1).default("production").meta({...Qr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":no}),lr=z.object({playbook_version_id:z.string().nullable().default(null).meta(Qr),is_current:z.boolean().default(true).meta({...Qr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Qr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Qr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Qr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Qr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":no}),l2=Cn.merge(Fn).merge(Ln).merge(tr).extend({handle:or.meta({...Qr,readOnly:true}),active:z.boolean().default(true).meta({...Qr,readOnly:true})});function Nr(n){return l2.meta({id:n,"x-revturbine-schema-persistence":o2,"x-revturbine-schema-exposure":no})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":no});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":ei,"x-revturbine-schema-exposure":no});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":ei,"x-revturbine-schema-exposure":Gs});new Set(dg.options);var AS=z.enum(["session","day","week","month"]),OS=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(OS),cap:z.object({count:z.number().int().min(1),period:AS})});var C2="__self__",k2={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},VS={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:C2,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:k2},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var qS={Named:"named",Minted:"minted"},DS="x-revturbine-schema-identity";function Ts(n="handle"){return {[DS]:{kind:qS.Named,handleField:n}}}function Ji(n="handle"){return {[DS]:{kind:qS.Minted,handleField:n}}}var _n={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Xi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},w2="x-revturbine-context",A2="x-revturbine-in-config",O2="x-revturbine-sdk-input",j2="x-revturbine-source",F2="x-revturbine-deprecation",L2={[_n.Playbook]:Xi.Customer,[_n.Branding]:Xi.Customer,[_n.Billing]:Xi.Stripe,[_n.Metering]:Xi.Customer,[_n.CustomerOperations]:Xi.Runtime,[_n.EventIngestion]:Xi.Runtime};function Xn(n,e){return {[w2]:n,[A2]:e.inConfig??n===_n.Playbook,[O2]:e.sdkInput,[j2]:e.source??L2[n]}}function ug(n){return {deprecated:true,[F2]:{since:n.since,replacement:n.replacement,remove_after:n.removeAfter,reason:n.reason}}}var tn=n=>z.object({items:z.array(n)}),nr=z.object({error:z.string(),code:z.string(),request_id:z.string()}),w=n=>n,nn=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:Se}=Wi,{Persisted:vg,Transient:ui}=Pa,{Internal:MS,External:ti}=Is,NS=Xn(_n.Playbook,{sdkInput:true}),V2=Xn(_n.Playbook,{inConfig:false,sdkInput:false}),HS=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":ui,"x-revturbine-schema-exposure":ti}),vm=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),U2=z.enum(RS).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),B2=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),zS=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),mg=z.object({entitlement_id:z.string().min(1).meta(Se),entitlement_handle:z.string().min(1).meta(Se),status:U2.meta(Se),limit:z.number().optional().meta(Se),used:z.number().optional().meta(Se),allocation:vm.optional().meta(Se),enforcement:zS.optional().meta(Se),source:B2.optional().meta(Se),plan_id:z.string().optional().meta(Se),segment_id:z.string().optional().meta(Se),seat_type_id:z.string().optional().meta(Se),rule_id:z.string().optional().meta(Se)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti,...Wi.Operational});z.object({account:z.record(z.string(),mg).optional().meta(Se),instance:z.record(z.string(),mg).optional().meta(Se),user:z.record(z.string(),mg).optional().meta(Se)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti,...Wi.Operational});var q2=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),D2=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),KS=z.object({kind:D2.meta(Se),id:z.string().min(1).meta(Se)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),M2=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),Ol=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),name:$s.meta(Se),handle:or.meta(Se),customer_facing_description:z.string().max(500).optional().meta(Se),type:fm.meta(Se),unit:z.string().max(100).optional().meta(Se),period_scope:HS.optional().meta(Se),allocation:vm.optional().meta(Se),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(Se),sort_order:z.number().int().default(0).meta(Se),metadata:vi.meta(Se)}).meta({id:"Entitlement","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":ti,...NS,...Ts()}),N2=Nr("EntitlementAnchor"),ql=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Se,readOnly:true}),handle:or.meta({...Se,readOnly:true}),entitlement_id:z.string().min(1).meta(Se),targets:z.array(KS).min(1).meta(Se),segment_ids:z.array(z.string()).default([]).meta(Se),visibility:q2.default("public").meta(Se),period_scope:HS.optional().meta(Se),instance:z.string().max(100).optional().meta(Se),reset_period:M2.optional().meta(Se),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),enforcement:zS.optional().meta(Se),warning_threshold_percent:ro.optional().meta(Se),overage_price_ref:z.string().optional().meta(Se),grace_period_hours:z.number().int().min(0).optional().meta(Se),tier_value:z.string().optional().meta(Se),rate_value:z.number().optional().meta(Se),initial_grant:z.number().optional().meta(Se),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(Se),rollover_enabled:z.boolean().optional().meta(Se),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(Se),seat_type_id:z.string().optional().meta(Se),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(Se),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(Se),stripe_metered_price_id:z.string().optional().meta(Se),enabled:z.boolean().optional().meta(Se),allocation:vm.optional().meta(Se),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(Se),amount_cents:z.number().int().optional().meta(Se),currency:z.string().optional().meta(Se)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":MS,...NS,...Ji()}),H2=Nr("EntitlementRuleAnchor");ql.superRefine((n,e)=>{n.reset_period==="billing_period"&&n.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let t=n.allowance_value;(t==="unlimited"||typeof t=="number"&&t>0)&&n.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 z2=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),K2=z.object({code:z2.meta(Se),message:z.string().min(1).meta(Se),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Se)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),pg=ql.extend({warnings:z.array(K2).optional().meta(Se)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ui,"x-revturbine-schema-exposure":ti}),fg=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({handle:or.meta({...Se,readOnly:true}),rule_id:z.string().min(1).meta(Se),experiment_id:z.string().min(1).meta(Se),variant_name:z.string().min(1).max(200).meta(Se),is_control:z.boolean().default(false).meta(Se),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Se)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":vg,"x-revturbine-schema-exposure":MS,...V2,...Ji()}),G2=di(Ol),$2=di(ql);({"/api/entitlement-anchors":{get:w({operationId:"listEntitlementAnchors",requestParams:{query:nn},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:tn(N2)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:w({operationId:"listEntitlementRuleAnchors",requestParams:{query:nn},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:tn(H2)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:w({operationId:"listEntitlements",requestParams:{query:nn},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:tn(Ol)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:w({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(Ol)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ol}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:w({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Ol}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:w({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:G2}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ol}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:w({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:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:w({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:nn},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:tn(ql)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:w({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(ql)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:w({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:$2}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:w({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:w({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:pg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:w({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:nn},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:tn(fg)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:w({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Mr(fg)}}},responses:{201:{description:"Created",content:{"application/json":{schema:fg}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Xe}=Wi,{Persisted:Sd,Transient:Id}=Pa,{Internal:Cs}=Is,GS=Xn(_n.Playbook,{sdkInput:true}),$S=Xn(_n.Playbook,{inConfig:false,sdkInput:true}),Z2=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Id,"x-revturbine-schema-exposure":Cs}),yg=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Id,"x-revturbine-schema-exposure":Cs}),ZS=z.object({name:$s.meta(Xe),handle:or.meta(Xe),plan_id:z.string().nullable().optional().meta(Xe),segment_id:z.string().nullable().optional().meta(Xe),trial_limit_type:yg.default("time").meta(Xe),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Xe),grace_period_days:z.number().int().min(0).default(0).meta(Xe),usage_entitlement_handle:z.string().min(1).optional().meta(Xe),usage_limit_value:z.number().int().min(1).optional().meta(Xe),require_payment_method:z.boolean().default(false).meta(Xe),auto_convert:z.boolean().default(true).meta(Xe),convert_to_plan_id:z.string().optional().meta(Xe),fallback_plan_id:z.string().optional().meta(Xe),limit_per_customer:z.number().int().min(1).default(1).meta(Xe),is_active:z.boolean().default(true).meta(Xe),metadata:vi.meta(Xe)}),Rl=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Xe,readOnly:true})}).merge(ZS).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":Sd,"x-revturbine-schema-exposure":Cs,...GS,...Ts()}),Y2=Nr("FreeTrialRuleAnchor"),W2=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Id,"x-revturbine-schema-exposure":Cs}),YS=z.object({name:$s.meta(Xe),handle:or.meta(Xe),premium_plan_id:z.string().min(1).meta(Xe),fallback_plan_id:z.string().min(1).meta(Xe),segment_id:z.string().nullable().optional().meta(Xe),trial_limit_type:yg.default("time").meta(Xe),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Xe),usage_entitlement_handle:z.string().min(1).optional().meta(Xe),usage_limit_value:z.number().int().min(1).optional().meta(Xe),start_policy:W2.default("signup").meta(Xe),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(Xe),entitlements_during_trial:z.array(z.string()).default([]).meta(Xe),is_active:z.boolean().default(true).meta(Xe),metadata:vi.meta(Xe)}),El=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Xe,readOnly:true})}).merge(YS).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":Sd,"x-revturbine-schema-exposure":Cs,...GS,...Ts()}),X2=Nr("ReverseTrialRuleAnchor"),WS=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Id,"x-revturbine-schema-exposure":Cs}),XS=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Id,"x-revturbine-schema-exposure":Cs}),wl=Cn.merge(Fn).merge(Ln).extend({trial_limit_policy:WS.default("1_per_lifetime").meta(Xe),eligibility_scope:XS.default("per_customer").meta(Xe)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":Sd,"x-revturbine-schema-exposure":Cs,...$S}),Al=Cn.merge(Fn).merge(Ln).extend({trial_limit_policy:WS.default("1_per_lifetime").meta(Xe),eligibility_scope:XS.default("per_customer").meta(Xe)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":Sd,"x-revturbine-schema-exposure":Cs,...$S}),_m=Cn.merge(Fn).merge(Ln).extend({customer_id:z.string().min(1).meta(Xe),rule_id:z.string().min(1).meta(Xe),rule_type:z.enum(["free_trial","reverse_trial"]).meta(Xe),plan_id:z.string().min(1).meta(Xe),status:Z2.default("active").meta(Xe),started_at:z.string().datetime().meta({...Xe,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(Xe),trial_limit_type:yg.default("time").meta(Xe),usage_entitlement_handle:z.string().min(1).optional().meta(Xe),usage_limit_value:z.number().int().min(1).optional().meta(Xe),converted_at:gm.meta(Xe),cancelled_at:gm.meta(Xe),metadata:vi.meta(Xe)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":Sd,"x-revturbine-schema-exposure":Cs});({"/api/free-trial-rule-anchors":{get:w({operationId:"listFreeTrialRuleAnchors",requestParams:{query:nn},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:tn(Y2)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:w({operationId:"listFreeTrialRules",requestParams:{query:nn},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:tn(Rl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:w({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:Rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:w({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Rl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:w({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:w({operationId:"listReverseTrialRuleAnchors",requestParams:{query:nn},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:tn(X2)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:w({operationId:"listReverseTrialRules",requestParams:{query:nn},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:tn(El)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:w({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:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:w({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:El.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:w({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:w({operationId:"listFreeTrialSettings",requestParams:{query:nn},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:tn(wl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:w({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:wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:w({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:wl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:w({operationId:"listReverseTrialSettings",requestParams:{query:nn},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:tn(Al)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:w({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:Al}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:w({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Al.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Al}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:w({operationId:"listTrialInstances",requestParams:{query:nn},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:tn(_m)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:w({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:_m}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:w({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:_m}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:w({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:_m}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:$t,Financial:bm}=Wi,{Persisted:Pd,Transient:ym}=Pa,{External:Zs}=Is,J2=Xn(_n.Playbook,{sdkInput:true}),Q2=Xn(_n.Playbook,{sdkInput:false}),xg=Xn(_n.Billing,{sdkInput:false}),Ca=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Zs}),Td=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Zs}),xm=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Zs}),jl=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:$s.meta($t),handle:or.meta($t),tier_position:z.number().int().min(0).default(0).meta($t),sort_order:z.number().int().default(0).meta($t),visibility:Ca.default("public").meta($t),metadata:vi.meta($t)}).meta({id:"Plan","x-revturbine-schema-persistence":Pd,"x-revturbine-schema-exposure":Zs,...J2,...Ts()}),eF=Nr("PlanAnchor"),Fl=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:or.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(bm),pricing_model:Td.meta($t),visibility:Ca.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:xm.default("static").meta($t)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Pd,"x-revturbine-schema-exposure":Zs,...xg,...Ji()}),tF=Nr("PlanVariationAnchor"),Ll=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:$s.meta($t),handle:or.meta($t),sort_order:z.number().int().default(0).meta($t),visibility:Ca.default("public").meta($t),metadata:vi.meta($t)}).meta({id:"AddOn","x-revturbine-schema-persistence":Pd,"x-revturbine-schema-exposure":Zs,...Q2,...Ts()}),nF=Nr("AddOnAnchor"),Vl=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:or.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(bm),pricing_model:Td.meta($t),visibility:Ca.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:xm.default("static").meta($t)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Pd,"x-revturbine-schema-exposure":Zs,...xg,...Ji()}),rF=Nr("AddOnVariationAnchor"),iF=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":ym,"x-revturbine-schema-exposure":Zs}),Ul=Cn.merge(Fn).merge(Ln).extend({stripe_price_id:z.string().min(1).meta($t),stripe_product_id:z.string().min(1).meta($t),billing_period:iF.meta($t),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(bm),currency:ES.meta(bm),pricing_model:Td.meta($t),nickname:z.string().nullable().default(null).meta($t),is_mock:z.boolean().default(false).meta($t),last_updated_from_stripe:gm.meta($t)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Pd,"x-revturbine-schema-exposure":Zs,...xg}),sF=di(jl),aF=di(Fl),oF=di(Ll),lF=di(Vl),cF=di(Ul);({"/api/plan-anchors":{get:w({operationId:"listPlanAnchors",requestParams:{query:nn},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:tn(eF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:w({operationId:"listPlans",requestParams:{query:nn},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:tn(jl)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:w({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(jl)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:jl}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:w({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:jl}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:w({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:sF}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:jl}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:w({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:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:w({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:w({operationId:"listPlanVariationAnchors",requestParams:{query:nn},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:tn(tF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:w({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:nn},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:tn(Fl)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:w({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Fl)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:w({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:Fl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:w({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:aF}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Fl}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:w({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:w({operationId:"listAddOnAnchors",requestParams:{query:nn},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:tn(nF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:w({operationId:"listAddOns",requestParams:{query:nn},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:tn(Ll)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:w({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Ll)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Ll}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:w({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:Ll}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:w({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:oF}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Ll}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:w({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:w({operationId:"listAddOnVariationAnchors",requestParams:{query:nn},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:tn(rF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:w({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:nn},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:tn(Vl)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:w({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Vl)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:w({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:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:w({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:lF}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Vl}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:w({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:w({operationId:"listStripePrices",requestParams:{query:nn},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:tn(Ul)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:w({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Mr(Ul)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Ul}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:w({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:Ul}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:w({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:cF}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Ul}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:w({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:_}=Wi,{Persisted:Dl,Transient:tt}=Pa,{Internal:ji,External:Ft}=Is,St=Xn(_n.Playbook,{sdkInput:true}),Bl=Xn(_n.Playbook,{sdkInput:false}),Ta=Xn(_n.Playbook,{inConfig:false,sdkInput:false}),JS=Xn(_n.Playbook,{inConfig:false,sdkInput:true}),_d=Xn(_n.Playbook,{inConfig:false,sdkInput:true,source:Xi.CodeConstant}),hg=Xn(_n.Playbook,{inConfig:false,sdkInput:true,source:Xi.Runtime}),gg=Xn(_n.Playbook,{inConfig:false,sdkInput:false,source:Xi.Runtime}),dF=Xn(_n.Billing,{sdkInput:false}),uF=Xn(_n.Metering,{sdkInput:false}),mF=Xn(_n.Branding,{inConfig:true,sdkInput:true}),pF=Xn(_n.Branding,{sdkInput:false}),fF="1.0.0",bd=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),name:$s.meta(_),handle:or.meta(_),description:hm.meta(_),is_default:z.boolean().default(false).meta(_),entitlement_ids:z.array(z.string()).default([]).meta(_),metadata:vi.meta(_)}).meta({id:"SeatType","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...Ta,...Ts()}),hF=Nr("SeatTypeAnchor"),vd=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:or.meta(_),label:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().nullable().default(null).meta(_),example_value:z.string().nullable().default(null).meta(_),value_map:z.record(z.string(),z.string()).default({}).meta(_),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(_),metadata:vi.meta(_)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...Ta,...Ts()}),gF=Nr("PersonalizationTokenAnchor"),_F=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),_g=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({handle:or.meta({..._,readOnly:true}),stripe_account_id:z.string().min(1).meta(_),live_mode:z.boolean().default(false).meta(_),onboarding_state:_F.default("not_started").meta({..._,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({..._,readOnly:true}),charges_enabled:z.boolean().default(false).meta({..._,readOnly:true}),details_submitted:z.boolean().default(false).meta({..._,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({..._,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({..._,readOnly:true}),sync_products:z.boolean().default(true).meta(_),sync_prices:z.boolean().default(true).meta(_),sync_subscriptions:z.boolean().default(true).meta(_),sync_invoices:z.boolean().default(false).meta(_),default_currency:z.string().length(3).default("USD").meta(_),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(_),last_sync_at:z.string().optional().meta({..._,readOnly:true}),metadata:vi.meta(_)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...dF,...Ji()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(_),workspace_name:z.string().optional().meta(_),logo_url:z.string().optional().meta(_),support_email:z.string().optional().meta(_)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...pF});var yd=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({handle:or.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),meter_key:z.string().min(1).max(100).meta(_),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(_),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(_),stripe_meter_id:z.string().nullable().default(null).meta(_),is_active:z.boolean().default(true).meta(_),metadata:vi.meta(_)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...uF,...Ji()}),US=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),xd=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:or.meta({..._,readOnly:true}),entitlement_id:z.string().min(1).meta(_),soft_limit_percent:z.number().min(0).max(100).default(80).meta(_),hard_limit_percent:z.number().min(0).max(100).default(100).meta(_),soft_limit_action:US.default("warn").meta(_),hard_limit_action:US.default("block").meta(_),grace_period_hours:z.number().int().min(0).default(0).meta(_),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...JS,...Ji()}),bF=Nr("UsageEnforcementSettingsAnchor"),vF=z.object({kind:z.enum(["template","slot"]).meta(_),id:z.string().min(1).meta(_),label:z.string().min(1).optional().meta(_)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),yF=z.object({id:z.string().min(1).meta(_),group:z.array(vF).min(1).meta(_),cap:z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month"]).meta(_)}).meta(_)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),xF=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),QS=z.object({capRules:z.array(yF).default([]).meta(_),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(_),remindLaterMinutes:z.number().int().min(0).default(60).meta(_),testMode:xF.default("off").meta(_)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":ji}),bg=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({..._,readOnly:true}),handle:or.meta({..._,readOnly:true}),global_frequency_cap:QS.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(_)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Dl,"x-revturbine-schema-exposure":ji,...JS,...Ji()}),SF=Nr("PlacementSettingsAnchor"),IF=z.object({field:z.string().min(1).meta(_),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(_),value:z.string().meta(_)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),PF=z.object({name:z.string().min(1).meta(_),handle:z.string().min(1).meta(_),predicates:z.array(IF).optional().meta(_),dimension_id:z.string().optional().meta(_),experiment_id:z.string().min(1).optional().meta(_)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),TF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),tier_position:z.number().int().min(0).default(0).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:Ca.default("public").meta(_)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),CF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),sort_order:z.number().int().min(0).default(0).meta(_),visibility:Ca.default("public").meta(_)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...Bl}),kF=z.object({handle:z.string().min(1).meta(_),plan_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:Td.meta(_),visibility:Ca.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:xm.meta(_)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...Ta}),RF=z.object({handle:z.string().min(1).meta(_),addon_handle:z.string().min(1).meta(_),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(_),segment_handle:z.string().nullable().default(null).meta(_),price_amount:z.number().min(0).meta(_),pricing_model:Td.meta(_),visibility:Ca.default("public").meta(_),stripe_price_id:z.string().nullable().default(null).meta(_),price_source:xm.meta(_)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...Ta}),EF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),description:z.string().nullable().default(null).meta(_),is_default:z.boolean().default(false).meta(_),entitlement_handles:z.array(z.string()).default([]).meta(_)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),wF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().nullable().default(null).meta(_),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(_),soft_limit_action:z.string().meta(_),hard_limit_action:z.string().meta(_),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(_),notification_channels:z.array(z.string()).default([]).meta(_),is_active:z.boolean().default(true).meta(_)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),AF=z.object({handle:z.string().min(1).meta(_),global_frequency_cap:QS.nullable().default(null).meta(_),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(_),suppress_for_paid:z.boolean().default(false).meta(_),suppress_for_trial:z.boolean().default(false).meta(_),allow_stacking:z.boolean().default(false).meta(_),priority_collision_strategy:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),OF=z.object({handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:z.string().nullable().default(null).meta(_),visibility_toggle:z.boolean().default(true).meta(_),source_type:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),jF=z.object({handle:z.string().min(1).meta(_),entitlement_handle:z.string().min(1).meta(_),meter_handle:z.string().min(1).meta(_),limit:z.number().int().min(0).nullable().default(null).meta(_),reset_period:z.string().nullable().default(null).meta(_)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),FF=z.object({unique_handle:z.string().min(1).meta(_),name:z.string().min(1).meta(_),type:fm.meta(_),unit:z.string().optional().meta(_),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),eI=z.object({id:z.string().min(1).meta(_),entitlement_id:z.string().min(1).meta(_),targets:z.array(KS).min(1).meta(_),segment_ids:z.array(z.string()).default([]).meta(_),kind:fm.optional().meta({..._,readOnly:true}),unit:z.string().optional().meta({..._,readOnly:true}),tier_name:z.string().optional().meta({..._,readOnly:true}),tier_description:z.string().optional().meta({..._,readOnly:true}),...ql.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(_),allocation:vm.optional().meta(_)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),LF=z.object({slot_id:z.string().min(1).meta(_),active:z.boolean().meta(_),triggers:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),VF=z.object({id:z.string().min(1).meta(_),label:z.string().min(1).meta(_),description:z.string().meta(_),surface_type:z.string().meta(_),placement_handle:z.string().min(1).meta(_),template:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),UF=z.object({name:z.string().min(1).meta(_),type:z.string().optional().meta(_),required:z.boolean().optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),BF=z.object({id:z.string().min(1).meta(_),surface_type:z.string().meta(_),fields:z.array(UF).optional().meta(_)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),qF=z.enum(["open_checkout_modal","navigate_to_plans","open_upgrade_modal","open_placement","book_demo","open_feature_tour","extend_trial","switch_billing_period","custom_url","dismiss","contact_sales","complete_onboarding","invite_teammate","refer_friend","verify_work_email","update_payment_method","enable_auto_renewal","manage_subscription","snooze"]).meta({id:"RevTurbineConfigUiPathActionType","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),DF=z.object({name:z.string().min(1).meta(_),action_type:qF.meta(_),plan_handle:z.string().optional().meta(_),promotion_id:z.string().optional().meta(_),placement_handle:z.string().optional().meta(_),url:z.string().optional().meta(_),tour_id:z.string().optional().meta(_),target_billing_period:z.enum(["monthly","annual"]).optional().meta(_),description:z.string().optional().meta(_)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),MF=z.object({id:z.string().meta(_),name:z.string().meta(_),discount:z.string().meta(_),type:z.string().meta(_),status:z.string().meta(_)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),NF=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(_),label:z.string().min(1).meta(_),description:z.string().optional().meta(_),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(_),data_source:z.string().optional().meta(_),example_value:z.string().optional().meta(_),value_map:z.record(z.string(),z.string()).optional().meta(_),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(_)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),BS=z.object({header:z.string().optional().meta(_),body:z.string().optional().meta(_),cta_label:z.string().optional().meta(_),secondary_cta_label:z.string().optional().meta(_)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),HF=z.object({block_id:z.string().min(1).meta(_),tenant_id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),surface_template_id:z.string().optional().meta(_),default_content:BS.meta(_),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:BS})).optional().meta(_),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(_),tokens_used:z.array(z.string()).optional().meta(_),status:z.enum(["draft","active","archived"]).meta(_),created_at:z.string().datetime().meta({..._,readOnly:true}),updated_at:z.string().datetime().meta({..._,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),zF=z.object({label:z.string().meta(_),path:wS.meta(_),config:z.record(z.string(),z.string()).optional().meta(_)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),tI=z.object({template_id:z.string().min(1).meta(_),fields:z.record(z.string(),z.string()).meta(_),ctas:z.array(zF).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),nI=z.object({plan_ids:z.array(z.string()).meta(_),billing_cadences:z.array(z.string()).optional().meta(_),segment_chips:z.array(z.string()).meta(_)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),KF=z.object({count:z.number().int().min(1).meta(_),period:z.enum(["session","day","week","month","lifetime"]).meta(_)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),rI=z.object({max_per_period:KF.optional().meta(_),cooldown_days:z.number().int().min(0).optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),GF=z.object({id:z.string().min(1).meta(_),target:nI.meta(_),surfaces:z.array(tI).meta(_),caps:rI.optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().optional().meta({..._,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(_),recommendation_plan_override:z.string().optional().meta(_)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),$F=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:ro}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ro}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:ro}),z.object({type:z.literal("trial_started"),trial_type:z.enum(["free","reverse"]).optional()}),z.object({type:z.literal("trial_progress"),progress_percent:z.number().min(1).max(100)}),z.object({type:z.literal("trial_ending"),days_before_end:z.number().int().min(0)}),z.object({type:z.literal("trial_ended")}),z.object({type:z.literal("trial_converted")}),z.object({type:z.literal("qualifier"),qualifier:z.string().min(1)})]).meta({id:"RevTurbineConfigPlacementTrigger","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),ZF=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft}),YF=z.object({id:z.string().min(1).meta(_),name:z.string().min(1).meta(_),category:ZF.meta(_),trigger:$F.meta(_),payloads:z.array(GF).meta(_),order:z.number().int().min(0).meta(_)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),WF=z.object({payload_id:z.string().min(1).meta(_),placement_id:z.string().min(1).meta(_),target:nI.meta(_),caps:rI.optional().meta(_),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(_),created_at:z.string().meta({..._,readOnly:true}),updated_at:z.string().datetime().optional().meta({..._,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(_),surfaces:z.array(tI).optional().meta(_),surface_slot_ids:z.array(z.string()).optional().meta(_),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(_)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),XF=z.object({kind:z.string().min(1).meta(_),schema_version:z.number().int().nonnegative().meta(_),config:z.unknown().meta(_)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),JF=Cn.merge(ZS).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...Ta}),QF=Cn.merge(YS).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...Ta}),eL=z.object({plans:z.array(TF).meta({..._,...St}),addons:z.array(CF).optional().meta({..._,...Bl}),entitlements:z.array(FF).meta({..._,...St}),entitlement_rules:z.array(eI).meta({..._,...St}),segments:z.array(PF).meta({..._,...St}),content_ui_paths:z.array(DF).meta({..._,...St}),slot_configs:z.array(LF).optional().meta({..._,...St,...ug({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({..._,...St,...ug({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({..._,...mF,...ug({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(VF).optional().meta({..._,...St}),message_blocks:z.array(HF).optional().meta({..._,...St}),placement_payloads:z.array(WF).optional().meta({..._,...St}),placements:z.array(YF).optional().meta({..._,...St}),content_promotions:z.array(MF).optional().meta({..._,...St}),personalization_tokens:z.array(NF).optional().meta({..._,...St}),surface_templates:z.array(BF).optional().meta({..._,...St}),free_trial_rules:z.array(JF).optional().meta({..._,...Bl}),reverse_trial_rules:z.array(QF).optional().meta({..._,...Bl}),plan_variations:z.array(kF).optional().meta({..._,...Bl}),addon_variations:z.array(RF).optional().meta({..._,...Bl}),extension_rules:z.array(XF).optional().meta({..._,...St}),seat_types:z.array(EF).optional().meta({..._,...St}),enforcement_defaults:z.array(wF).optional().meta({..._,...St}),placement_settings:z.array(AF).optional().meta({..._,...St}),segment_dimensions:z.array(OF).optional().meta({..._,...St}),meter_bindings:z.array(jF).optional().meta({..._,...St}),experiments:z.array(z.unknown()).max(0).optional().meta({..._,...Ta}),signal_catalog:z.object({}).strict().optional().meta({..._,...Ta})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St}),tL=z.object({artifact_type:z.literal("playbook").meta({..._,..._d,readOnly:true}),format_version:z.literal(fF).meta({..._,..._d,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({..._,..._d}),playbook_version_id:z.string().nullable().default(null).meta({..._,...hg,readOnly:true}),tenant_id:z.string().min(1).optional().meta({..._,...gg,readOnly:true}),environment_id:z.string().min(1).optional().meta({..._,...gg,readOnly:true}),project_id:z.string().min(1).optional().meta({..._,...gg,readOnly:true}),exported_at:z.string().datetime().optional().meta({..._,...hg,readOnly:true}),schema_version:z.string().min(1).optional().meta({..._,..._d,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({..._,..._d,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...hg}),iI=tL.extend(eL.shape).meta({"x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St});function nL(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function sI(n){if(!nL(n))return n;let e={...n};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(sI,iI).meta({id:"Playbook","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St});z.preprocess(sI,iI.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":tt,"x-revturbine-schema-exposure":Ft,...St});({"/api/seat-type-anchors":{get:w({operationId:"listSeatTypeAnchors",requestParams:{query:nn},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:tn(hF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:w({operationId:"listSeatTypes",requestParams:{query:nn},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:tn(bd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:w({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(bd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bd}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:w({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:bd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bd}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:w({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:w({operationId:"listPersonalizationTokenAnchors",requestParams:{query:nn},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:tn(gF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:w({operationId:"listPersonalizationTokens",requestParams:{query:nn},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:tn(vd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:w({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(vd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vd}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:w({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:vd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vd}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:w({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:w({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:di(_g)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:_g}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:w({operationId:"listMeteringConfigs",requestParams:{query:nn},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:tn(yd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:w({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(yd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:yd}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:w({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:yd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yd}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:w({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:w({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:nn},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:tn(bF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:w({operationId:"listUsageEnforcementSettings",requestParams:{query:nn},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:tn(xd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:w({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mr(xd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:w({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:xd.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:w({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:w({operationId:"listPlacementSettingsAnchors",requestParams:{query:nn},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:tn(SF)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:w({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:di(bg)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:bg}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var Sm=new Int32Array(2);new Float32Array(Sm.buffer);new Float64Array(Sm.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Im;(function(n){n[n.UTF8_BYTES=1]="UTF8_BYTES",n[n.UTF16_STRING=2]="UTF16_STRING";})(Im||(Im={}));var{Unrestricted:Ee}=Wi,{Persisted:kd,Transient:ka}=Pa,{External:Fi,Internal:oL}=Is,pI=Xn(_n.Playbook,{sdkInput:true}),lL=Xn(_n.Playbook,{inConfig:false,sdkInput:false}),cL=Xn(_n.Playbook,{inConfig:false,sdkInput:true}),dL=Xn(_n.Playbook,{inConfig:false,sdkInput:false,source:Xi.Runtime}),uL=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var fI=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),hI=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),mL=z.object({count:z.number().int().positive().meta(Ee),period:hI.meta(Ee)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi});z.object({surface_type:z.string().min(1).meta(Ee),rules:z.array(mL).meta(Ee),cooldown_ms:z.number().int().nonnegative().optional().meta(Ee)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":Fi,...Wi.Operational,...cL});var pL=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":ka,"x-revturbine-schema-exposure":Fi}),Ml=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Ee,readOnly:true}),name:$s.meta(Ee),handle:or.meta(Ee),description:hm.meta(Ee),category:fI.meta(Ee),drag_order_in_category:z.number().int().default(0).meta(Ee),surface_slot_id:z.string().optional().meta(Ee),entitlement_id:z.string().optional().meta(Ee),tier_threshold:z.string().optional().meta(Ee),threshold_percent:ro.optional().meta(Ee),trial_type:z.enum(["free","reverse"]).optional().meta(Ee),trigger_type:z.string().optional().meta(Ee),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ee),days_before_end:z.number().int().min(0).optional().meta(Ee),qualifier:uL.optional().meta(Ee),activation_window_start:z.string().datetime().optional().meta(Ee),activation_window_end:z.string().datetime().optional().meta(Ee),metadata:vi.meta(Ee)}).meta({id:"Placement","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":Fi,...pI,...Ts()}),fL=Nr("PlacementAnchor"),hL=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),gL=z.object({code:hL.meta(Ee),message:z.string().min(1).meta(Ee),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ee)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),mI=Ml.extend({warnings:z.array(gL).optional().meta(Ee)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),_L=z.object({label:z.string().min(1).max(200).meta(Ee),cta_path_type:pL.meta(Ee),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ee)}).meta({id:"CtaObject","x-revturbine-schema-persistence":ka,"x-revturbine-schema-exposure":Fi}),Cd=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({anchor_id:z.string().min(1).meta({...Ee,readOnly:true}),handle:or.meta({...Ee,readOnly:true}),placement_id:z.string().min(1).meta(Ee),drag_order:z.number().int().default(0).meta(Ee),target_plan_ids:z.array(z.string()).default([]).meta(Ee),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ee),target_segments:z.array(z.string()).default([]).meta(Ee),surface_slot_ids:z.array(z.string()).default([]).meta(Ee),surface_template_id:z.string().min(1).meta(Ee),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ee),cta_list:z.array(_L).default([]).meta(Ee),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ee),max_period_unit:hI.default("session").meta(Ee),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ee),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ee),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ee),recommendation_plan_override:z.string().optional().meta(Ee)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":Fi,...pI,...Ji()}),bL=Nr("PlacementPayloadAnchor");Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({handle:or.meta({...Ee,readOnly:true}),placement_payload_id:z.string().min(1).meta(Ee),experiment_id:z.string().min(1).meta(Ee),variant_name:z.string().min(1).max(200).meta(Ee),is_control:z.boolean().default(false).meta(Ee),traffic_allocation_percent:z.number().min(0).max(100).meta(Ee),override_fields:z.record(z.string(),z.unknown()).default({}).meta(Ee),status:z.enum(["active","paused","complete"]).default("active").meta(Ee)}).meta({id:"PlacementVariant","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":oL,...lL,...Ji()});var vL=Cn.merge(Fn).merge(Ln).merge(tr).merge(lr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ee),surface_type:dg.meta(Ee),surface_template_ids:z.array(z.string()).default([]).meta(Ee),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ee),first_seen:z.string().datetime().meta({...Ee,readOnly:true}),last_seen:z.string().datetime().meta({...Ee,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ee),placement_count:z.number().int().min(0).default(0).meta({...Ee,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":kd,"x-revturbine-schema-exposure":Fi,...dL,...Ts("surface_slot_handle")}),yL=di(Ml),xL=di(Cd);({"/api/placement-anchors":{get:w({operationId:"listPlacementAnchors",requestParams:{query:nn},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:tn(fL)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:w({operationId:"listPlacements",requestParams:{query:nn},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:tn(Ml)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:w({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Mr(Ml)}}},responses:{201:{description:"Created",content:{"application/json":{schema:mI}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:w({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Ml}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:w({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:yL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:mI}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:w({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:nr}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:w({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ml}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:w({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:fI,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:w({operationId:"listPlacementPayloadAnchors",requestParams:{query:nn},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:tn(bL)}}},default:{description:"Error response",content:{"application/json":{schema:nr}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:w({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:nn},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:tn(Cd)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:w({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Mr(Cd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cd}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:w({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:xL}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cd}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:w({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:w({operationId:"listSurfaceSlots",requestParams:{query:nn},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:tn(vL)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var gI=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(gI).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 CL=["web-client","server"],kL=z.enum(CL),RL=["method","meta","component"],EL=z.enum(RL),wL=["ts","python","java","csharp","rust"];z.enum(wL);var AL=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(),OL=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:EL,appliesTo:z.array(kL).min(1),composes:z.string().min(1).optional(),perLanguage:AL.optional(),description:z.string().min(1)}).strict().refine(n=>n.kind!=="meta"||n.composes!==void 0,{message:"kind 'meta' requires a `composes` reference",path:["composes"]}),jL=z.object({version:z.number().int().positive(),functions:z.array(OL).min(1)}).strict().superRefine((n,e)=>{let t=new Map;for(let r of n.functions)for(let i of [r.canonical,...r.aliases]){let s=t.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),t.set(i,r.canonical);}});jL.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 FL=[{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 LL(){let n=[];for(let[e,t]of Object.entries(VS))for(let[r,i]of Object.entries(t.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);n.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return n}function VL(n){return [...n].sort((e,t)=>e.from.localeCompare(t.from)||e.field.localeCompare(t.field)||e.to.localeCompare(t.to)||(e.targetKind??"").localeCompare(t.targetKind??""))}Object.freeze(VL([...LL(),...FL]));
|
|
2
|
-
export{
|
|
1
|
+
import {z}from'zod';var Cx=Object.defineProperty;var kx=(t,e,n)=>e in t?Cx(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var T=(t,e,n)=>kx(t,typeof e!="symbol"?e+"":e,n);function Rx(){try{return "production"}catch{return}}function Ex(){try{return typeof process<"u"}catch{return false}}function Sa(){let t=Rx();if(t!==void 0)return t!=="production";if(Ex())return true;let e=globalThis.location;return e?.hostname==="localhost"||e?.hostname==="127.0.0.1"||e?.hostname==="[::1]"}var kc="1.0.0",Lf=["plans","entitlements","entitlement_rules","segments","content_ui_paths"],wx=["slot_configs","content_overrides"];function Ax(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function Ox(t,e){if(!Sa())return;let n=wx.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 jx(t,e){for(let n of Lf)if(!Array.isArray(t[n]))throw new Error(`Invalid ${e}: missing array "${n}"`)}function Fx(t){return t.artifact_type==="playbook"&&t.format_version===kc&&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&&Lf.every(e=>Array.isArray(t[e]))}function Lx(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 Vf(t,e,n){if(t===void 0)return;if(!Ax(t))throw new Error(`Invalid ${e}: expected top-level object`);Ox(t,e),jx(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!==kc)throw new Error(`Invalid ${e}: unsupported "format_version" ${String(t.format_version)}`);if(!r&&t.version!==kc)throw new Error(`Invalid ${e}: unsupported legacy "version" ${String(t.version)}`);let i=typeof t.tenant_id=="string"&&t.tenant_id.length>0?t.tenant_id:r?void 0:n?.tenantId,s=typeof t.environment_id=="string"&&t.environment_id.length>0?t.environment_id:r?void 0:n?.environmentId;if(!i)throw new Error(`Invalid ${e}: missing non-empty string "tenant_id"`);if(!s)throw new Error(`Invalid ${e}: missing non-empty string "environment_id"`);if(t.playbook_handle!==void 0&&(typeof t.playbook_handle!="string"||t.playbook_handle.length===0))throw new Error(`Invalid ${e}: malformed "playbook_handle"`);if(!Lx(t))throw new Error(`Invalid ${e}: malformed optional Playbook header field`);let{version:a,change_set_id:o,...g}=t,v=r?t.playbook_version_id??null:o??null,y={...g,artifact_type:"playbook",format_version:kc,playbook_handle:t.playbook_handle??"default",playbook_version_id:v,tenant_id:i,environment_id:s};if(!Fx(y))throw new Error(`Invalid ${e}: malformed Playbook header`);return y}function as(t,e,n){return Vf(t,e,n)}var ou=864e5,Vx=75;function Uf(t,e){return t==="converted"||t==="cancelled"?t:e&&t==="active"?"expired":t}function Ux(t,e){return t==="expired"?"expired":t==="converted"?"converted":t==="cancelled"?"expired":t==="not_started"?"none":e>=Vx?"running_out":"active"}function Bx(t,e,n){let r=Math.max(0,e-t),i=Math.max(0,n-t),s=Math.max(0,e-n),a=Math.max(1,Math.round(r/ou)),o=Math.min(a,Math.floor(i/ou)),g=Math.max(0,Math.ceil(s/ou)),v=Math.min(100,Math.max(0,i/Math.max(1,r)*100));return {isExpiredByBounds:n>=e,dayNumber:o,daysRemaining:g,daysTotal:a,progressPercent:v}}function qx(t,e){let n=Math.max(1,e),r=Math.max(0,t),i=Math.max(0,n-r),s=Math.min(100,Math.max(0,r/n*100));return {isExpiredByBounds:r>=n,usageConsumed:r,usageRemaining:i,usageLimit:n,progressPercent:s}}function Rc(t){let{instance:e,rule:n,nowIso:r,basePlanHandle:i,usageBalances:s}=t,a=Date.parse(e.started_at),o=Date.parse(r);if(Number.isNaN(a)||Number.isNaN(o)||e.status==="not_started"||o<a)return;let g=e.trial_limit_type??"time",v=0,y=false,I,P,S,x,O,H;if(g==="usage"){let M=e.usage_entitlement_handle??(n&&"usage_entitlement_handle"in n?n.usage_entitlement_handle:void 0),Le=e.usage_limit_value??(n&&"usage_limit_value"in n?n.usage_limit_value:void 0);if(typeof M!="string"||typeof Le!="number"||Le<1)return;let jt=s?.[M]??0,Yn=qx(jt,Le);v=Yn.progressPercent,y=Yn.isExpiredByBounds,S=Yn.usageConsumed,x=Yn.usageRemaining,O=Yn.usageLimit,H=M;}else {let M=e.expires_at?Date.parse(e.expires_at):Number.NaN;if(Number.isNaN(M))return;let Le=Bx(a,M,o);v=Le.progressPercent,y=Le.isExpiredByBounds,I=Le.dayNumber,P=Le.daysRemaining;}let z=Uf(e.status,y),se=Ux(z,v),Ie;e.rule_type==="reverse_trial"?Ie=i:e.rule_type==="free_trial"&&n&&"plan_id"in n&&typeof n.plan_id=="string"&&(Ie=n.plan_id);let K=e.rule_type==="reverse_trial"?"reverse":"free";return {in_trial:z==="active",trial_type:K,...Ie!==void 0?{plan_handle:Ie}:{},state:se,trial_limit_type:g,progress_percent:v,...I!==void 0?{day_number:I}:{},...P!==void 0?{days_remaining:P}:{},...H!==void 0?{usage_entitlement_handle:H}:{},...S!==void 0?{usage_consumed:S}:{},...x!==void 0?{usage_remaining:x}:{},...O!==void 0?{usage_limit:O}:{}}}function Bf(t,e,n){let r=Date.parse(e);if(Number.isNaN(r))return;let i,s=-1/0;for(let a of t){let o=Date.parse(a.started_at);if(Number.isNaN(o)||r<o)continue;let g=false;if((a.trial_limit_type??"time")==="usage")n&&typeof a.usage_entitlement_handle=="string"&&typeof a.usage_limit_value=="number"&&(g=(n[a.usage_entitlement_handle]??0)>=a.usage_limit_value);else if(a.expires_at){let y=Date.parse(a.expires_at);Number.isNaN(y)||(g=r>=y);}let v=Uf(a.status,g);v!=="active"&&v!=="converted"||o>s&&(i=a,s=o);}return i}function lu(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 cu(t,e){let n=Date.parse(e);if(Number.isNaN(n))return;let r,i=-1/0;for(let s of t){if(s.status!=="active"&&s.status!=="expired"&&s.status!=="converted")continue;let a=Date.parse(s.started_at);Number.isNaN(a)||n<a||a>i&&(r=s,i=a);}return r}function Ec(t){let{freeTrialRules:e,reverseTrialRules:n,instances:r,nowIso:i,usageBalances:s,basePlanHandle:a}=t,o=cu(r,i);if(!o)return {trial:void 0,reverseGrants:null};if(o.rule_type==="reverse_trial"){let y=(n??[]).find(S=>S.id===o.rule_id),I=Rc({instance:o,...y!==void 0?{rule:y}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),P=y!==void 0?lu(o,y):null;return {trial:I,reverseGrants:P}}let g=(e??[]).find(y=>y.id===o.rule_id);return {trial:Rc({instance:o,...g!==void 0?{rule:g}:{},nowIso:i,...a!==void 0?{basePlanHandle:a}:{},...s!==void 0?{usageBalances:s}:{}}),reverseGrants:null}}function Pe(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function nl(t){return Array.isArray(t)?t.filter(e=>e.trim().length>0):[]}function Nn(...t){for(let e of t)if(typeof e=="string"&&e.trim().length>0)return e}function _n(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 Ia(t){return t.trim().toLowerCase().replace(/\/+$/,"")||"/"}function du(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 uu(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 mu(t){let e=t.split("::");return {slotId:e[0]||"",surfaceType:e[1]||"",entitlementHandle:e[2]||"",planHandle:e[3]||"",placementHandle:e[4]||""}}function qf(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 Df(t){let e=t,n=Pe(e.target)?e.target:void 0,r=Array.isArray(n?.plan_ids)?n.plan_ids.filter(a=>typeof a=="string"):[];if(r.length>0)return r;let i=Pe(t.content)?t.content:{};return Array.isArray(i.__target_plan_ids)?i.__target_plan_ids.filter(a=>typeof a=="string"):[]}function pu(t,e){let n=Df(t);if(n.length===0||!e)return true;let r=qf(e);return r.length===0?true:n.some(i=>{let s=i.toLowerCase();return r.some(a=>s===a||s.endsWith(`_${a}`)||s.includes(a))})}function fu(t,e){if(e.length===0)return null;let n=[...e].sort((i,s)=>i.tier_position!==s.tier_position?i.tier_position-s.tier_position:i.sort_order!==s.sort_order?i.sort_order-s.sort_order:i.source_id.localeCompare(s.source_id)),r=n.findIndex(i=>i.unique_handle===t);return r===-1||r===n.length-1?null:n[r+1].unique_handle}function Pa(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim().toLowerCase()}function hu(t){return t.trim().toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"")}function gu(t){return t==="minutes"||t==="minute"||t==="credits"||t==="credit"||t==="seats"||t==="seat"||t==="units"||t==="unit"}function ls(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 Js(t,e){if(!t||!Array.isArray(t.plans))return;let n;if(typeof e=="string"&&e.trim().length>0?n=e.trim():Pe(e)&&typeof e.id=="string"&&e.id.trim().length>0&&(n=e.id.trim()),!n)return;let r=n.toLowerCase();for(let i of t.plans){if(!Pe(i))continue;if((typeof i.unique_handle=="string"?i.unique_handle.toLowerCase():"")===r){let a=typeof i.name=="string"?i.name.trim():"";if(a.length>0)return a}}}function wc(t){let e=t;return typeof e.format_version=="string"?e.format_version:typeof e.version=="string"?e.version:""}function Ts(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 il(t){let e=t,n=Pe(t.content)?t.content:{};return [_n(e.score),_n(e.ltv_propensity_score),_n(n.score),_n(n.ltv_propensity_score),_n(n.ranking_score)].find(i=>i!==null)??0}function Ac(t){let e=t,n=Pe(t.content)?t.content:{};return [_n(e.priority),_n(e.placement_priority),_n(n.priority),_n(n.placement_priority)].find(i=>i!==null)??0}function _u(t){let e=Pe(t.content)?t.content:{};return [_n(e.usage_percent),_n(e.trial_percent_elapsed),_n(e.threshold_percent)].find(r=>r!==null)??il(t)}var Dx=new Set(["trial_started","trial_ended","trial_converted"]),Mx=new Set(["trial_progress","trial_ending"]);function bu(t){let e=Pe(t.content)?t.content:{},n=typeof e.__trigger_kind=="string"?e.__trigger_kind:void 0;if(n&&Dx.has(n))return 1;if(n&&Mx.has(n))return 3;let r=[_n(e.usage_percent),_n(e.threshold_percent)].find(i=>i!==null);return r!=null&&r>=100?2:3}function sl(t){let e=t,n=Pe(t.content)?t.content:{};return [_n(e.server_order),_n(e.order),_n(e.rank),_n(e.order_index),_n(n.server_order),_n(n.order),_n(n.rank),_n(n.order_index)].find(i=>i!==null)??null}function yu(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=_n(n);if(r!==null)return String(r);let i=e.milestone_version;if(typeof i=="string"&&i.trim().length>0)return i.trim();let s=_n(i);return s!==null?String(s):null}function vu(t){let n=(Pe(t.content)?t.content:{}).supersedes_template_version;if(Array.isArray(n))return n.map(i=>typeof i=="string"?i.trim():_n(i)).filter(i=>i!==null&&i!=="").map(i=>String(i));if(typeof n=="string"&&n.trim().length>0)return [n.trim()];let r=_n(n);return r!==null?[String(r)]:[]}function os(t){return t==null||typeof t!="object"?JSON.stringify(t):Array.isArray(t)?`[${t.map(n=>os(n)).join(",")}]`:`{${Object.entries(t).sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>`${JSON.stringify(n)}:${os(r)}`).join(",")}}`}function xu(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 Hx=/^[a-z0-9._]{1,100}$/,Cs={Persisted:"persisted",Transient:"transient"},Ui={Internal:"internal",External:"external"},Ti={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},zx="readOnly";function Qr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[zx]===true||(e[n]=r);}return z.object(e)}function Rr(t){let e=Qr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(Hx)}):e}var {Unrestricted:Dr}=Ti,{Transient:Mr,Persisted:Gx}=Cs,{Internal:Xs,External:cs}=Ui;z.object({page:z.coerce.number().int().min(1).default(1).meta(Dr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Dr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs});var An=z.object({created_at:z.string().datetime().meta({...Dr,readOnly:true}),updated_at:z.string().datetime().meta({...Dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs}),In=z.object({id:z.string().min(1).meta({...Dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs}),On=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":Xs});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs});var Su=z.enum(["banner","modal","tooltip","sidebar","inline","toast","fullscreen","email","sms","push","in_page","button","full_page","agent","cli","custom"]).meta({id:"SurfaceType","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs}),Nf=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs});var Oc=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs}),Hf=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":cs});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":Xs});var ds=z.string().min(1).max(200),rr=z.string().min(1).max(100),jc=z.string().max(500).optional(),li=z.record(z.string(),z.unknown()).default({}),Qs=z.number().int().min(10).max(100).multipleOf(10),Fc=z.string().datetime().nullable().default(null),Qn=z.object({environment_id:z.string().min(1).default("production").meta({...Dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":Xs}),ir=z.object({playbook_version_id:z.string().nullable().default(null).meta(Dr),is_current:z.boolean().default(true).meta({...Dr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Dr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Dr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Dr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Dr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":Xs}),$x=In.merge(An).merge(On).merge(Qn).extend({handle:rr.meta({...Dr,readOnly:true}),active:z.boolean().default(true).meta({...Dr,readOnly:true})});function Er(t){return $x.meta({id:t,"x-revturbine-schema-persistence":Gx,"x-revturbine-schema-exposure":Xs})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Mr,"x-revturbine-schema-exposure":Xs});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":Mr,"x-revturbine-schema-exposure":Xs});var zf=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":Mr,"x-revturbine-schema-exposure":cs}),Zx=new Set(Su.options);function Lc(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:{},i=Zx.has(r.type)?r.type:"custom",s=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:i,...typeof r.slot_id=="string"?{slot_id:r.slot_id}:{}},content:Pe(t.content)?t.content:{},...Pe(t.promotion)?{promotion:t.promotion}:{},cta_path:s,ui_path:s,rule_id:typeof t.rule_id=="string"?t.rule_id:"",decision_id:typeof t.decision_id=="string"?t.decision_id:e(),config_version:typeof t.config_version=="string"?t.config_version:"unknown",present_upsell:typeof t.present_upsell=="boolean"?t.present_upsell:false}}var Yx="__no_dim__";function $f(t,e,n){if(t.length===0)return true;let r=e instanceof Set?e:new Set(e),i=new Map;for(let s of t){let a=n(s)??Yx,o=i.get(a)??[];o.push(s),i.set(a,o);}for(let s of i.values())if(!s.some(a=>r.has(a)))return false;return true}var Wx=999999;function Jx(t){return t==null||t==="unlimited"||t===Wx}function al(t){return Jx(t)?Number.POSITIVE_INFINITY:typeof t=="number"&&Number.isFinite(t)?t:void 0}function Xx(t,e){switch(t.kind){case "plan":return e.currentPlanId!=null&&t.id===e.currentPlanId||e.currentPlanHandle!=null&&t.id===e.currentPlanHandle;case "plan_variation":return e.currentPlanVariationId!=null&&t.id===e.currentPlanVariationId;case "addon":return e.addonIds?.includes(t.id)??false;case "addon_variation":return e.addonVariationIds?.includes(t.id)??false;default:return false}}function Zf(t,e,n){return t.map(r=>{let i=r.targets!=null&&r.targets.length>0?r.targets.some(a=>Xx(a,e)):e.currentPlanId!=null&&r.planIds.includes(e.currentPlanId)||e.currentPlanHandle!=null&&r.planIds.includes(e.currentPlanHandle),s=$f(r.segmentIds,e.segmentIds,a=>n?.[a]);return {rule:r,matchesPlan:i,matchesSegment:s,matched:i&&s}})}function Yf(t){let e=t.fields??{};switch(t.kind){case "usage_limit":return al(e.limit_value)??0;case "credits":return al(e.allowance_value!==void 0?e.allowance_value:e.allowance)??0;case "seat":return al(e.included_count)??0;case "feature":return e.enabled===true?1:0;default:return 0}}function Wf(t,e){let n,r=Number.NEGATIVE_INFINITY;for(let i of t){let s=e(i);(n===void 0||s>r)&&(n=i,r=s);}return n}function Qx(t){return Wf(t,e=>Yf(e.rule))?.rule}function Iu(t,e,n){let r=t.entitlementRules[e];if(!r||r.length===0)return;let i=Zf(r,n,t.segmentDimensions);return Qx(i.filter(s=>s.matched))}function eS(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 tS(t,e,n){let r=new Map;for(let i of n)typeof i.handle=="string"&&r.set(i.handle,typeof i.dimension_id=="string"?i.dimension_id:void 0);return $f(eS(t),e,i=>r.get(i))}function Kf(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 ol(t){let{handle:e,context:n,exportedConfig:r,currentPlanHandle:i,segmentIds:s,usageBalances:a,userUsage:o,trialGrantedEntitlementHandles:g,effectivePlanHandle:v}=t,I=(r.entitlements??[]).find(ut=>typeof ut?.unique_handle=="string"&&ut.unique_handle===e),P=typeof I?.unique_handle=="string"?I.unique_handle:e,S=typeof I?.unique_handle=="string"?I.unique_handle:void 0,x=!!(g&&g.size>0&&(g.has(e)||g.has(P)||S!==void 0&&g.has(S)));if(x&&(v===void 0||v===""))return {status:"allowed",allowed:true,reason:"granted_by_reverse_trial"};let H=String((x&&v?v:i)||"").toLowerCase(),se=(r.plans??[]).find(ut=>typeof ut.unique_handle=="string"&&ut.unique_handle.toLowerCase()===H),Ie=typeof se?.unique_handle=="string"?se.unique_handle:H||void 0,M=(r.entitlement_rules??[]).filter(ut=>{if((typeof ut.entitlement_id=="string"?ut.entitlement_id:typeof ut.entitlementId=="string"?ut.entitlementId:"")!==P)return false;let Wn=Array.isArray(ut.targets)?ut.targets.filter(wt=>Pe(wt)&&wt.kind==="plan"&&typeof wt.id=="string").map(wt=>wt.id):Array.isArray(ut.plan_ids)?ut.plan_ids.filter(wt=>typeof wt=="string"):Array.isArray(ut.planIds)?ut.planIds.filter(wt=>typeof wt=="string"):[];return !(Ie!==void 0&&!Wn.includes(Ie)||!tS(ut,s,r.segments??[]))});if(M.length===0)return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"};let Le=(()=>{let ut=(r.entitlements??[]).find(kn=>kn.unique_handle===P);return ut&&typeof ut.type=="string"?ut.type:void 0})(),jt=ut=>{let kn=Pe(ut)?ut:{},wt={...Pe(kn.type_fields)?kn.type_fields:Pe(kn.typeFields)?kn.typeFields:{},...kn};return typeof wt.kind!="string"&&Le&&(wt.kind=Le),wt},Yn=Wf(M,ut=>{let kn=jt(ut);return Yf({kind:typeof kn.kind=="string"?kn.kind:"",fields:kn})})??M[0],Q=jt(Yn);typeof Q.kind=="string"?Q.kind:void 0;let rn=ut=>{let kn=o?.[ut];if(Pe(kn)&&typeof kn.amount=="number")return kn.amount},sn=n?.used??(Number.isFinite(a[e])?a[e]:void 0)??(Number.isFinite(a[P])?a[P]:void 0)??rn(e)??rn(P)??0;return Vc(Q,sn)}function Gf(t,e,n){return {...t,limit:e,used:n,remaining:Math.max(0,e-n)}}function Jf(t){return t==="feature"||t==="usage_limit"||t==="limit"||t==="credits"||t==="capability_tier"}function Vc(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=al(t.limit_value);return r!==void 0&&Number.isFinite(r)&&r>=0?Gf(Kf(e>=r,t.enforcement,"usage_limit_reached"),r,e):{status:"allowed",allowed:true}}if(n==="credits"){let r=t.allowance_value!==void 0?t.allowance_value:t.allowance,i=r===void 0?void 0:al(r),s=Number(t.initial_grant),a=i!==void 0&&i>=0?i:Number.isFinite(s)&&s>=0?s:void 0;return a!==void 0&&Number.isFinite(a)?Gf(Kf(e>=a,t.enforcement,"credit_balance_exhausted"),a,e):{status:"allowed",allowed:true}}if(n==="capability_tier"){let r=typeof t.tier_name=="string"?t.tier_name:void 0;return {status:"allowed",allowed:true,...r?{current_tier:r}:{}}}return {status:"allowed",allowed:true}}function Pu(t,e,n,r,i=80){let s=e.get(t);if(s)return s;if(n.get(t)?.status==="limited"&&Number.isFinite(r[t])){let o=Number(r[t]);if(o>0)return {limit:o,warningPercent:i}}return null}var nS=0;function rS(){return `core_${Date.now()}_${++nS}`}function Xf(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}var Tu=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=rS(),n=this.placements.get(t.placementId);if(this.interactionTracker){let s=this.interactionTracker.checkSuppression(t.placementId,t.userId);if(s.suppressed)return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Xf(`${n?.name??t.placementId} suppressed`,"Suppressed due to recent interaction state.","Continue")}}let i={__providers:await this.registry.resolveAll()};if(t.traits&&(i.traits=t.traits),this.placementResolver){let s=await this.placementResolver(t,n,i);if(s.visible&&s.output&&this.capEnforcer&&this.options.enableCapsEnforcement!==false){let a=this.capEnforcer.enforce(s.output);if(!a.allowed)return {...s,visible:false,reasonCodes:[...s.reasonCodes,a.reason??"suppressed_by_cap"],suppressionReason:a.reason}}return s}return {placementId:t.placementId,requestId:e,visible:false,decisionSource:"fallback",reasonCodes:["no_resolver_configured"],content:Xf("No resolver","No placement resolver configured.","")}}async evaluateBatch(t){return Promise.all(t.map(e=>this.evaluate(e)))}async checkEntitlement(t,e){let n=await this.registry.resolveAll();return this.deriveEntitlementResult(t,n,e)}trackInteraction(t){this.interactionTracker?.track(t);}async resolveProviders(){return this.registry.resolveAll()}deriveEntitlementResult(t,e,n){let r=this.options.defaultEntitlementPolicy??"allow",i=e.entitlements;if(!i)return r==="allow"?{status:"allowed",allowed:true,reason:"no_entitlement_provider"}:{status:"denied",allowed:false,reason:"no_entitlement_provider_default_deny"};let s=i.entries[t];if(!s)return r==="allow"?{status:"allowed",allowed:true,reason:"entitlement_not_found_default_allow"}:{status:"denied",allowed:false,reason:"entitlement_not_found_default_deny"};let a=i.usage?.[t];if(e.rules){let o=Iu(e.rules,t,{currentPlanHandle:e.plan?.currentPlanHandle,billingPeriod:e.plan?.billingPeriod,segmentIds:e.segments?.segmentIds??[]});if(o){let g={kind:o.kind,...o.fields};if(Jf(g.kind))return Vc(g,n?.used??a?.used??0)}else return {status:"denied",allowed:false,reason:"no_matching_entitlement_rule"}}return a&&n?.used!==void 0&&a.limit>0&&n.used>=a.limit?{status:"denied",allowed:false,reason:"usage_limit_exceeded",limit:a.limit,used:n.used,remaining:Math.max(0,a.limit-n.used)}:{status:s.status,allowed:s.status==="allowed",reason:s.reason,limit:a?.limit,used:a?.used,remaining:a?.remaining}}};function Uc(t){let e="";return t.forEach(n=>{e+=String.fromCharCode(n);}),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ll(t){let e=2166136261;for(let i=0;i<t.length;i+=1)e^=t.charCodeAt(i),e+=(e<<1)+(e<<4)+(e<<7)+(e<<8)+(e<<24);let n=new Uint8Array(8),r=new DataView(n.buffer);return r.setUint32(0,e>>>0),r.setUint32(4,e*1103515245>>>0),Uc(n)}var Cu={async sha256Base64Url(t){return ll(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 Qf=z.enum(["session","day","week","month"]),eh=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(eh),cap:z.object({count:z.number().int().min(1),period:Qf})});function iS(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 nh(t,e){return `${t}:${e}`}function cl(t){let{now:e}=t;if(t.sessionCooldownMinutes!=null&&t.sessionCooldownMinutes>0&&t.lastSessionPresentationAt!=null&&e-t.lastSessionPresentationAt<t.sessionCooldownMinutes*6e4)return {allowed:false,reason:"session_cooldown"};if(t.rules&&t.candidate){let n=t.candidate,r=t.counters??new Map;for(let i of t.rules){if(!i.group.some(g=>g.kind==="template"?g.id===n.templateId:g.kind==="slot"?g.id===n.slotId:false))continue;let a=nh(i.id,i.cap.period);if((r.get(a)??0)>=i.cap.count)return {allowed:false,reason:"cap_hit",matchedRuleId:i.id}}}if(t.perPayload){let{policies:n,seenAt:r,cooldownUntil:i}=t.perPayload;if(i!=null&&Number.isFinite(i)&&i>e)return {allowed:false,reason:"suppressed_by_payload_cooldown"};for(let s of n)for(let a of s.rules){let o=iS(a.period,e);if(r.filter(v=>v>=o&&v<=e).length>=a.count)return {allowed:false,reason:`suppressed_by_payload_cap_${a.period}`}}}return {allowed:true}}async function ku(t,e){let n=Ia(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 ll(r).slice(0,22)}function Ru(t){return [t.slotId||"",t.surfaceType||"",t.entitlementHandle||"",t.planHandle||"",t.placementHandle||""].join("::")}function Eu(t){let e=os({placementId:t.placementId,userId:t.userId,contextMode:t.contextMode??"auto",overrides:t.overrides??{},traits:t.traits??{},route:Ia(t.route),...t.runtimeContextFingerprint?{runtimeContextFingerprint:t.runtimeContextFingerprint}:{}});return `${t.tenantId}:${t.placementId}:${t.userId}:${ll(e)}`}function ih(t){if(t.length<=1)return t;let e=new Set;for(let r of t){let i=r.surface.template;if(!i)continue;let s=vu(r);if(s.length!==0)for(let a of t){if(a.output_id===r.output_id||a.surface.template!==i)continue;let o=yu(a);o&&s.includes(o)&&e.add(a.output_id);}}let n=new Map;for(let r of t){if(!r.surface.template)continue;let i=n.get(r.surface.template)??[];i.push(r),n.set(r.surface.template,i);}for(let r of n.values()){if(r.length<=1)continue;let i=r.map(a=>{let o=Pe(a.content)?a.content:{};return {output:a,order:_n(o.milestone_order)??Number.NEGATIVE_INFINITY}}).filter(a=>Number.isFinite(a.order));if(i.length<=1)continue;let s=i.reduce((a,o)=>o.order>a.order?o:a);for(let a of i)a.output.output_id!==s.output.output_id&&e.add(a.output.output_id);}return t.filter(r=>!e.has(r.output_id))}function rh(t){let n=(Pe(t.content)?t.content:{}).__trigger_entitlement_handle;return typeof n=="string"&&n.length>0?n:null}function sS(t,e,n){if(n===1){let r=t.surface.slot_id,i=e.surface.slot_id;if(typeof r=="string"&&r&&typeof i=="string"&&i)return {leftKey:r,rightKey:i}}else if(n===0){let r=rh(t),i=rh(e);if(r&&i)return {leftKey:r,rightKey:i}}return {leftKey:t.surface.type??"",rightKey:e.surface.type??""}}function Bc(t){if(t.length<=1)return t;let e=new Set;for(let n=0;n<t.length;n+=1)for(let r=n+1;r<t.length;r+=1){let i=t[n],s=t[r];if(i.surface.type!==s.surface.type)continue;let a=Ts(i.category),o=Ts(s.category);if(a!==o){a<o?e.add(s.output_id):e.add(i.output_id);continue}if(a===0||a===1){let{leftKey:g,rightKey:v}=sS(i,s,a);g===v&&e.add(s.output_id);}}return t.filter(n=>!e.has(n.output_id))}function wu(t,e=false,n){let r=t;if(n?.fixedOnly&&(r=r.filter(g=>Ts(g.category)===1)),r.length===0)return null;let i=ih(r);if(i.length===0)return null;let s=i.some(g=>sl(g)!==null),a=s?i:Bc(i);return a.length===0?null:[...a].sort((g,v)=>{if(s){let O=sl(g),H=sl(v);if(O!==null&&H!==null&&O!==H)return O-H;if(O!==null&&H===null)return -1;if(O===null&&H!==null)return 1}let y=Ts(g.category),I=Ts(v.category),P=y-I;if(P!==0)return P;if(y===2){let O=bu(g)-bu(v);if(O!==0)return O;let H=_u(v)-_u(g);if(H!==0)return H}let S=il(v)-il(g);if(S!==0)return S;let x=Ac(v)-Ac(g);return x!==0?x:g.output_id.localeCompare(v.output_id)})[0]??null}function aS(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function Au(t,e,n,r){let i=Pe(r)?r:{},s=Pe(i.decision)?i.decision:{},a=Pe(i.content)?i.content:Pe(s.content)?s.content:{},o=typeof s.visible=="boolean"?s.visible:typeof i.visible=="boolean"?i.visible:true;return {placementId:t,requestId:typeof i.request_id=="string"?i.request_id:e,visible:o,decisionSource:"remote",reasonCodes:Array.isArray(i.reason_codes)?i.reason_codes.filter(g=>typeof g=="string"):[],content:aS(typeof a.title=="string"?a.title:`${n} recommendation`,typeof a.body=="string"?a.body:"Treatment selected by RevTurbine decisioning.",typeof a.cta=="string"?a.cta:"Continue")}}function qc(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 i=Pe(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=uu(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),g=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...g!==void 0?{cooldownMs:g}:{}});}return e}function Ou(t,e,n,r,i="impression"){if(Ts(t.category)<=1)return {allowed:true};let s=qc(t);if(s.length===0)return {allowed:true};let a={...n??{seenAt:[]},seenAt:(n?.seenAt??[]).filter(I=>Number.isFinite(I)&&I>0)},o=cl({perPayload:{policies:s,seenAt:a.seenAt,cooldownUntil:a.cooldownUntil},now:r});if(!o.allowed)return {allowed:false,reason:o.reason,updatedState:a};let g=[...a.seenAt,r],v=i==="dismiss"?s.map(I=>I.cooldownMs).filter(I=>typeof I=="number"&&Number.isFinite(I)&&I>0):[],y=v.length>0?r+Math.max(...v):void 0;return {allowed:true,updatedState:{seenAt:g,...y!==void 0?{cooldownUntil:y}:{}}}}function Ta(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 dl(t){return t.replace(/_(minutes|minute|credits|credit|seats|seat)$/i,"").replace(/_usage$/i,"").trim()}function oS(t,e){let n=Ta(t.limit_value??t.usage_limit??t.limit??t.allowance??t.initial_grant);if(n!==void 0)return n;let r=t.usageLimits;if(r&&typeof r=="object"&&!Array.isArray(r)){let i=(e??"").toLowerCase();for(let[s,a]of Object.entries(r))if(s.toLowerCase()===i)return Ta(a)}}function lS(t){let e=Ta(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 sh(t){let e={},n=t.providers;if(t.userId&&(e.user_id=t.userId),t.base)for(let[S,x]of Object.entries(t.base))(typeof x=="string"||typeof x=="number")&&(e[S]=x);let r=n?.plan?.currentPlanHandle,i=n?.plan?.currentPlanName??r;typeof i=="string"&&i.length>0&&(e.plan_name=i);let s=n?.plan?.trialDaysRemaining;s!==void 0&&Number.isFinite(s)&&(e.trial_days_remaining=s);let a=n?.plan?.trialDaysTotal;a!==void 0&&Number.isFinite(a)&&(e.trial_days_total=a);let o=n?.traits?.traits??{};for(let[S,x]of Object.entries(o))(typeof x=="string"||typeof x=="number")&&(e[S]=x);let g=n?.entitlements?.usage??{};for(let[S,x]of Object.entries(g)){let O=dl(S);if(!O)continue;let H=Ta(x.used),z=Ta(x.remaining),se=Ta(x.limit);if(H!==void 0&&(e[`${O}_usage_current`]=H,e.usage_current===void 0&&(e.usage_current=H),e.current_usage===void 0&&(e.current_usage=H)),se!==void 0&&(e[`${O}_usage_limit`]=se,e.usage_limit===void 0&&(e.usage_limit=se),e.current_limit===void 0&&(e.current_limit=se)),z!==void 0)e[`${O}_usage_remaining`]=z,e.usage_remaining===void 0&&(e.usage_remaining=z);else if(H!==void 0&&se!==void 0){let K=Math.max(0,se-H);e[`${O}_usage_remaining`]=K,e.usage_remaining===void 0&&(e.usage_remaining=K);}if(H!==void 0&&se!==void 0&&se>0){let K=Math.min(100,Math.round(H/se*100));e[`${O}_usage_percent`]=K,e.usage_percent===void 0&&(e.usage_percent=K);}let Ie=x.reset_date;typeof Ie=="string"&&Ie.length>0&&(e[`${O}_reset_date`]=Ie,e.reset_date===void 0&&(e.reset_date=Ie));}let v=n?.rules?.entitlementRules??{};for(let[S,x]of Object.entries(v)){if(!Array.isArray(x)||x.length===0)continue;let O=x.find(K=>K.kind==="usage_limit"||K.kind==="usage_rate"||K.kind==="credits"||K.kind==="seat");if(!O)continue;let H=dl(S);if(!H)continue;let z=O.fields??{},se=oS(z,r);se!==void 0&&e[`${H}_usage_limit`]===void 0&&(e[`${H}_usage_limit`]=se);let Ie=lS(z);Ie!==void 0&&(e[`${H}_usage_warning_threshold_percent`]=Ie);}t.userName&&t.userName.length>0&&(e.user_name=t.userName);let y=n?.plan?.currentPlanPrice;typeof y=="string"&&y.length>0&&(e.plan_price=y),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 I=t.effectiveGrants;if(I)for(let[S,x]of Object.entries(I)){if(x.allocation==="per_user"||x.allocation==="per_user_pooled"||!x.allocation){let O=dl(S);if(!O)continue;x.used!==void 0&&e[`${O}_usage_current`]===void 0&&(e[`${O}_usage_current`]=x.used),x.limit!==void 0&&e[`${O}_usage_limit`]===void 0&&(e[`${O}_usage_limit`]=x.limit);}if(x.enforcement&&(x.status==="limited"||x.status==="denied")){let O=dl(S);O&&e[`${O}_enforcement`]===void 0&&(e[`${O}_enforcement`]=x.enforcement),e.enforcement_mode===void 0&&(e.enforcement_mode=x.enforcement);}}let P=n?.rules?.entitlementRules??{};for(let[S,x]of Object.entries(P)){if(!Array.isArray(x))continue;let O=dl(S);if(O)for(let H of x){if(H.kind==="credits"){let z=e[`${O}_usage_remaining`];z!==void 0&&e.credits_remaining===void 0&&(e.credits_remaining=z);}if(H.kind==="seat"){let z=e[`${O}_usage_current`],se=e[`${O}_usage_limit`];z!==void 0&&e.seat_count===void 0&&(e.seat_count=z),se!==void 0&&e.seat_limit===void 0&&(e.seat_limit=se);}}}if(t.featureInteractions&&I){let{invokedFeatureHandles:S,interactionCounts:x,topFeaturesByEngagement:O}=t.featureInteractions,H=new Set(S),z=new Set;for(let[K,M]of Object.entries(I))(M.status==="denied"||M.status==="limited")&&z.add(K);let se=0,Ie=0;for(let K of S)z.has(K)&&(se++,x&&(Ie+=x[K]??0));if(e.gated_features_used_count=se,x&&(e.gated_action_count=Ie),O){let K=O.find(M=>!H.has(M)&&z.has(M));K&&(e.top_unused_gated_feature=K);}if(n?.plan?.trialActive){let K=0;for(let M of S)M in I&&K++;e.trial_features_used=K;}}return e}function ju(t,e){let n={};for(let[r,i]of Object.entries(e))i!==void 0&&(n[r]=i);return {...t,...n,custom:{...t.custom||{},...e.custom||{}},entitlements:{...t.entitlements||{},...e.entitlements||{}},usage:{...t.usage||{},...e.usage||{}},personalization:{...t.personalization||{},...e.personalization||{}}}}function Dc(t,e,n){let r={};for(let[i,s]of Object.entries(t))(typeof s=="string"||typeof s=="number"||typeof s=="boolean")&&(r[i]=s);e&&r.plan===void 0&&(r.plan=e);for(let[i,s]of Object.entries(n))r[i]===void 0&&(r[i]=s);return r}function Mc(t,e,n){let r=Js(e,t.plan),i=r??(typeof t.plan=="object"&&t.plan?.id?t.plan.id:void 0),s={...t.custom??{}};for(let[o,g]of Object.entries(t.entitlements??{}))s[o]===void 0&&(s[o]=g);r&&s.plan_name===void 0&&(s.plan_name=r),i&&s.plan===void 0&&(s.plan=i);let a={...ls(t.usage),...n??{}};for(let[o,g]of Object.entries(a))s[o]===void 0&&(s[o]=g);return {effectivePlan:i,traits:s,usage:a,segmentTraits:Dc(s,i,a)}}function cS(t){return {plan:t.plan??null,usage:t.usage??{},custom:t.custom??{},trial:t.trial??null,instances:t.instances??[]}}function Fu(t,e=Cu){return e.sha256Base64Url(os(cS(t)))}function Lu(t){let{context:e,exportedConfig:n,usageBalances:r,usageTokenPrefixByEntitlement:i,usageThresholdLookup:s}=t,a={};for(let[z,se]of Object.entries(e.personalization??{}))/^(usage_(current|limit|remaining|percent)|.+_usage_(current|limit|remaining|percent)|plan_name|user_id)$/i.test(z)||(a[z]=se);let o={...a},g=Js(n,e.plan);g?o.plan_name=g:typeof e.plan=="object"&&e.plan?.name&&(o.plan_name=e.plan.name);let v={...ls(e.usage),...r},y=Object.entries(v).filter(([,z])=>Number.isFinite(z)).sort(([z],[se])=>z.localeCompare(se)),I,P,S,x,O=[];for(let[z,se]of y){let Ie=i.get(z)??Pa(z);if(!Ie)continue;let M=s(z)?.limit,Le=M!==void 0?Math.max(0,M-se):void 0,jt=M!==void 0&&M>0?Math.min(100,Math.round(se/M*100)):void 0;o[`${Ie}_usage_current`]=se,M!==void 0&&(o[`${Ie}_usage_limit`]=M),Le!==void 0&&(o[`${Ie}_usage_remaining`]=Le),jt!==void 0&&(o[`${Ie}_usage_percent`]=jt),O.push({prefix:Ie,current:se,...M!==void 0?{limit:M}:{},...Le!==void 0?{remaining:Le}:{},...jt!==void 0?{percent:jt}:{}}),I===void 0&&(I=se,P=M,S=Le,x=jt);}let H=O.find(z=>z.prefix==="core")??O.find(z=>z.limit!==void 0)??O[0];return H&&(I=H.current,P=H.limit,S=H.remaining,x=H.percent),I!==void 0&&(o.usage_current=I),P!==void 0&&(o.usage_limit=P),S!==void 0&&(o.usage_remaining=S),x!==void 0&&(o.usage_percent=x),o}function Vu(t,e,n){let r=[];for(let[i,s]of Object.entries(e)){let a=t[i]||0;if(!Number.isFinite(s)||s<=a)continue;let o=n(i);if(!o)continue;let g=a/o.limit*100,v=s/o.limit*100;v>=o.warningPercent&&g<o.warningPercent&&r.push({type:"usage_limit_approaching",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(v)),threshold:o.warningPercent}),s>=o.limit&&a<o.limit&&r.push({type:"usage_limit_reached",entitlement_handle:i,current_usage:s,usage_limit:o.limit,usage_percent:Math.min(100,Math.round(v)),threshold:100});}return r}function Uu(t,e,n=3){if(!t.in_trial)return e==="none"?"none":"expired";let r=Number(t.days_remaining);if(Number.isFinite(r)&&r<=0)return "expired";if(Number.isFinite(r)&&r<=n)return "expiring";let i=Number(t.day_number);if(Number.isFinite(i)&&i>0&&Number.isFinite(r)){let s=i+Math.max(0,r);if(s>0&&i>=Math.ceil(s/2))return "midpoint"}return "none"}var ah="__self__",dS={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Bu={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:ah,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:dS},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 oh=["high","medium","low"];function ul(t,e){return t==="active"?oh.includes(e):t===e}var uS="activity_level";function lh(t,e){let n=e[t.field];if(n===void 0)return false;let r=String(n),i=t.value,s=t.field===uS;switch(t.operator){case "eq":return s?ul(i,r):r===i;case "neq":return s?!ul(i,r):r!==i;case "gt":return Number(r)>Number(i);case "lt":return Number(r)<Number(i);case "gte":return Number(r)>=Number(i);case "lte":return Number(r)<=Number(i);case "contains":return r.includes(i);case "in":{let a=i.split(",").map(o=>o.trim());return s?a.some(o=>ul(o,r)):a.includes(r)}default:return false}}function ml(t,e,n={}){return t.filter(r=>{let i=!!(r.predicates&&r.predicates.length>0);if(r.experiment_id){if(!Object.prototype.hasOwnProperty.call(n,r.experiment_id))return false;if(!i)return true}else if(!i)return false;return r.predicates.every(s=>lh(s,e))}).map(r=>r.handle)}function ch(t){let e={};for(let n of t)n.experiment_id&&(e[n.handle]=n.experiment_id);return e}function dh(t,e,n={}){for(let r of e){let i=t[r];if(!i)continue;let s=n[i];if(typeof s=="string")return {experiment_id:i,variant_key:s}}}function qu(t,e){let n=String(t.field||""),r=String(t.operator||""),i=String(t.value||""),s=e[n],a=typeof s=="string"||typeof s=="number"||typeof s=="boolean"?s:null,o=lh(t,e);return {field:n,operator:r,expected:i,actual:a,matched:o}}z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});function Zu(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 ph={Named:"named",Minted:"minted"},fh="x-revturbine-schema-identity";function qi(t="handle"){return {[fh]:{kind:ph.Named,handleField:t}}}function Di(t="handle"){return {[fh]:{kind:ph.Minted,handleField:t}}}var un={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Ci={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},pS="x-revturbine-context",fS="x-revturbine-in-config",hS="x-revturbine-sdk-input",gS="x-revturbine-source",_S="x-revturbine-deprecation",bS={[un.Playbook]:Ci.Customer,[un.Branding]:Ci.Customer,[un.Billing]:Ci.Stripe,[un.Metering]:Ci.Customer,[un.CustomerOperations]:Ci.Runtime,[un.EventIngestion]:Ci.Runtime};function Hn(t,e){return {[pS]:t,[fS]:e.inConfig??t===un.Playbook,[hS]:e.sdkInput,[gS]:e.source??bS[t]}}function Du(t){return {deprecated:true,[_S]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Wt=t=>z.object({items:z.array(t)}),Jn=z.object({error:z.string(),code:z.string(),request_id:z.string()}),R=t=>t,Jt=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:me}=Ti,{Persisted:Yu,Transient:ei}=Cs,{Internal:hh,External:Nr}=Ui,gh=Hn(un.Playbook,{sdkInput:true}),yS=Hn(un.Playbook,{inConfig:false,sdkInput:false}),_h=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),zc=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),vS=z.enum(Nf).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),xS=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),bh=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),Mu=z.object({entitlement_id:z.string().min(1).meta(me),entitlement_handle:z.string().min(1).meta(me),status:vS.meta(me),limit:z.number().optional().meta(me),used:z.number().optional().meta(me),allocation:zc.optional().meta(me),enforcement:bh.optional().meta(me),source:xS.optional().meta(me),plan_id:z.string().optional().meta(me),segment_id:z.string().optional().meta(me),seat_type_id:z.string().optional().meta(me),rule_id:z.string().optional().meta(me)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr,...Ti.Operational});z.object({account:z.record(z.string(),Mu).optional().meta(me),instance:z.record(z.string(),Mu).optional().meta(me),user:z.record(z.string(),Mu).optional().meta(me)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr,...Ti.Operational});var SS=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),IS=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),yh=z.object({kind:IS.meta(me),id:z.string().min(1).meta(me)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),PS=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),Oa=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...me,readOnly:true}),name:ds.meta(me),handle:rr.meta(me),customer_facing_description:z.string().max(500).optional().meta(me),type:Oc.meta(me),unit:z.string().max(100).optional().meta(me),period_scope:_h.optional().meta(me),allocation:zc.optional().meta(me),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(me),sort_order:z.number().int().default(0).meta(me),metadata:li.meta(me)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":Nr,...gh,...qi()}),TS=Er("EntitlementAnchor"),qa=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...me,readOnly:true}),handle:rr.meta({...me,readOnly:true}),entitlement_id:z.string().min(1).meta(me),targets:z.array(yh).min(1).meta(me),segment_ids:z.array(z.string()).default([]).meta(me),visibility:SS.default("public").meta(me),period_scope:_h.optional().meta(me),instance:z.string().max(100).optional().meta(me),reset_period:PS.optional().meta(me),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(me),enforcement:bh.optional().meta(me),warning_threshold_percent:Qs.optional().meta(me),overage_price_ref:z.string().optional().meta(me),grace_period_hours:z.number().int().min(0).optional().meta(me),tier_value:z.string().optional().meta(me),rate_value:z.number().optional().meta(me),initial_grant:z.number().optional().meta(me),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(me),rollover_enabled:z.boolean().optional().meta(me),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(me),seat_type_id:z.string().optional().meta(me),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(me),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(me),stripe_metered_price_id:z.string().optional().meta(me),enabled:z.boolean().optional().meta(me),allocation:zc.optional().meta(me),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(me),amount_cents:z.number().int().optional().meta(me),currency:z.string().optional().meta(me)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":hh,...gh,...Di()}),CS=Er("EntitlementRuleAnchor");qa.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var kS=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),RS=z.object({code:kS.meta(me),message:z.string().min(1).meta(me),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(me)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),Nu=qa.extend({warnings:z.array(RS).optional().meta(me)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ei,"x-revturbine-schema-exposure":Nr}),Hu=In.merge(An).merge(On).merge(Qn).merge(ir).extend({handle:rr.meta({...me,readOnly:true}),rule_id:z.string().min(1).meta(me),experiment_id:z.string().min(1).meta(me),variant_name:z.string().min(1).max(200).meta(me),is_control:z.boolean().default(false).meta(me),override_fields:z.record(z.string(),z.unknown()).default({}).meta(me)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Yu,"x-revturbine-schema-exposure":hh,...yS,...Di()}),ES=Qr(Oa),wS=Qr(qa);({"/api/entitlement-anchors":{get:R({operationId:"listEntitlementAnchors",requestParams:{query:Jt},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:Wt(TS)}}},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:R({operationId:"listEntitlementRuleAnchors",requestParams:{query:Jt},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:Wt(CS)}}},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:R({operationId:"listEntitlements",requestParams:{query:Jt},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:Wt(Oa)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:R({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Oa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:R({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:R({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:ES}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Oa}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:R({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:R({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:Jt},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:Wt(qa)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:R({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(qa)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Nu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:R({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:wS}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Nu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:R({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:R({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Nu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:R({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:Jt},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:Wt(Hu)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:R({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Hu)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Hu}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Ge}=Ti,{Persisted:_l,Transient:bl}=Cs,{Internal:Mi}=Ui,vh=Hn(un.Playbook,{sdkInput:true}),xh=Hn(un.Playbook,{inConfig:false,sdkInput:true}),AS=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":bl,"x-revturbine-schema-exposure":Mi}),Wu=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":bl,"x-revturbine-schema-exposure":Mi}),Sh=z.object({name:ds.meta(Ge),handle:rr.meta(Ge),plan_id:z.string().nullable().optional().meta(Ge),segment_id:z.string().nullable().optional().meta(Ge),trial_limit_type:Wu.default("time").meta(Ge),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ge),grace_period_days:z.number().int().min(0).default(0).meta(Ge),usage_entitlement_handle:z.string().min(1).optional().meta(Ge),usage_limit_value:z.number().int().min(1).optional().meta(Ge),require_payment_method:z.boolean().default(false).meta(Ge),auto_convert:z.boolean().default(true).meta(Ge),convert_to_plan_id:z.string().optional().meta(Ge),fallback_plan_id:z.string().optional().meta(Ge),limit_per_customer:z.number().int().min(1).default(1).meta(Ge),is_active:z.boolean().default(true).meta(Ge),metadata:li.meta(Ge)}),ka=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ge,readOnly:true})}).merge(Sh).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Mi,...vh,...qi()}),OS=Er("FreeTrialRuleAnchor"),jS=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":bl,"x-revturbine-schema-exposure":Mi}),Ih=z.object({name:ds.meta(Ge),handle:rr.meta(Ge),premium_plan_id:z.string().min(1).meta(Ge),fallback_plan_id:z.string().min(1).meta(Ge),segment_id:z.string().nullable().optional().meta(Ge),trial_limit_type:Wu.default("time").meta(Ge),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ge),usage_entitlement_handle:z.string().min(1).optional().meta(Ge),usage_limit_value:z.number().int().min(1).optional().meta(Ge),start_policy:jS.default("signup").meta(Ge),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(Ge),entitlements_during_trial:z.array(z.string()).default([]).meta(Ge),is_active:z.boolean().default(true).meta(Ge),metadata:li.meta(Ge)}),Ra=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ge,readOnly:true})}).merge(Ih).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Mi,...vh,...qi()}),FS=Er("ReverseTrialRuleAnchor"),Ph=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":bl,"x-revturbine-schema-exposure":Mi}),Th=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":bl,"x-revturbine-schema-exposure":Mi}),Ea=In.merge(An).merge(On).extend({trial_limit_policy:Ph.default("1_per_lifetime").meta(Ge),eligibility_scope:Th.default("per_customer").meta(Ge)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Mi,...xh}),wa=In.merge(An).merge(On).extend({trial_limit_policy:Ph.default("1_per_lifetime").meta(Ge),eligibility_scope:Th.default("per_customer").meta(Ge)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Mi,...xh}),Nc=In.merge(An).merge(On).extend({customer_id:z.string().min(1).meta(Ge),rule_id:z.string().min(1).meta(Ge),rule_type:z.enum(["free_trial","reverse_trial"]).meta(Ge),plan_id:z.string().min(1).meta(Ge),status:AS.default("active").meta(Ge),started_at:z.string().datetime().meta({...Ge,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(Ge),trial_limit_type:Wu.default("time").meta(Ge),usage_entitlement_handle:z.string().min(1).optional().meta(Ge),usage_limit_value:z.number().int().min(1).optional().meta(Ge),converted_at:Fc.meta(Ge),cancelled_at:Fc.meta(Ge),metadata:li.meta(Ge)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":_l,"x-revturbine-schema-exposure":Mi});({"/api/free-trial-rule-anchors":{get:R({operationId:"listFreeTrialRuleAnchors",requestParams:{query:Jt},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:Wt(OS)}}},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:R({operationId:"listFreeTrialRules",requestParams:{query:Jt},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:Wt(ka)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:R({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:ka}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:R({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ka.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ka}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:R({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:R({operationId:"listReverseTrialRuleAnchors",requestParams:{query:Jt},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:Wt(FS)}}},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:R({operationId:"listReverseTrialRules",requestParams:{query:Jt},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:Wt(Ra)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:R({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:Ra}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:R({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ra.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ra}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:R({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:R({operationId:"listFreeTrialSettings",requestParams:{query:Jt},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:Wt(Ea)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:R({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:Ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:R({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ea.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:R({operationId:"listReverseTrialSettings",requestParams:{query:Jt},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:Wt(wa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:R({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:wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:R({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:wa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:R({operationId:"listTrialInstances",requestParams:{query:Jt},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:Wt(Nc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:R({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:R({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:R({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:Nc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:zt,Financial:Hc}=Ti,{Persisted:yl,Transient:Kc}=Cs,{External:us}=Ui,LS=Hn(un.Playbook,{sdkInput:true}),VS=Hn(un.Playbook,{sdkInput:false}),Ju=Hn(un.Billing,{sdkInput:false}),Rs=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":us}),vl=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":us}),Gc=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":us}),ja=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),name:ds.meta(zt),handle:rr.meta(zt),tier_position:z.number().int().min(0).default(0).meta(zt),sort_order:z.number().int().default(0).meta(zt),visibility:Rs.default("public").meta(zt),metadata:li.meta(zt)}).meta({id:"Plan","x-revturbine-schema-persistence":yl,"x-revturbine-schema-exposure":us,...LS,...qi()}),US=Er("PlanAnchor"),Fa=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),handle:rr.meta({...zt,readOnly:true}),plan_id:z.string().min(1).meta(zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z.string().nullable().default(null).meta(zt),price_amount:z.number().min(0).meta(Hc),pricing_model:vl.meta(zt),visibility:Rs.default("public").meta(zt),stripe_price_id:z.string().optional().meta(zt),price_source:Gc.default("static").meta(zt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":yl,"x-revturbine-schema-exposure":us,...Ju,...Di()}),BS=Er("PlanVariationAnchor"),La=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),name:ds.meta(zt),handle:rr.meta(zt),sort_order:z.number().int().default(0).meta(zt),visibility:Rs.default("public").meta(zt),metadata:li.meta(zt)}).meta({id:"AddOn","x-revturbine-schema-persistence":yl,"x-revturbine-schema-exposure":us,...VS,...qi()}),qS=Er("AddOnAnchor"),Va=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...zt,readOnly:true}),handle:rr.meta({...zt,readOnly:true}),addon_id:z.string().min(1).meta(zt),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(zt),segment_id:z.string().nullable().default(null).meta(zt),price_amount:z.number().min(0).meta(Hc),pricing_model:vl.meta(zt),visibility:Rs.default("public").meta(zt),stripe_price_id:z.string().optional().meta(zt),price_source:Gc.default("static").meta(zt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":yl,"x-revturbine-schema-exposure":us,...Ju,...Di()}),DS=Er("AddOnVariationAnchor"),MS=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":Kc,"x-revturbine-schema-exposure":us}),Ua=In.merge(An).merge(On).extend({stripe_price_id:z.string().min(1).meta(zt),stripe_product_id:z.string().min(1).meta(zt),billing_period:MS.meta(zt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Hc),currency:Hf.meta(Hc),pricing_model:vl.meta(zt),nickname:z.string().nullable().default(null).meta(zt),is_mock:z.boolean().default(false).meta(zt),last_updated_from_stripe:Fc.meta(zt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":yl,"x-revturbine-schema-exposure":us,...Ju}),NS=Qr(ja),HS=Qr(Fa),zS=Qr(La),KS=Qr(Va),GS=Qr(Ua);({"/api/plan-anchors":{get:R({operationId:"listPlanAnchors",requestParams:{query:Jt},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:Wt(US)}}},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:R({operationId:"listPlans",requestParams:{query:Jt},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:Wt(ja)}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:R({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(ja)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:ja}}},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:R({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:ja}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:R({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:NS}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:ja}}},default:{description:"Error response",content:{"application/json":{schema:Jn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:R({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:R({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:R({operationId:"listPlanVariationAnchors",requestParams:{query:Jt},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:Wt(BS)}}},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:R({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:Jt},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:Wt(Fa)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:R({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Fa)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Fa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:R({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:Fa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:R({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:HS}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Fa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:R({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:R({operationId:"listAddOnAnchors",requestParams:{query:Jt},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:Wt(qS)}}},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:R({operationId:"listAddOns",requestParams:{query:Jt},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:Wt(La)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:R({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(La)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:La}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:R({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:La}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:R({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:zS}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:La}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:R({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:R({operationId:"listAddOnVariationAnchors",requestParams:{query:Jt},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:Wt(DS)}}},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:R({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:Jt},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:Wt(Va)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:R({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Va)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:R({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:Va}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:R({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:KS}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Va}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:R({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:R({operationId:"listStripePrices",requestParams:{query:Jt},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:Wt(Ua)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:R({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Rr(Ua)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:R({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:Ua}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:R({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:GS}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Ua}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:R({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:m}=Ti,{Persisted:Da,Transient:Je}=Cs,{Internal:ui,External:xt}=Ui,ft=Hn(un.Playbook,{sdkInput:true}),Ba=Hn(un.Playbook,{sdkInput:false}),ks=Hn(un.Playbook,{inConfig:false,sdkInput:false}),Ch=Hn(un.Playbook,{inConfig:false,sdkInput:true}),Aa=Hn(un.Playbook,{inConfig:false,sdkInput:true,source:Ci.CodeConstant}),zu=Hn(un.Playbook,{inConfig:false,sdkInput:true,source:Ci.Runtime}),Ku=Hn(un.Playbook,{inConfig:false,sdkInput:false,source:Ci.Runtime}),$S=Hn(un.Billing,{sdkInput:false}),ZS=Hn(un.Metering,{sdkInput:false}),YS=Hn(un.Branding,{inConfig:true,sdkInput:true}),WS=Hn(un.Branding,{sdkInput:false}),JS="1.0.0",pl=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...m,readOnly:true}),name:ds.meta(m),handle:rr.meta(m),description:jc.meta(m),is_default:z.boolean().default(false).meta(m),entitlement_ids:z.array(z.string()).default([]).meta(m),metadata:li.meta(m)}).meta({id:"SeatType","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...ks,...qi()}),XS=Er("SeatTypeAnchor"),fl=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...m,readOnly:true}),handle:rr.meta(m),label:z.string().min(1).meta(m),description:z.string().nullable().default(null).meta(m),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(m),data_source:z.string().nullable().default(null).meta(m),example_value:z.string().nullable().default(null).meta(m),value_map:z.record(z.string(),z.string()).default({}).meta(m),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(m),metadata:li.meta(m)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...ks,...qi()}),QS=Er("PersonalizationTokenAnchor"),eI=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),Gu=In.merge(An).merge(On).merge(Qn).merge(ir).extend({handle:rr.meta({...m,readOnly:true}),stripe_account_id:z.string().min(1).meta(m),live_mode:z.boolean().default(false).meta(m),onboarding_state:eI.default("not_started").meta({...m,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...m,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...m,readOnly:true}),details_submitted:z.boolean().default(false).meta({...m,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...m,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...m,readOnly:true}),sync_products:z.boolean().default(true).meta(m),sync_prices:z.boolean().default(true).meta(m),sync_subscriptions:z.boolean().default(true).meta(m),sync_invoices:z.boolean().default(false).meta(m),default_currency:z.string().length(3).default("USD").meta(m),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(m),last_sync_at:z.string().optional().meta({...m,readOnly:true}),metadata:li.meta(m)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...$S,...Di()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(m),workspace_name:z.string().optional().meta(m),logo_url:z.string().optional().meta(m),support_email:z.string().optional().meta(m)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...WS});var hl=In.merge(An).merge(On).merge(Qn).merge(ir).extend({handle:rr.meta({...m,readOnly:true}),entitlement_id:z.string().min(1).meta(m),meter_key:z.string().min(1).max(100).meta(m),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(m),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(m),stripe_meter_id:z.string().nullable().default(null).meta(m),is_active:z.boolean().default(true).meta(m),metadata:li.meta(m)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...ZS,...Di()}),uh=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),gl=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...m,readOnly:true}),handle:rr.meta({...m,readOnly:true}),entitlement_id:z.string().min(1).meta(m),soft_limit_percent:z.number().min(0).max(100).default(80).meta(m),hard_limit_percent:z.number().min(0).max(100).default(100).meta(m),soft_limit_action:uh.default("warn").meta(m),hard_limit_action:uh.default("block").meta(m),grace_period_hours:z.number().int().min(0).default(0).meta(m),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(m),is_active:z.boolean().default(true).meta(m)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...Ch,...Di()}),tI=Er("UsageEnforcementSettingsAnchor"),nI=z.object({kind:z.enum(["template","slot"]).meta(m),id:z.string().min(1).meta(m),label:z.string().min(1).optional().meta(m)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),rI=z.object({id:z.string().min(1).meta(m),group:z.array(nI).min(1).meta(m),cap:z.object({count:z.number().int().min(1).meta(m),period:z.enum(["session","day","week","month"]).meta(m)}).meta(m)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),iI=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),kh=z.object({capRules:z.array(rI).default([]).meta(m),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(m),remindLaterMinutes:z.number().int().min(0).default(60).meta(m),testMode:iI.default("off").meta(m)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":ui}),$u=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...m,readOnly:true}),handle:rr.meta({...m,readOnly:true}),global_frequency_cap:kh.nullable().default(null).meta(m),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(m),suppress_for_paid:z.boolean().default(false).meta(m),suppress_for_trial:z.boolean().default(false).meta(m),allow_stacking:z.boolean().default(false).meta(m),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(m)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Da,"x-revturbine-schema-exposure":ui,...Ch,...Di()}),sI=Er("PlacementSettingsAnchor"),aI=z.object({field:z.string().min(1).meta(m),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(m),value:z.string().meta(m)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),oI=z.object({name:z.string().min(1).meta(m),handle:z.string().min(1).meta(m),predicates:z.array(aI).optional().meta(m),dimension_id:z.string().optional().meta(m),experiment_id:z.string().min(1).optional().meta(m)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),lI=z.object({unique_handle:z.string().min(1).meta(m),name:z.string().min(1).meta(m),tier_position:z.number().int().min(0).default(0).meta(m),sort_order:z.number().int().min(0).default(0).meta(m),visibility:Rs.default("public").meta(m)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),cI=z.object({unique_handle:z.string().min(1).meta(m),name:z.string().min(1).meta(m),sort_order:z.number().int().min(0).default(0).meta(m),visibility:Rs.default("public").meta(m)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...Ba}),dI=z.object({handle:z.string().min(1).meta(m),plan_handle:z.string().min(1).meta(m),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(m),segment_handle:z.string().nullable().default(null).meta(m),price_amount:z.number().min(0).meta(m),pricing_model:vl.meta(m),visibility:Rs.default("public").meta(m),stripe_price_id:z.string().nullable().default(null).meta(m),price_source:Gc.meta(m)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ks}),uI=z.object({handle:z.string().min(1).meta(m),addon_handle:z.string().min(1).meta(m),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(m),segment_handle:z.string().nullable().default(null).meta(m),price_amount:z.number().min(0).meta(m),pricing_model:vl.meta(m),visibility:Rs.default("public").meta(m),stripe_price_id:z.string().nullable().default(null).meta(m),price_source:Gc.meta(m)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ks}),mI=z.object({handle:z.string().min(1).meta(m),name:z.string().min(1).meta(m),description:z.string().nullable().default(null).meta(m),is_default:z.boolean().default(false).meta(m),entitlement_handles:z.array(z.string()).default([]).meta(m)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),pI=z.object({handle:z.string().min(1).meta(m),entitlement_handle:z.string().nullable().default(null).meta(m),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(m),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(m),soft_limit_action:z.string().meta(m),hard_limit_action:z.string().meta(m),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(m),notification_channels:z.array(z.string()).default([]).meta(m),is_active:z.boolean().default(true).meta(m)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),fI=z.object({handle:z.string().min(1).meta(m),global_frequency_cap:kh.nullable().default(null).meta(m),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(m),suppress_for_paid:z.boolean().default(false).meta(m),suppress_for_trial:z.boolean().default(false).meta(m),allow_stacking:z.boolean().default(false).meta(m),priority_collision_strategy:z.string().nullable().default(null).meta(m)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),hI=z.object({handle:z.string().min(1).meta(m),name:z.string().min(1).meta(m),category:z.string().nullable().default(null).meta(m),visibility_toggle:z.boolean().default(true).meta(m),source_type:z.string().nullable().default(null).meta(m)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),gI=z.object({handle:z.string().min(1).meta(m),entitlement_handle:z.string().min(1).meta(m),meter_handle:z.string().min(1).meta(m),limit:z.number().int().min(0).nullable().default(null).meta(m),reset_period:z.string().nullable().default(null).meta(m)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),_I=z.object({unique_handle:z.string().min(1).meta(m),name:z.string().min(1).meta(m),type:Oc.meta(m),unit:z.string().optional().meta(m),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(m)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),Rh=z.object({id:z.string().min(1).meta(m),entitlement_id:z.string().min(1).meta(m),targets:z.array(yh).min(1).meta(m),segment_ids:z.array(z.string()).default([]).meta(m),kind:Oc.optional().meta({...m,readOnly:true}),unit:z.string().optional().meta({...m,readOnly:true}),tier_name:z.string().optional().meta({...m,readOnly:true}),tier_description:z.string().optional().meta({...m,readOnly:true}),...qa.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(m),allocation:zc.optional().meta(m)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),bI=z.object({slot_id:z.string().min(1).meta(m),active:z.boolean().meta(m),triggers:z.array(z.string()).meta(m)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),yI=z.object({id:z.string().min(1).meta(m),label:z.string().min(1).meta(m),description:z.string().meta(m),surface_type:z.string().meta(m),placement_handle:z.string().min(1).meta(m),template:z.string().optional().meta(m)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),vI=z.object({name:z.string().min(1).meta(m),type:z.string().optional().meta(m),required:z.boolean().optional().meta(m)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),xI=z.object({id:z.string().min(1).meta(m),surface_type:z.string().meta(m),fields:z.array(vI).optional().meta(m)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),SI=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":Je,"x-revturbine-schema-exposure":xt}),II=z.object({name:z.string().min(1).meta(m),action_type:SI.meta(m),plan_handle:z.string().optional().meta(m),promotion_id:z.string().optional().meta(m),placement_handle:z.string().optional().meta(m),url:z.string().optional().meta(m),tour_id:z.string().optional().meta(m),target_billing_period:z.enum(["monthly","annual"]).optional().meta(m),description:z.string().optional().meta(m)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),PI=z.object({id:z.string().meta(m),name:z.string().meta(m),discount:z.string().meta(m),type:z.string().meta(m),status:z.string().meta(m)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),TI=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(m),label:z.string().min(1).meta(m),description:z.string().optional().meta(m),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(m),data_source:z.string().optional().meta(m),example_value:z.string().optional().meta(m),value_map:z.record(z.string(),z.string()).optional().meta(m),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(m)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),mh=z.object({header:z.string().optional().meta(m),body:z.string().optional().meta(m),cta_label:z.string().optional().meta(m),secondary_cta_label:z.string().optional().meta(m)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),CI=z.object({block_id:z.string().min(1).meta(m),tenant_id:z.string().min(1).meta(m),name:z.string().min(1).meta(m),surface_template_id:z.string().optional().meta(m),default_content:mh.meta(m),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:mh})).optional().meta(m),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(m),tokens_used:z.array(z.string()).optional().meta(m),status:z.enum(["draft","active","archived"]).meta(m),created_at:z.string().datetime().meta({...m,readOnly:true}),updated_at:z.string().datetime().meta({...m,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),kI=z.object({label:z.string().meta(m),path:zf.meta(m),config:z.record(z.string(),z.string()).optional().meta(m)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),Eh=z.object({template_id:z.string().min(1).meta(m),fields:z.record(z.string(),z.string()).meta(m),ctas:z.array(kI).meta(m)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),wh=z.object({plan_ids:z.array(z.string()).meta(m),billing_cadences:z.array(z.string()).optional().meta(m),segment_chips:z.array(z.string()).meta(m)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),RI=z.object({count:z.number().int().min(1).meta(m),period:z.enum(["session","day","week","month","lifetime"]).meta(m)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),Ah=z.object({max_per_period:RI.optional().meta(m),cooldown_days:z.number().int().min(0).optional().meta(m)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),EI=z.object({id:z.string().min(1).meta(m),target:wh.meta(m),surfaces:z.array(Eh).meta(m),caps:Ah.optional().meta(m),surface_slot_ids:z.array(z.string()).optional().meta(m),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(m),created_at:z.string().optional().meta({...m,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(m),recommendation_plan_override:z.string().optional().meta(m)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),wI=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:Qs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Qs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Qs}),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":Je,"x-revturbine-schema-exposure":xt}),AI=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt}),OI=z.object({id:z.string().min(1).meta(m),name:z.string().min(1).meta(m),category:AI.meta(m),trigger:wI.meta(m),payloads:z.array(EI).meta(m),order:z.number().int().min(0).meta(m)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),jI=z.object({payload_id:z.string().min(1).meta(m),placement_id:z.string().min(1).meta(m),target:wh.meta(m),caps:Ah.optional().meta(m),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(m),created_at:z.string().meta({...m,readOnly:true}),updated_at:z.string().datetime().optional().meta({...m,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(m),surfaces:z.array(Eh).optional().meta(m),surface_slot_ids:z.array(z.string()).optional().meta(m),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(m)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),FI=z.object({kind:z.string().min(1).meta(m),schema_version:z.number().int().nonnegative().meta(m),config:z.unknown().meta(m)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),LI=In.merge(Sh).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ks}),VI=In.merge(Ih).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ks}),UI=z.object({plans:z.array(lI).meta({...m,...ft}),addons:z.array(cI).optional().meta({...m,...Ba}),entitlements:z.array(_I).meta({...m,...ft}),entitlement_rules:z.array(Rh).meta({...m,...ft}),segments:z.array(oI).meta({...m,...ft}),content_ui_paths:z.array(II).meta({...m,...ft}),slot_configs:z.array(bI).optional().meta({...m,...ft,...Du({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({...m,...ft,...Du({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({...m,...YS,...Du({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(yI).optional().meta({...m,...ft}),message_blocks:z.array(CI).optional().meta({...m,...ft}),placement_payloads:z.array(jI).optional().meta({...m,...ft}),placements:z.array(OI).optional().meta({...m,...ft}),content_promotions:z.array(PI).optional().meta({...m,...ft}),personalization_tokens:z.array(TI).optional().meta({...m,...ft}),surface_templates:z.array(xI).optional().meta({...m,...ft}),free_trial_rules:z.array(LI).optional().meta({...m,...Ba}),reverse_trial_rules:z.array(VI).optional().meta({...m,...Ba}),plan_variations:z.array(dI).optional().meta({...m,...Ba}),addon_variations:z.array(uI).optional().meta({...m,...Ba}),extension_rules:z.array(FI).optional().meta({...m,...ft}),seat_types:z.array(mI).optional().meta({...m,...ft}),enforcement_defaults:z.array(pI).optional().meta({...m,...ft}),placement_settings:z.array(fI).optional().meta({...m,...ft}),segment_dimensions:z.array(hI).optional().meta({...m,...ft}),meter_bindings:z.array(gI).optional().meta({...m,...ft}),experiments:z.array(z.unknown()).max(0).optional().meta({...m,...ks}),signal_catalog:z.object({}).strict().optional().meta({...m,...ks})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft}),BI=z.object({artifact_type:z.literal("playbook").meta({...m,...Aa,readOnly:true}),format_version:z.literal(JS).meta({...m,...Aa,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...m,...Aa}),playbook_version_id:z.string().nullable().default(null).meta({...m,...zu,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...m,...Ku,readOnly:true}),environment_id:z.string().min(1).optional().meta({...m,...Ku,readOnly:true}),project_id:z.string().min(1).optional().meta({...m,...Ku,readOnly:true}),exported_at:z.string().datetime().optional().meta({...m,...zu,readOnly:true}),schema_version:z.string().min(1).optional().meta({...m,...Aa,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...m,...Aa,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...m,...Aa,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...zu}),Oh=BI.extend(UI.shape).meta({"x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft});function qI(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function jh(t){if(!qI(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(jh,Oh).meta({id:"Playbook","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft});z.preprocess(jh,Oh.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Je,"x-revturbine-schema-exposure":xt,...ft});({"/api/seat-type-anchors":{get:R({operationId:"listSeatTypeAnchors",requestParams:{query:Jt},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:Wt(XS)}}},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:R({operationId:"listSeatTypes",requestParams:{query:Jt},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:Wt(pl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:R({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(pl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:R({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:pl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:R({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:R({operationId:"listPersonalizationTokenAnchors",requestParams:{query:Jt},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:Wt(QS)}}},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:R({operationId:"listPersonalizationTokens",requestParams:{query:Jt},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:Wt(fl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:R({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(fl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:R({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:fl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fl}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:R({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:R({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr(Gu)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Gu}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:R({operationId:"listMeteringConfigs",requestParams:{query:Jt},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:Wt(hl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:R({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(hl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:hl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:R({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",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:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:R({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:R({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:Jt},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:Wt(tI)}}},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:R({operationId:"listUsageEnforcementSettings",requestParams:{query:Jt},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:Wt(gl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:R({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rr(gl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:gl}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:R({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",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:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:R({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:R({operationId:"listPlacementSettingsAnchors",requestParams:{query:Jt},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:Wt(sI)}}},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:R({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Qr($u)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:$u}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var $c=new Int32Array(2);new Float32Array($c.buffer);new Float64Array($c.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var Zc;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(Zc||(Zc={}));var Kh=14,Gh=11;var $h=4294967295;var Zh=$h;function em(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 Qu(t,e){if(!t)return true;if(!e)return false;switch(t.kind){case "trial_started":{if(e.trialActive!==true)return false;let n=em(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 Yh(t,e){let n=t.filter(a=>a.trialTrigger?.kind==="trial_progress");if(n.length===0)return null;let r=n.filter(a=>a.trialTrigger?.kind!=="trial_progress"?false:e>=a.trialTrigger.progressPercent);if(r.length===0)return null;let i=r[0];for(let a of r.slice(1)){let o=a.trialTrigger.kind==="trial_progress"?a.trialTrigger.progressPercent:-1,g=i.trialTrigger.kind==="trial_progress"?i.trialTrigger.progressPercent:-1;(o>g||o===g&&a.entryOrder<i.entryOrder)&&(i=a);}let s=r.filter(a=>a!==i).map(a=>a.ruleId).filter(a=>typeof a=="string"&&a.length>0);return {winner:i,supersededIds:s}}function Wh(t){switch(t.kind){case "trial_started":return {kind:"trial_started"};case "trial_progress":return typeof t.progressPercent=="number"?{kind:"trial_progress",progressPercent:t.progressPercent}:void 0;case "trial_ending":return typeof t.daysBeforeEnd=="number"?{kind:"trial_ending",daysBeforeEnd:t.daysBeforeEnd}:void 0;case "trial_ended":return {kind:"trial_ended"};case "trial_converted":return {kind:"trial_converted"};default:return}}function Jh(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 Sl(t){let e=Array.isArray(t.payloads)?t.payloads:[],n=new Map((Array.isArray(t.messageBlocks)?t.messageBlocks:[]).map(a=>[a.block_id,a])),r=Array.isArray(t.uiPaths)?t.uiPaths:[],i=Array.isArray(t.promotions)?t.promotions:[],s=Array.isArray(t.tokens)?t.tokens:[];return {listPayloads:a=>e.filter(o=>o.surface_template_id===a),getMessageBlockById:a=>n.get(a),getUiPathById:a=>r.find(o=>o.id===a||o.name===a),getPromotionById:a=>i.find(o=>o.id===a||o.name===a),listPersonalizationTokens:()=>s}}function Il(t,e){let n={...t};for(let r of e){let i=t[r.token];if(i==null||!r.value_map)continue;let s=String(i),a=r.value_map[s];a!==void 0&&(n[r.token]=a);}return n}function tm(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"};return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(r,i)=>{let s=e[i];if(s===void 0){let a=n[i];a&&(s=e[a]);}return s===void 0?r:String(s)})}function nm(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=tm(i,e):n[r]=i;return n}function Xh(t,e){return nm(t,e)}function rm(t,e,n,r,i,s,a){let o=n.filter(P=>P.surface_template_id===t&&P.status==="active");if(o.length===0)return null;let g=new Map(r.map(P=>[P.block_id,P])),v=new Set(e.segmentIds),y=Il(s,i),I=a?.segmentDimensions;for(let P of o){let S=P.default_message_block_id,x,O=P.ui_path_id,H=P.promotion_id;if(P.segment_content_map){if(I&&Object.keys(I).length>0){let K=new Map;for(let M of P.segment_content_map){let Le=M.dimension;if(!Le)continue;let jt=K.get(Le)??[];jt.push(M),K.set(Le,jt);}if(K.size>0){let M=true,Le;for(let[,jt]of K){let Yn=jt.find(Q=>v.has(Q.segment_id));if(!Yn){M=false;break}Le||(Le=Yn);}if(M&&Le)S=Le.message_block_id,x=Le.segment_id,Le.ui_path_id&&(O=Le.ui_path_id),Le.promotion_id&&(H=Le.promotion_id);else if(!M)continue}else for(let M of P.segment_content_map)if(v.has(M.segment_id)){S=M.message_block_id,x=M.segment_id,M.ui_path_id&&(O=M.ui_path_id),M.promotion_id&&(H=M.promotion_id);break}}else for(let K of P.segment_content_map)if(v.has(K.segment_id)){S=K.message_block_id,x=K.segment_id,K.ui_path_id&&(O=K.ui_path_id),K.promotion_id&&(H=K.promotion_id);break}}let z=g.get(S);if(!z||z.status!=="active")continue;let se={...z.default_content};if(z.segment_overrides){let K=x?z.segment_overrides.find(M=>M.segment_value_id===x):z.segment_overrides.find(M=>v.has(M.segment_value_id));K&&(se={...se,...K.content},x=K.segment_value_id);}let Ie=Xh(se,y);return {payload:P,messageBlock:z,resolvedContent:Ie,matchedSegmentId:x,uiPathId:O,promotionId:H}}return null}async function Wc(t,e,n,r,i){let a=(await Promise.resolve(n.listPayloads(t))).filter(y=>y.status==="active");if(a.length===0)return null;let o=new Set(e.segmentIds),g=i??(n.listPersonalizationTokens?await Promise.resolve(n.listPersonalizationTokens()):[]),v=Il(r,g);for(let y of a){let I=y.default_message_block_id,P,S=y.ui_path_id,x=y.promotion_id;if(y.segment_content_map){for(let K of y.segment_content_map)if(o.has(K.segment_id)){I=K.message_block_id,P=K.segment_id,K.ui_path_id&&(S=K.ui_path_id),K.promotion_id&&(x=K.promotion_id);break}}let O=await Promise.resolve(n.getMessageBlockById(I));if(!O||O.status!=="active")continue;let H={...O.default_content};if(O.segment_overrides){let K=P?O.segment_overrides.find(M=>M.segment_value_id===P):O.segment_overrides.find(M=>o.has(M.segment_value_id));K&&(H={...H,...K.content},P=K.segment_value_id);}let z=Xh(H,v),se;S&&n.getUiPathById&&(se=await Promise.resolve(n.getUiPathById(S)));let Ie;return x&&n.getPromotionById&&(Ie=await Promise.resolve(n.getPromotionById(x))),{payload:y,messageBlock:O,resolvedContent:z,matchedSegmentId:P,uiPathId:S,promotionId:x,uiPath:se??void 0,promotion:Ie??void 0}}return null}function MI(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 NI(t,e){let n=MI(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 HI(t,e){if(!e)return null;let n=NI(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 Dh(t,e){if(!t)return true;let n=HI(t,e);return n===null?false:n>=t.thresholdPercent}var {Unrestricted:Ae}=Ti,{Persisted:Jc,Transient:Es}=Cs,{External:mi}=Ui,Qh=Hn(un.Playbook,{sdkInput:true});Hn(un.Playbook,{inConfig:false,sdkInput:false});var zI=Hn(un.Playbook,{inConfig:false,sdkInput:true}),KI=Hn(un.Playbook,{inConfig:false,sdkInput:false,source:Ci.Runtime}),GI=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]),$I={other_conversion:["none_always_on","overage_vs_upgrade","time_bound"],retention:["payment_failed","payment_at_risk"]};function ZI(t){return $I[t]??[]}function YI(t,e){return ZI(e).includes(t)}var eg=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),tg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),WI=z.object({count:z.number().int().positive().meta(Ae),period:tg.meta(Ae)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi});z.object({surface_type:z.string().min(1).meta(Ae),rules:z.array(WI).meta(Ae),cooldown_ms:z.number().int().nonnegative().optional().meta(Ae)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":mi,...Ti.Operational,...zI});var JI=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":Es,"x-revturbine-schema-exposure":mi}),Ma=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ae,readOnly:true}),name:ds.meta(Ae),handle:rr.meta(Ae),description:jc.meta(Ae),category:eg.meta(Ae),drag_order_in_category:z.number().int().default(0).meta(Ae),surface_slot_id:z.string().optional().meta(Ae),entitlement_id:z.string().optional().meta(Ae),tier_threshold:z.string().optional().meta(Ae),threshold_percent:Qs.optional().meta(Ae),trial_type:z.enum(["free","reverse"]).optional().meta(Ae),trigger_type:z.string().optional().meta(Ae),trial_progress_percent:z.number().min(0).max(100).optional().meta(Ae),days_before_end:z.number().int().min(0).optional().meta(Ae),qualifier:GI.optional().meta(Ae),activation_window_start:z.string().datetime().optional().meta(Ae),activation_window_end:z.string().datetime().optional().meta(Ae),metadata:li.meta(Ae)}).meta({id:"Placement","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":mi,...Qh,...qi()}),XI=Er("PlacementAnchor"),QI=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),eP=z.object({code:QI.meta(Ae),message:z.string().min(1).meta(Ae),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Ae)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),Mh=Ma.extend({warnings:z.array(eP).optional().meta(Ae)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),tP=z.object({label:z.string().min(1).max(200).meta(Ae),cta_path_type:JI.meta(Ae),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Ae)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Es,"x-revturbine-schema-exposure":mi}),xl=In.merge(An).merge(On).merge(Qn).merge(ir).extend({anchor_id:z.string().min(1).meta({...Ae,readOnly:true}),handle:rr.meta({...Ae,readOnly:true}),placement_id:z.string().min(1).meta(Ae),drag_order:z.number().int().default(0).meta(Ae),target_plan_ids:z.array(z.string()).default([]).meta(Ae),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Ae),target_segments:z.array(z.string()).default([]).meta(Ae),surface_slot_ids:z.array(z.string()).default([]).meta(Ae),surface_template_id:z.string().min(1).meta(Ae),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Ae),cta_list:z.array(tP).default([]).meta(Ae),max_per_period:z.number().int().min(0).nullable().default(null).meta(Ae),max_period_unit:tg.default("session").meta(Ae),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Ae),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Ae),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Ae),recommendation_plan_override:z.string().optional().meta(Ae)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":mi,...Qh,...Di()}),nP=Er("PlacementPayloadAnchor"),rP=In.merge(An).merge(On).merge(Qn).merge(ir).extend({surface_slot_handle:z.string().min(1).max(200).meta(Ae),surface_type:Su.meta(Ae),surface_template_ids:z.array(z.string()).default([]).meta(Ae),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Ae),first_seen:z.string().datetime().meta({...Ae,readOnly:true}),last_seen:z.string().datetime().meta({...Ae,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Ae),placement_count:z.number().int().min(0).default(0).meta({...Ae,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":Jc,"x-revturbine-schema-exposure":mi,...KI,...qi("surface_slot_handle")}),iP=Qr(Ma),sP=Qr(xl);({"/api/placement-anchors":{get:R({operationId:"listPlacementAnchors",requestParams:{query:Jt},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:Wt(XI)}}},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:R({operationId:"listPlacements",requestParams:{query:Jt},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:Wt(Ma)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:R({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Rr(Ma)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Mh}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:R({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:Ma}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:R({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:iP}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mh}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:R({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:R({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Ma}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:R({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:eg,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:R({operationId:"listPlacementPayloadAnchors",requestParams:{query:Jt},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:Wt(nP)}}},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:R({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:Jt},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:Wt(xl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:R({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Rr(xl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:R({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:sP}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:R({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:R({operationId:"listSurfaceSlots",requestParams:{query:Jt},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:Wt(rP)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});function Nh(t,e,n){if(!t)return true;if(!YI(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 Hh(t,e,n){if(!t||!t.tierThreshold)return true;let r=e.get(t.entitlementHandle);if(!r||r.length===0)return false;let i=r.indexOf(t.tierThreshold);if(i<0)return false;let s=n?.tiers?.[t.entitlementHandle];return (s?r.indexOf(s):-1)<i}var ng={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 aP(t,e){return t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g,(n,r)=>{let i=e[r];return i==null?`{{${r}}}`:String(i)})}function oP(t){let e={};for(let[n,r]of Object.entries(t)){if(typeof r=="string"){e[n]=aP(r,t);continue}e[n]=r;}return e}function rg(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 ig(t,e){if(t==="qualifier"&&!(typeof e!="string"||e.length===0))return {kind:"qualifier",qualifier:e}}function lP(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 ig(e,n)}function cP(t){if(t)return ig(t.kind,t.qualifier)}function sg(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 dP(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 sg(n,e,r)}function uP(t,e){if(t)return sg(t.kind,e,t.thresholdPercent)}function ag(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 mP(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 ag(n,e,r)}function pP(t,e){if(t)return ag(t.kind,e,t.tierThreshold)}function fP(t){if(!t||typeof t!="object"||!("entitlement_handle"in t))return;let e=t.entitlement_handle;return typeof e=="string"?e:void 0}function hP(t){if(!t||typeof t!="object"||!("slot_id"in t))return;let e=t.slot_id;return typeof e=="string"?e:void 0}function gP(t,e){let n={...ng};for(let o of t.surface_templates??[])n[o.id]=o.surface_type;let r=new Map;for(let o of t.plans??[])r.set(o.unique_handle,o.unique_handle);let i=new Map;for(let o of t.entitlements??[])o.tier_definitions?.length&&i.set(o.unique_handle,o.tier_definitions.map(g=>g.handle));let s=new Map,a=new Map;for(let o of e.placements){let g=o.payloads[0];if(!g)continue;let v=g.surfaces[0];if(!v)continue;let y=v.template_id,I=n[y]??"custom",P={...v.fields};v.ctas?.[0]&&(P.cta_label=v.ctas[0].label),v.ctas?.[1]&&(P.secondary_cta_label=v.ctas[1].label);let S=rg(v.ctas?.[0]),x=Array.isArray(g.target?.plan_ids)?g.target.plan_ids:[],O=fP(o.trigger),H=hP(o.trigger),z=Jh(o.trigger),se=dP(o.trigger,O),Ie=lP(o.trigger),K=mP(o.trigger,O),M={output_id:g.id,category:o.category,surface:{template:y,type:I,slot_id:o.id},content:{...P,__target_plan_ids:x,...O?{__trigger_entitlement_handle:O}:{},...z?{__trigger_kind:z.kind}:{}},cta_path:S,rule_id:o.id,decision_id:g.id,config_version:wc(t),present_upsell:true},Le=s.get(y)??[];Le.push({output:M,entryOrder:o.order??0,entryCategory:o.category,triggerEntitlementHandle:O,triggerSlotId:H,trialTrigger:z,thresholdTrigger:se,qualifierTrigger:Ie,entitlementGateTrigger:K}),s.set(y,Le);let jt=o.id.replace(/^pl_/,"");a.set(jt,M),a.set(o.id,M);}for(let o of s.values())o.sort((g,v)=>g.entryOrder-v.entryOrder);return {outputsByTemplate:s,outputsByName:a,planHandleToId:r,tierLaddersByHandle:i}}function _P(t,e){let n=e.trigger;if(n.kind==="entitlement_gate"||n.kind==="usage_threshold"||n.kind==="credit_threshold"||n.kind==="seat_threshold")return t.getEntitlement(n.entitlementIdx)?.uniqueHandle}function bP(t,e){return e.trigger.kind!=="surface_render"?void 0:t.getSlot(e.trigger.slotIdx)?.sourceId}function yP(t){let e={...ng};for(let o=0;o<t.surfaceTemplatesLength();o++){let g=t.getSurfaceTemplate(o);g&&(e[g.sourceId]=g.surfaceType);}let n=new Map;for(let o=0;o<t.plansLength();o++){let g=t.getPlan(o);g&&n.set(g.uniqueHandle,g.sourceId);}let r=new Map;for(let o=0;o<t.entitlementsLength();o++){let g=t.getEntitlement(o);g&&g.tierHandles.length>0&&r.set(g.uniqueHandle,g.tierHandles);}let i=new Map,s=new Map,a=t.header().configVersion;for(let o=0;o<t.placementsLength();o++){let g=t.getPlacement(o);if(!g)continue;let v=g.payloads[0];if(!v)continue;let y=v.surfaces[0];if(!y)continue;let I=y.templateSourceId,P=e[I]??"custom",S={...y.fields};y.ctas[0]&&(S.cta_label=y.ctas[0].label),y.ctas[1]&&(S.secondary_cta_label=y.ctas[1].label);let x=rg(y.ctas[0]),O=[];for(let Q of v.target.planIdxs){let Ft=t.getPlan(Q);Ft&&O.push(Ft.sourceId);}let H=_P(t,g),z=bP(t,g),se=Wh(g.trigger),Ie=uP(g.trigger,H),K=cP(g.trigger),M=pP(g.trigger,H),Le={output_id:v.sourceId,category:g.category,surface:{template:I,type:P,slot_id:g.sourceId},content:{...S,__target_plan_ids:O,...H?{__trigger_entitlement_handle:H}:{},...se?{__trigger_kind:se.kind}:{}},cta_path:x,rule_id:g.sourceId,decision_id:v.sourceId,config_version:a,present_upsell:true},jt=i.get(I)??[];jt.push({output:Le,entryOrder:g.order,entryCategory:g.category,triggerEntitlementHandle:H,triggerSlotId:z,trialTrigger:se,thresholdTrigger:Ie,qualifierTrigger:K,entitlementGateTrigger:M}),i.set(I,jt);let Yn=g.sourceId.replace(/^pl_/,"");s.set(Yn,Le),s.set(g.sourceId,Le);}for(let o of i.values())o.sort((g,v)=>g.entryOrder-v.entryOrder);return {outputsByTemplate:i,outputsByName:s,planHandleToId:n,tierLaddersByHandle:r}}function vP(t,e){let n=t.message_blocks,r=t.placement_payloads;if(!n?.length||!r?.length)return;let i=new Map;for(let a of e.placements){let o=a.payloads[0]?.surfaces?.[0]?.template_id;o&&i.set(a.id,o);}let s=[];for(let a of r){let o=a.content_link?.message_block_id;if(!o)continue;let g=i.get(a.placement_id);g&&s.push({payload_id:a.payload_id,tenant_id:"",name:a.payload_id,surface_template_id:g,default_message_block_id:o,ui_path_id:a.content_link?.ui_path_id,promotion_id:a.content_link?.promotion_id,status:"active"});}if(s.length!==0)return Sl({payloads:s,messageBlocks:n,uiPaths:t.content_ui_paths,promotions:t.content_promotions,tokens:t.personalization_tokens})}function xP(t){let e=t.messageBlocksLength(),n=t.placementPayloadsLength();if(e===0||n===0)return;let r=new Map;for(let o=0;o<t.placementsLength();o++){let g=t.getPlacement(o);if(!g)continue;let v=g.payloads[0]?.surfaces?.[0]?.templateSourceId;v&&r.set(g.sourceId,v);}let i=[],s=new Map;for(let o=0;o<e;o++){let g=t.getMessageBlock(o);g&&(i.push(g),s.set(o,g.block_id));}let a=[];for(let o=0;o<n;o++){let g=t.getPlacementPayload(o);if(!g||g.messageBlockIdx===Zh)continue;let v=s.get(g.messageBlockIdx);if(!v)continue;let y=r.get(g.placementSourceId);y&&a.push({payload_id:g.sourceId,tenant_id:"",name:g.sourceId,surface_template_id:y,default_message_block_id:v,status:"active"});}if(a.length!==0)return Sl({payloads:a,messageBlocks:i})}function SP(t){let e={};for(let n=0;n<t.segmentsLength();n++){let r=t.getSegment(n);r?.experimentId&&(e[r.slug]=r.experimentId);}return e}function og(t){let{source:e,impressionHistory:n}=t,{outputsByTemplate:r,outputsByName:i,planHandleToId:s,tierLaddersByHandle:a}=e.format==="flatbuffer"?yP(e.handle):gP(e.exportedConfig,e.placements),o=e.format==="json"?vP(e.exportedConfig,e.placements):xP(e.handle),g=e.format==="json"?ch(e.exportedConfig.segments??[]):SP(e.handle);function v(y,I,P,S){let x=Array.isArray(y.content.__target_plan_ids)?y.content.__target_plan_ids.filter(H=>typeof H=="string"):[],O=Array.isArray(y.content.__target_billing_periods)?y.content.__target_billing_periods.filter(H=>typeof H=="string"):[];return Zu({target_plan_ids:x,target_billing_periods:O,category:y.category},{currentPlanId:I,planHandle:P,billingPeriod:S}).eligible}return async(y,I,P)=>{let S=P?.__providers,x=S?.plan?.currentPlanHandle,O=S?.plan?.billingPeriod,H=x?s.get(x):void 0,z=wt=>typeof wt=="string"?wt:"",se=Array.isArray(I?.metadata?.surface_template_ids)?I.metadata.surface_template_ids:void 0,Ie,K=[];if(se&&se.length>0){let wt=[];for(let vt of se){let xr=r.get(vt);xr&&wt.push(...xr);}if(wt.length===0)return zh(y,"no_candidates_for_template","No placements configured for this surface template");wt.sort((vt,xr)=>vt.entryOrder-xr.entryOrder);let an=I?.metadata?.entitlement_handle,qn=I?.metadata?.surface_slot_category,on=qn?{gated:["gated"],fixed:["fixed"],triggered:["usage_credit_seat","trials","other_conversion","retention"]}[qn]:void 0,en=wt;if(an){let vt=wt.filter(xr=>xr.triggerEntitlementHandle===an);vt.length>0&&(en=vt);}let dr=I?.metadata?.surface_slot_id;if(dr){let vt=en.filter(xr=>xr.triggerSlotId===dr);vt.length>0&&(en=vt);}if(I?.metadata?.fixedOnly===true&&(en=en.filter(vt=>vt.entryCategory==="fixed")),on&&qn!=="fixed"&&en.length>1){let vt=en.filter(xr=>on.includes(xr.entryCategory));vt.length>0&&(en=vt);}n&&(en=en.filter(vt=>!n.isHiddenSync(vt.output.rule_id??""))),en=en.filter(vt=>Qu(vt.trialTrigger,S?.plan)),en=en.filter(vt=>Dh(vt.thresholdTrigger,S?.entitlements)),en=en.filter(vt=>Nh(vt.qualifierTrigger,vt.entryCategory,S?.plan)),en=en.filter(vt=>Hh(vt.entitlementGateTrigger,a,S?.entitlements));let gn,He=[],nr=em(S?.plan);if(nr!==null&&en.length>1){let vt=en.map(xa=>({ruleId:xa.output.rule_id??void 0,entryOrder:xa.entryOrder,trialTrigger:xa.trialTrigger,output:xa.output})),xr=Yh(vt,nr);if(xr){gn=xr.winner,He=xr.supersededIds;let xa=xr.winner.ruleId;en=en.filter(Ff=>Ff.trialTrigger?.kind!=="trial_progress"||(Ff.output.rule_id??void 0)===xa);}}let oi;for(let vt of en)if(v(vt.output,H,x,O)){Ie=vt.output,oi=vt;break}oi&&gn&&gn.ruleId===(oi.output.rule_id??void 0)&&He.length>0&&(Ie={...Ie,content:{...Ie.content,__superseded_placement_ids:He}}),Ie||(K=["no_eligible_candidate"]);}else {let wt=I?.name,an=(wt?i.get(wt):void 0)??i.get(y.placementId),qn;if(an)for(let vr of r.values()){let on=vr.find(en=>en.output===an);if(on){qn=on;break}}an&&n?.isHiddenSync(an.rule_id??"")?K=["placement_retired"]:an&&!Qu(qn?.trialTrigger,S?.plan)?K=["trial_trigger_unmet"]:an&&!Dh(qn?.thresholdTrigger,S?.entitlements)?K=["threshold_trigger_unmet"]:an&&!Nh(qn?.qualifierTrigger,qn?.entryCategory??an.category,S?.plan)?K=["qualifier_trigger_unmet"]:an&&!Hh(qn?.entitlementGateTrigger,a,S?.entitlements)?K=["entitlement_gate_unmet"]:an&&v(an,H,x,O)?Ie=an:an?K=["plan_target_mismatch"]:K=["placement_not_found"];}if(!Ie){let wt=K[0]??"placement_not_found";return zh(y,wt,"Placement not configured")}let M=Ie.content,Le=Ie.surface.template;if(o&&Le){let wt={userId:typeof y.userId=="string"?y.userId:"",segmentIds:S?.segments?.segmentIds??[]},an=await Wc(Le,wt,o,{});an&&(M={...Ie.content,...an.resolvedContent});}let jt={...M},Yn=typeof jt.entitlement=="string"?jt.entitlement:typeof jt.__trigger_entitlement_handle=="string"?jt.__trigger_entitlement_handle:void 0,Q=Yn?S?.entitlements?.usage?.[Yn]:void 0;if(Q){jt.usage_remaining=Number.isFinite(Q.remaining)?Q.remaining:0,jt.usage_limit=Number.isFinite(Q.limit)?Q.limit:0,jt.usage_current=Number.isFinite(Q.used)?Q.used:0,jt.usage_percent=Q.limit>0?Math.min(100,Math.round(Q.used/Q.limit*100)):0;let wt=Q.reset_date;typeof wt=="string"&&wt.length>0&&(jt.reset_date=wt);}let Ft=oP(jt),rn=dh(g,S?.segments?.segmentIds??[],S?.experiments?.assignments),sn={...Ie,content:Ft,...rn},Wn=!((Ie.category==="upsell"||Ie.category==="trial_conversion")&&x==="enterprise");return {placementId:y.placementId,requestId:`local_${Date.now()}`,visible:Wn,decisionSource:"fallback",reasonCodes:Wn?[]:["plan_tier_suppressed"],content:{header:z(sn.content.header),body:z(sn.content.body),cta_label:z(sn.content.cta_label),title:z(sn.content.header),cta:z(sn.content.cta_label)},output:sn}}}function zh(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 Na(t){return og({source:{format:"json",exportedConfig:t.exportedConfig,placements:t.placements},impressionHistory:t.impressionHistory})}var lg=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(lg).default([]),days_before_end:z.number().int().min(0).max(365).nullable().default(null),trial_type:z.enum(["free","reverse"]).nullable().default(null)});z.object({threshold_percent:z.number().int().min(0).max(100),trial_type:z.enum(["free","reverse"]).nullable().default(null)});function za(){return typeof window>"u"||typeof document>"u"}function wr(){return !za()}var Tl=class{constructor(){this.providers=new Map,this.cache=new Map,this.unsubscribers=new Map;}register(t){let e=this.providers.get(t.domain);if(e&&this.unregister(e.domain),this.providers.set(t.domain,t),t.subscribe){let n=t.subscribe(r=>{this.cache.set(t.domain,{value:r,resolvedAt:Date.now(),ttlMs:t.cacheTtlMs??0});});this.unsubscribers.set(t.domain,n);}}unregister(t){this.providers.delete(t),this.cache.delete(t);let e=this.unsubscribers.get(t);e&&(e(),this.unsubscribers.delete(t));}clear(){for(let t of this.unsubscribers.values())t();this.providers.clear(),this.cache.clear(),this.unsubscribers.clear();}async resolveAll(){let t=Array.from(this.providers.entries()),e=await Promise.all(t.map(async([s,a])=>{let o=this.cache.get(s),g=Date.now();if(o&&o.ttlMs>0&&g-o.resolvedAt<o.ttlMs)return [s,o.value];let v=await a.resolve();return this.cache.set(s,{value:v,resolvedAt:g,ttlMs:a.cacheTtlMs??0}),[s,v]})),n={},r={},i=false;for(let[s,a]of e)if(s==="traits"||s.startsWith("traits:")){let o=a;o?.traits&&(Object.assign(r,o.traits),i=true);}else n[s]=a;return i&&(n.traits={traits:r}),n}async get(t){let e=this.providers.get(t);if(!e)return;let n=this.cache.get(t),r=Date.now();if(n&&n.ttlMs>0&&r-n.resolvedAt<n.ttlMs)return n.value;let i=await e.resolve();return this.cache.set(t,{value:i,resolvedAt:r,ttlMs:e.cacheTtlMs??0}),i}has(t){return this.providers.has(t)}get size(){return this.providers.size}invalidate(t){this.cache.delete(t);}invalidateAll(){this.cache.clear();}},CP=new Set(["cta_completed"]),kP=1440*60*1e3,cg=10080*60*1e3,RP="revturbine:interaction-state",dg=class{constructor(t){this.state=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cg,this.defaultRemindLaterMs=t.defaultRemindLaterMs??3600*1e3,this.hydrate();}track(t){let e=this.stateKey(t.placementId,t.userId,t.treatmentId),n=Date.now(),r=t.metadata??{},s={...this.state.get(e)??{updatedAt:new Date(n).toISOString()},lastInteractionType:t.interactionType,updatedAt:t.interactionAt??new Date(n).toISOString()};if(t.interactionType==="dismiss"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}if(t.interactionType==="remind_me_later"){let a=Number(r.remind_after_seconds);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a*1e3:this.defaultRemindLaterMs);}if(t.interactionType==="cta_clicked"){let a=Number(r.cooldown_ms);s.suppressedUntil=n+(Number.isFinite(a)&&a>0?a:this.defaultDismissCooldownMs);}t.interactionType==="cta_completed"&&(s.suppressedUntil=n+300*1e3),this.state.set(e,s),this.persist();}checkSuppression(t,e,n){let r=this.stateKey(t,e,n),i=this.state.get(r);return i?.suppressedUntil?i.suppressedUntil<=Date.now()?{suppressed:false}:{suppressed:true,reason:i.lastInteractionType==="remind_me_later"?"suppressed_until_remind_window":"suppressed_by_dismiss_cooldown"}:{suppressed:false}}clearSuppression(t,e,n){let r=this.stateKey(t,e,n);this.state.delete(r),this.persist();}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e))!r||typeof r!="object"||this.state.set(n,r);}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.state.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${RP}:${this.tenantId}:${this.userId}`}stateKey(t,e,n){return [this.tenantId,e,t,n||"default"].join(":")}},EP="revturbine:presentation-caps";function Ha(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function wP(t){if(!Ha(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 ug=class{constructor(t){this.capsByKey=new Map,this.storage=t.storage,this.tenantId=t.tenantId,this.userId=t.userId,this.hydrate();}enforce(t){let e=this.extractPolicies(t);if(e.length===0)return {allowed:true};let n=this.capKey(t),r=Date.now(),i=this.capsByKey.get(n)??{seenAt:[]},s={...i,seenAt:i.seenAt.filter(g=>Number.isFinite(g)&&g>0)},a=cl({perPayload:{policies:e,seenAt:s.seenAt,cooldownUntil:s.cooldownUntil},now:r});if(!a.allowed)return this.capsByKey.set(n,s),{allowed:false,reason:a.reason};s.seenAt.push(r);let o=e.map(g=>g.cooldownMs).filter(g=>typeof g=="number"&&Number.isFinite(g)&&g>0);return o.length>0?s.cooldownUntil=r+Math.max(...o):delete s.cooldownUntil,this.capsByKey.set(n,s),this.persist(),{allowed:true}}hydrate(){let t=this.storage.getItem(this.storageKey());if(t)try{let e=JSON.parse(t);for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=Array.isArray(r.seenAt)?r.seenAt.filter(a=>Number.isFinite(a)&&a>0):[],s=Number.isFinite(r.cooldownUntil)?r.cooldownUntil:void 0;this.capsByKey.set(n,{seenAt:i,cooldownUntil:s});}}catch{this.storage.removeItem(this.storageKey());}}persist(){try{let t=Object.fromEntries(this.capsByKey.entries());this.storage.setItem(this.storageKey(),JSON.stringify(t));}catch{}}storageKey(){return `${EP}:${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,Ha(t.content)?t.content.payload:void 0,Ha(t.content)?t.content.placement:void 0,Ha(t.content)?t.content.surface:void 0];for(let r of n){if(!Ha(r))continue;let i=Ha(r.caps)?r.caps:void 0;if(!i)continue;let s=[],a=wP(i.max_per_period);a&&s.push(a);let o=Number(i.cooldown_days),g=Number.isFinite(o)&&o>0?o*24*60*60*1e3:void 0;e.push({rules:s,...g!==void 0?{cooldownMs:g}:{}});}return e}},Ka=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 mg(t){return [t.tenantId,t.userId,t.placementId,t.treatmentId||"default"].join(":")}function pg(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 sm=class{constructor(t){this.retiredCache=null,this.suppressedCache=null,this.store=t.store,this.userId=t.userId,this.defaultSuppressionMs=t.defaultSuppressionMs??kP,this.defaultDismissCooldownMs=t.defaultDismissCooldownMs??cg;}async recordImpression(t,e,n,r){await this.appendRecord(t,"impressed",e,n,r);}async recordDismissal(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"dismissed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}async recordClickThru(t,e,n,r,i){let s=i??this.defaultDismissCooldownMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"clicked_thru",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}async recordConversion(t,e,n,r){await this.appendRecord(t,"cta_completed",e,n,r),this.retireInCache(t);}async recordSuppression(t,e,n,r,i){let s=i??this.defaultSuppressionMs,a=new Date(Date.now()+s).toISOString();await this.appendRecord(t,"suppressed",e,n,{...r,suppressUntil:a}),this.suppressInCache(t,a);}async isRetired(t){return (await this.getRetiredIds()).has(t)}async getRetiredIds(){if(this.retiredCache)return this.retiredCache;let t=await this.store.getRetiredPlacementIds(this.userId);return this.retiredCache=t,t}isRetiredSync(t){return this.retiredCache?.has(t)??false}isSuppressedSync(t){if(!this.suppressedCache)return false;let e=this.suppressedCache.get(t);return e?new Date(e).getTime()>Date.now()?true:(this.suppressedCache.delete(t),false):false}isHiddenSync(t){return this.isRetiredSync(t)||this.isSuppressedSync(t)}async queryHistory(t){return this.store.query(this.userId,t)}async hydrate(){this.retiredCache=await this.store.getRetiredPlacementIds(this.userId),this.suppressedCache=await this.store.getSuppressedPlacements(this.userId);}async reset(){await this.store.clear(this.userId),this.retiredCache=new Set,this.suppressedCache=new Map;}setUserId(t){this.userId=t,this.retiredCache=null,this.suppressedCache=null;}async appendRecord(t,e,n,r,i){let s={placementId:t,outcome:e,occurredAt:new Date().toISOString(),...n?{payloadId:n}:{},...r?{surfaceTemplateId:r}:{},...i?{metadata:i}:{}};await this.store.append(this.userId,s);}retireInCache(t){this.retiredCache||(this.retiredCache=new Set),this.retiredCache.add(t);}suppressInCache(t,e){this.suppressedCache||(this.suppressedCache=new Map),this.suppressedCache.set(t,e);}},AP=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=fg(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.records.get(t)??[];return hg(e)}getSuppressedPlacements(t){let e=this.records.get(t)??[];return gg(e)}clear(t){this.records.delete(t);}},OP="revturbine:impression-history",Xc=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=fg(n,e)),n.slice().reverse()}getRetiredPlacementIds(t){let e=this.load(t);return hg(e)}getSuppressedPlacements(t){let e=this.load(t);return gg(e)}clear(t){this.storage.removeItem(this.key(t));}key(t){return `${OP}:${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 fg(t,e){let n=t;if(e.placementIds&&e.placementIds.length>0){let r=new Set(e.placementIds);n=n.filter(i=>r.has(i.placementId));}if(e.outcomes&&e.outcomes.length>0){let r=new Set(e.outcomes);n=n.filter(i=>r.has(i.outcome));}if(e.since){let r=new Date(e.since).getTime();n=n.filter(i=>new Date(i.occurredAt).getTime()>=r);}return n}function hg(t){let e=new Set;for(let n of t)CP.has(n.outcome)&&e.add(n.placementId);return e}function gg(t){let e=new Map,n=Date.now();for(let r=t.length-1;r>=0;r--){let i=t[r];if(e.has(i.placementId))continue;let s=i.metadata?.suppressUntil;typeof s=="string"&&new Date(s).getTime()>n&&e.set(i.placementId,s);}return e}function jP(t){let{config:e,cacheTtlMs:n}=t,r=[];if(t.planHandle){let i={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:t.planHandle,currentPlanName:t.planName??t.planHandle,...t.paymentFailed!==void 0?{paymentFailed:t.paymentFailed}:{},...t.paymentAtRisk!==void 0?{paymentAtRisk:t.paymentAtRisk}:{}})};r.push(i);}if(e.entitlements?.length){let i=t.defaultEntitlementPolicy??"allow",s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={},o={};for(let g of e.entitlements??[]){a[g.unique_handle]={status:i==="allow"?"allowed":"denied",allowed:i==="allow",reason:`static_config_default_${i}`};let v=t.usage?.[g.unique_handle];v&&(o[g.unique_handle]={used:v.used,limit:v.limit,remaining:Math.max(0,v.limit-v.used),unit:g.unit});}return {entries:a,usage:o,...t.tiers!==void 0?{tiers:t.tiers}:{}}}};r.push(s);}if(e.segments?.length){let i={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:(e.segments??[]).map(s=>s.handle),segmentSlugs:(e.segments??[]).map(s=>s.handle)})};r.push(i);}if(e.entitlement_rules?.length){let i={domain:"rules",cacheTtlMs:n,resolve:()=>{let s={},a=new Map;for(let g of e.entitlements??[]){let v=g;typeof v.unique_handle=="string"&&typeof v.type=="string"&&a.set(v.unique_handle,v.type);}for(let g of e.entitlement_rules??[]){let v=g.entitlement_id;s[v]||(s[v]=[]);let y=g,I=Array.isArray(y.segment_ids)?y.segment_ids.filter(x=>typeof x=="string"):typeof y.segment_id=="string"&&y.segment_id!=="all"?[y.segment_id]:[],P=Array.isArray(y.plan_ids)?y.plan_ids.filter(x=>typeof x=="string"):[],S={ruleId:g.id,entitlementId:v,planIds:(g.targets??[]).length>0?(g.targets??[]).filter(x=>x.kind==="plan").map(x=>x.id):P,segmentIds:I,kind:(()=>{let x=typeof y.type_fields=="object"&&y.type_fields!==null?y.type_fields:{};return (typeof y.kind=="string"?y.kind:void 0)??(typeof x.kind=="string"?x.kind:void 0)??a.get(v)??"feature"})(),fields:{...typeof y.type_fields=="object"&&y.type_fields!==null?y.type_fields:{},...y}};s[v].push(S);}let o={};for(let g of e.segments??[])typeof g.dimension_id=="string"&&typeof g.handle=="string"&&(o[g.handle]=g.dimension_id);return {entitlementRules:s,segmentDimensions:o,configVersion:wc(e)}}};r.push(i);}if(e.message_blocks?.length||e.personalization_tokens?.length){let i={domain:"content",cacheTtlMs:n,resolve:()=>{let s={};for(let a of e.message_blocks??[])s[a.block_id]={blockId:a.block_id,name:a.name,defaultContent:a.default_content,segmentOverrides:a.segment_overrides?.map(o=>({segmentId:o.segment_value_id,content:o.content})),status:a.status};return {messageBlocks:s,personalization:{}}}};r.push(i);}if(e.theme&&Object.keys(e.theme).length>0){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}function FP(t){let{payload:e,cacheTtlMs:n}=t,r=[];if(e.user_context){let i=e.user_context,s={domain:"plan",cacheTtlMs:n,resolve:()=>({currentPlanHandle:i.plan_handle??"unknown",currentPlanName:i.plan_name,billingPeriod:i.billing_period,trialActive:i.trial_active,trialLimitType:i.trial_limit_type,trialProgressPercent:i.trial_progress_percent,trialDaysRemaining:i.trial_days_remaining,trialDaysTotal:i.trial_days_total,trialState:i.trial_state,trialUsageEntitlementHandle:i.trial_usage_entitlement_handle,trialUsageConsumed:i.trial_usage_consumed,trialUsageLimit:i.trial_usage_limit})};r.push(s);}if(e.entitlements){let i=e.entitlements,s={domain:"entitlements",cacheTtlMs:n,resolve:()=>{let a={};for(let[o,g]of Object.entries(i))a[o]=g;return {entries:a}}};r.push(s);}if(e.user_context){let i=e.user_context;if(Array.isArray(i.segment_ids)){let s={domain:"segments",cacheTtlMs:n,resolve:()=>({segmentIds:i.segment_ids})};r.push(s);}}if(e.user_context){let i=e.user_context;if(i.traits&&typeof i.traits=="object"){let s={domain:"traits",cacheTtlMs:n,resolve:()=>({traits:i.traits})};r.push(s);}}if(e.theme){let i={domain:"theme",cacheTtlMs:n,resolve:()=>({overrides:e.theme})};r.push(i);}return r}var _g=class{constructor(t){this.registeredPlacements=new Map,this.tenantId=t.tenantId,this.userId=t.userId,this.exportedConfig=t.exportedConfig;let e=t.storage??new Ka;this.registry=new Tl;for(let r of t.providers)this.registry.register(r);this.interactionTracker=new dg({storage:e,tenantId:t.tenantId,userId:t.userId,...t.interactionOptions}),this.capEnforcer=new ug({storage:e,tenantId:t.tenantId,userId:t.userId}),this.impressionHistory=new sm({store:t.impressionStore??new AP,userId:t.userId});let n=t.customResolver??this.buildPlacementResolver(t);this.engine=new Tu({registry:this.registry,interactionTracker:this.interactionTracker,capEnforcer:this.capEnforcer,options:t.engineOptions,placements:this.registeredPlacements,placementResolver:n});}registerPlacement(t){this.registeredPlacements.set(t.id,t);}async getPlacementDecision(t){return this.engine.evaluate(t)}async getPlacementDecisions(t){return this.engine.evaluateBatch(t)}async getPlacement(t){let e=this.slotRecordForConfig(t);return e?(this.registerPlacement(e),this.engine.evaluate({placementId:e.id,userId:this.userId})):null}async checkEntitlement(t,e){let n=await this.engine.checkEntitlement(t,e);return n.reason==="no_entitlement_provider"?this.deriveEntitlementFromConfig(t,e):n}trackInteraction(t){this.engine.trackInteraction(t);}clearSuppression(t,e){this.interactionTracker.clearSuppression(t,e??this.userId);}async resolveProviders(){return this.registry.resolveAll()}evaluateSegments(t){let e=this.exportedConfig.segments??[];return ml(e,t)}buildTargetingState(t,e){return Mc(t,this.exportedConfig,e)}async derivePersonalizationTokens(t){let e=await this.registry.resolveAll();return sh({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 Na({placements:e,exportedConfig:t.exportedConfig,impressionHistory:this.impressionHistory})}deriveEntitlementFromConfig(t,e){return ol({handle:t,context:e,currentPlanHandle:"",segmentIds:new Set,usageBalances:{},exportedConfig:this.exportedConfig})??{status:"allowed",allowed:true,reason:"local_runtime_default_allow"}}},LP=["web-client","server"],VP=z.enum(LP),UP=["method","meta","component"],BP=z.enum(UP),qP=["ts","python","java","csharp","rust"];z.enum(qP);var DP=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(),MP=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:BP,appliesTo:z.array(VP).min(1),composes:z.string().min(1).optional(),perLanguage:DP.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"]}),NP=z.object({version:z.number().int().positive(),functions:z.array(MP).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let i of [r.canonical,...r.aliases]){let s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});NP.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 HP=[{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 zP(){let t=[];for(let[e,n]of Object.entries(Bu))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function KP(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(KP([...zP(),...HP]));var bg="traits:server",Cl=class{constructor(){T(this,"domain",bg);T(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 am={workspace_name:"Your workspace",theme:{}};function yg(t){return !!t&&Object.keys(t).length>0}var vg=false;function om(t={}){let e=(n,r)=>({branding:{...am,...n,theme:{...am.theme,...n?.theme}},source:r});return yg(t.explicit)?e(t.explicit,"explicit"):yg(t.apiBranding)?e(t.apiBranding,"branding-api"):t.legacyConfigTheme&&Object.keys(t.legacyConfigTheme).length>0?(t.warnOnLegacy!==false&&!vg&&Sa()&&(vg=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 xg="[REDACTED]",GP=/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,$P=/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/,ZP=/\d(?:[ -]?\d){12,18}/g;function YP(t){let e=0,n=false;for(let r=t.length-1;r>=0;r-=1){let i=t.charCodeAt(r)-48;if(i<0||i>9)return false;if(n){let s=i*2;s>9&&(s-=9),e+=s;}else e+=i;n=!n;}return e%10===0}function WP(t){let e=0,n=t.replace(GP,()=>(e+=1,xg));return n=n.replace(ZP,r=>{let i=r.replace(/[ -]/g,"");return i.length>=13&&i.length<=19&&YP(i)?(e+=1,xg):r}),{value:n,count:e}}function lm(t){let e=0,n=r=>{if(typeof r=="string"){let i=WP(r);return e+=i.count,i.value}if(Array.isArray(r))return r.map(n);if(r&&typeof r=="object"){let i={};for(let[s,a]of Object.entries(r))i[s]=n(a);return i}return r};return {value:n(t),redactions:e}}function JP(t){return $P.test(t.trim())}function XP(t){let e=t.trim().toLowerCase();return `eml_${t0(e).slice(0,16)}`}function cm(t){return JP(t)?{value:XP(t),redacted:true}:{value:t,redacted:false}}function Sg(t){let e=cm(t.user_id??""),n=lm({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 QP=[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 i=r,s=t.charCodeAt(n+1);n+=1,r=65536+((i&1023)<<10)+(s&1023),e.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|r&63);}else e.push(224|r>>12,128|r>>6&63,128|r&63);}return e}function Ni(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 P=0;P<4;P+=1)e.push(0);e.push(n>>>24&255,n>>>16&255,n>>>8&255,n&255);let r=1779033703,i=3144134277,s=1013904242,a=2773480762,o=1359893119,g=2600822924,v=528734635,y=1541459225,I=new Array(64);for(let P=0;P<e.length;P+=64){for(let M=0;M<16;M+=1){let Le=P+M*4;I[M]=(e[Le]<<24|e[Le+1]<<16|e[Le+2]<<8|e[Le+3])>>>0;}for(let M=16;M<64;M+=1){let Le=Ni(I[M-15],7)^Ni(I[M-15],18)^I[M-15]>>>3,jt=Ni(I[M-2],17)^Ni(I[M-2],19)^I[M-2]>>>10;I[M]=I[M-16]+Le+I[M-7]+jt>>>0;}let S=r,x=i,O=s,H=a,z=o,se=g,Ie=v,K=y;for(let M=0;M<64;M+=1){let Le=Ni(z,6)^Ni(z,11)^Ni(z,25),jt=z&se^~z&Ie,Yn=K+Le+jt+QP[M]+I[M]>>>0,Q=Ni(S,2)^Ni(S,13)^Ni(S,22),Ft=S&x^S&O^x&O,rn=Q+Ft>>>0;K=Ie,Ie=se,se=z,z=H+Yn>>>0,H=O,O=x,x=S,S=Yn+rn>>>0;}r=r+S>>>0,i=i+x>>>0,s=s+O>>>0,a=a+H>>>0,o=o+z>>>0,g=g+se>>>0,v=v+Ie>>>0,y=y+K>>>0;}return [r,i,s,a,o,g,v,y].map(P=>P.toString(16).padStart(8,"0")).join("")}var Ig={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"},Pg="control_plane_source";function dm(t,e={}){return {eventName:t,properties:{[Pg]:Ig[t],...e}}}var kl=class{constructor(e){T(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 ws(t){if(t)return t;if(wr())try{return new kl(window.localStorage)}catch{}return new Ka}function um(t){if(t)return t;if(wr())try{return new kl(window.sessionStorage)}catch{}return new Ka}var n0=/^[a-z0-9._]{1,100}$/,Kn={Persisted:"persisted",Transient:"transient"},jn={Internal:"internal",External:"external"},Pn={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 Vg="x-revturbine-schema-exposure",i0="readOnly",s0="x-revturbine-decision-only",Tg={[s0]:true},ti={[Vg]:jn.External},a0={[Vg]:jn.Internal};function Pr(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[i0]===true||(e[n]=r);}return z.object(e)}function Ir(t){let e=Pr(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(n0)}):e}var {Unrestricted:sr}=Pn,{Transient:jr,Persisted:o0}=Kn,{Internal:ta,External:zi}=jn;z.object({page:z.coerce.number().int().min(1).default(1).meta(sr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(sr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi});var l0=t=>z.object({items:z.array(t).meta(sr),total:z.number().int().min(0).meta(sr),page:z.number().int().min(1).meta(sr),per_page:z.number().int().min(1).meta(sr),has_more:z.boolean().meta(sr)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi}),Te=z.object({created_at:z.string().datetime().meta({...sr,readOnly:true}),updated_at:z.string().datetime().meta({...sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi}),de=z.object({id:z.string().min(1).meta({...sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi}),qe=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":ta});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi});var sd=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":jr,"x-revturbine-schema-exposure":zi}),Ug=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi});var Em=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi}),c0=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":zi});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":ta});var Dn=z.string().min(1).max(200),cn=z.string().min(1).max(100),na=z.string().max(500).optional(),Fn=z.record(z.string(),z.unknown()).default({}),Ll=z.number().int().min(10).max(100).multipleOf(10),En=z.string().datetime().nullable().default(null),pn=z.object({environment_id:z.string().min(1).default("production").meta({...sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":ta}),bn=z.object({playbook_version_id:z.string().nullable().default(null).meta(sr),is_current:z.boolean().default(true).meta({...sr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...sr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...sr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...sr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...sr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":ta}),d0=de.merge(Te).merge(qe).merge(pn).extend({handle:cn.meta({...sr,readOnly:true}),active:z.boolean().default(true).meta({...sr,readOnly:true})});function er(t){return d0.meta({id:t,"x-revturbine-schema-persistence":o0,"x-revturbine-schema-exposure":ta})}var wm=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":jr,"x-revturbine-schema-exposure":ta}),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":jr,"x-revturbine-schema-exposure":ta}),Bg=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":jr,"x-revturbine-schema-exposure":zi}),Dt={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},ki={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},m0="x-revturbine-context",p0="x-revturbine-in-config",f0="x-revturbine-sdk-input",h0="x-revturbine-source",g0="x-revturbine-deprecation",_0={[Dt.Playbook]:ki.Customer,[Dt.Branding]:ki.Customer,[Dt.Billing]:ki.Stripe,[Dt.Metering]:ki.Customer,[Dt.CustomerOperations]:ki.Runtime,[Dt.EventIngestion]:ki.Runtime};function ln(t,e){return {[m0]:t,[p0]:e.inConfig??t===Dt.Playbook,[f0]:e.sdkInput,[h0]:e.source??_0[t]}}function mm(t){return {deprecated:true,[g0]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var qg={Named:"named",Minted:"minted"},Dg="x-revturbine-schema-identity";function Tr(t="handle"){return {[Dg]:{kind:qg.Named,handleField:t}}}function hi(t="handle"){return {[Dg]:{kind:qg.Minted,handleField:t}}}var ne=t=>z.object({items:z.array(t)}),mt=z.object({error:z.string(),code:z.string(),request_id:z.string()}),b=t=>t,re=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:Kt,Financial:id}=Pn,{Persisted:Bl,Transient:ad}=Kn,{External:hs}=jn,b0=ln(Dt.Playbook,{sdkInput:true}),y0=ln(Dt.Playbook,{sdkInput:false}),Am=ln(Dt.Billing,{sdkInput:false}),Ls=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":hs}),ql=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":hs}),od=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":hs}),Qa=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Dn.meta(Kt),handle:cn.meta(Kt),tier_position:z.number().int().min(0).default(0).meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:Ls.default("public").meta(Kt),metadata:Fn.meta(Kt)}).meta({id:"Plan","x-revturbine-schema-persistence":Bl,"x-revturbine-schema-exposure":hs,...b0,...Tr()}),v0=er("PlanAnchor"),eo=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:cn.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(id),pricing_model:ql.meta(Kt),visibility:Ls.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:od.default("static").meta(Kt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Bl,"x-revturbine-schema-exposure":hs,...Am,...hi()}),x0=er("PlanVariationAnchor"),to=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),name:Dn.meta(Kt),handle:cn.meta(Kt),sort_order:z.number().int().default(0).meta(Kt),visibility:Ls.default("public").meta(Kt),metadata:Fn.meta(Kt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Bl,"x-revturbine-schema-exposure":hs,...y0,...Tr()}),S0=er("AddOnAnchor"),no=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Kt,readOnly:true}),handle:cn.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(id),pricing_model:ql.meta(Kt),visibility:Ls.default("public").meta(Kt),stripe_price_id:z.string().optional().meta(Kt),price_source:od.default("static").meta(Kt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Bl,"x-revturbine-schema-exposure":hs,...Am,...hi()}),I0=er("AddOnVariationAnchor"),P0=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":ad,"x-revturbine-schema-exposure":hs}),ro=de.merge(Te).merge(qe).extend({stripe_price_id:z.string().min(1).meta(Kt),stripe_product_id:z.string().min(1).meta(Kt),billing_period:P0.meta(Kt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(id),currency:c0.meta(id),pricing_model:ql.meta(Kt),nickname:z.string().nullable().default(null).meta(Kt),is_mock:z.boolean().default(false).meta(Kt),last_updated_from_stripe:En.meta(Kt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Bl,"x-revturbine-schema-exposure":hs,...Am});var T0=Pr(Qa),C0=Pr(eo),k0=Pr(to),R0=Pr(no),E0=Pr(ro);({"/api/plan-anchors":{get:b({operationId:"listPlanAnchors",requestParams:{query:re},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:ne(v0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:b({operationId:"listPlans",requestParams:{query:re},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:ne(Qa)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:b({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ir(Qa)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:Qa}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:b({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:Qa}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:b({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:T0}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:Qa}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:b({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:b({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:b({operationId:"listPlanVariationAnchors",requestParams:{query:re},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:ne(x0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:b({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:re},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:ne(eo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:b({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ir(eo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:b({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:b({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:C0}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:eo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:b({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:b({operationId:"listAddOnAnchors",requestParams:{query:re},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:ne(S0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:b({operationId:"listAddOns",requestParams:{query:re},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:ne(to)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:b({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ir(to)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:b({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:b({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:k0}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:to}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:b({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:b({operationId:"listAddOnVariationAnchors",requestParams:{query:re},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:ne(I0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:b({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:re},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:ne(no)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:b({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ir(no)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:b({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:b({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:R0}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:no}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:b({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:b({operationId:"listStripePrices",requestParams:{query:re},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:ne(ro)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:b({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Ir(ro)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:b({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:b({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:E0}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:ro}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:b({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:he}=Pn,{Persisted:Om,Transient:ni}=Kn,{Internal:Mg,External:zr}=jn,Ng=ln(Dt.Playbook,{sdkInput:true}),w0=ln(Dt.Playbook,{inConfig:false,sdkInput:false}),Hg=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":ni,"x-revturbine-schema-exposure":zr}),ld=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),A0=z.enum(Ug).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),O0=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),zg=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),Vl=z.object({entitlement_id:z.string().min(1).meta(he),entitlement_handle:z.string().min(1).meta(he),status:A0.meta(he),limit:z.number().optional().meta(he),used:z.number().optional().meta(he),allocation:ld.optional().meta(he),enforcement:zg.optional().meta(he),source:O0.optional().meta(he),plan_id:z.string().optional().meta(he),segment_id:z.string().optional().meta(he),seat_type_id:z.string().optional().meta(he),rule_id:z.string().optional().meta(he)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr,...Pn.Operational});z.object({account:z.record(z.string(),Vl).optional().meta(he),instance:z.record(z.string(),Vl).optional().meta(he),user:z.record(z.string(),Vl).optional().meta(he)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr,...Pn.Operational});var j0=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),F0=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),Kg=z.object({kind:F0.meta(he),id:z.string().min(1).meta(he)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),L0=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),io=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...he,readOnly:true}),name:Dn.meta(he),handle:cn.meta(he),customer_facing_description:z.string().max(500).optional().meta(he),type:Em.meta(he),unit:z.string().max(100).optional().meta(he),period_scope:Hg.optional().meta(he),allocation:ld.optional().meta(he),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(he),sort_order:z.number().int().default(0).meta(he),metadata:Fn.meta(he)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Om,"x-revturbine-schema-exposure":zr,...Ng,...Tr()}),V0=er("EntitlementAnchor"),lo=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...he,readOnly:true}),handle:cn.meta({...he,readOnly:true}),entitlement_id:z.string().min(1).meta(he),targets:z.array(Kg).min(1).meta(he),segment_ids:z.array(z.string()).default([]).meta(he),visibility:j0.default("public").meta(he),period_scope:Hg.optional().meta(he),instance:z.string().max(100).optional().meta(he),reset_period:L0.optional().meta(he),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(he),enforcement:zg.optional().meta(he),warning_threshold_percent:Ll.optional().meta(he),overage_price_ref:z.string().optional().meta(he),grace_period_hours:z.number().int().min(0).optional().meta(he),tier_value:z.string().optional().meta(he),rate_value:z.number().optional().meta(he),initial_grant:z.number().optional().meta(he),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(he),rollover_enabled:z.boolean().optional().meta(he),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(he),seat_type_id:z.string().optional().meta(he),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(he),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(he),stripe_metered_price_id:z.string().optional().meta(he),enabled:z.boolean().optional().meta(he),allocation:ld.optional().meta(he),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(he),amount_cents:z.number().int().optional().meta(he),currency:z.string().optional().meta(he)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":Om,"x-revturbine-schema-exposure":Mg,...Ng,...hi()}),U0=er("EntitlementRuleAnchor");lo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var B0=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),q0=z.object({code:B0.meta(he),message:z.string().min(1).meta(he),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(he)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr}),pm=lo.extend({warnings:z.array(q0).optional().meta(he)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ni,"x-revturbine-schema-exposure":zr});var fm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({handle:cn.meta({...he,readOnly:true}),rule_id:z.string().min(1).meta(he),experiment_id:z.string().min(1).meta(he),variant_name:z.string().min(1).max(200).meta(he),is_control:z.boolean().default(false).meta(he),override_fields:z.record(z.string(),z.unknown()).default({}).meta(he)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":Om,"x-revturbine-schema-exposure":Mg,...w0,...hi()}),D0=Pr(io),M0=Pr(lo);({"/api/entitlement-anchors":{get:b({operationId:"listEntitlementAnchors",requestParams:{query:re},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:ne(V0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:b({operationId:"listEntitlementRuleAnchors",requestParams:{query:re},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:ne(U0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:b({operationId:"listEntitlements",requestParams:{query:re},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:ne(io)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:b({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ir(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:b({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:b({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:D0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:io}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:b({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:b({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:re},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:ne(lo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:b({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ir(lo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:pm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:b({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:M0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:b({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:b({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:pm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:b({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:re},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:ne(fm)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:b({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Ir(fm)}}},responses:{201:{description:"Created",content:{"application/json":{schema:fm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:Oe}=Pn,{Persisted:cd,Transient:Vs}=Kn,{External:gi}=jn,Gg=ln(Dt.Playbook,{sdkInput:true});ln(Dt.Playbook,{inConfig:false,sdkInput:false});var N0=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),H0=ln(Dt.Playbook,{inConfig:false,sdkInput:false,source:ki.Runtime}),z0=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var $g=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi}),Zg=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi}),K0=z.object({count:z.number().int().positive().meta(Oe),period:Zg.meta(Oe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi});z.object({surface_type:z.string().min(1).meta(Oe),rules:z.array(K0).meta(Oe),cooldown_ms:z.number().int().nonnegative().optional().meta(Oe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":cd,"x-revturbine-schema-exposure":gi,...Pn.Operational,...N0});var G0=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":Vs,"x-revturbine-schema-exposure":gi}),ao=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Oe,readOnly:true}),name:Dn.meta(Oe),handle:cn.meta(Oe),description:na.meta(Oe),category:$g.meta(Oe),drag_order_in_category:z.number().int().default(0).meta(Oe),surface_slot_id:z.string().optional().meta(Oe),entitlement_id:z.string().optional().meta(Oe),tier_threshold:z.string().optional().meta(Oe),threshold_percent:Ll.optional().meta(Oe),trial_type:z.enum(["free","reverse"]).optional().meta(Oe),trigger_type:z.string().optional().meta(Oe),trial_progress_percent:z.number().min(0).max(100).optional().meta(Oe),days_before_end:z.number().int().min(0).optional().meta(Oe),qualifier:z0.optional().meta(Oe),activation_window_start:z.string().datetime().optional().meta(Oe),activation_window_end:z.string().datetime().optional().meta(Oe),metadata:Fn.meta(Oe)}).meta({id:"Placement","x-revturbine-schema-persistence":cd,"x-revturbine-schema-exposure":gi,...Gg,...Tr()}),$0=er("PlacementAnchor"),Z0=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi}),Y0=z.object({code:Z0.meta(Oe),message:z.string().min(1).meta(Oe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(Oe)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi}),Cg=ao.extend({warnings:z.array(Y0).optional().meta(Oe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi});var W0=z.object({label:z.string().min(1).max(200).meta(Oe),cta_path_type:G0.meta(Oe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Oe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Vs,"x-revturbine-schema-exposure":gi}),jl=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...Oe,readOnly:true}),handle:cn.meta({...Oe,readOnly:true}),placement_id:z.string().min(1).meta(Oe),drag_order:z.number().int().default(0).meta(Oe),target_plan_ids:z.array(z.string()).default([]).meta(Oe),target_plan_billing_cadences:z.array(z.string()).default([]).meta(Oe),target_segments:z.array(z.string()).default([]).meta(Oe),surface_slot_ids:z.array(z.string()).default([]).meta(Oe),surface_template_id:z.string().min(1).meta(Oe),content_fields:z.record(z.string(),z.unknown()).default({}).meta(Oe),cta_list:z.array(W0).default([]).meta(Oe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Oe),max_period_unit:Zg.default("session").meta(Oe),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(Oe),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(Oe),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(Oe),recommendation_plan_override:z.string().optional().meta(Oe)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":cd,"x-revturbine-schema-exposure":gi,...Gg,...hi()}),J0=er("PlacementPayloadAnchor"),X0=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({surface_slot_handle:z.string().min(1).max(200).meta(Oe),surface_type:sd.meta(Oe),surface_template_ids:z.array(z.string()).default([]).meta(Oe),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(Oe),first_seen:z.string().datetime().meta({...Oe,readOnly:true}),last_seen:z.string().datetime().meta({...Oe,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(Oe),placement_count:z.number().int().min(0).default(0).meta({...Oe,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":cd,"x-revturbine-schema-exposure":gi,...H0,...Tr("surface_slot_handle")}),Q0=Pr(ao),eT=Pr(jl);({"/api/placement-anchors":{get:b({operationId:"listPlacementAnchors",requestParams:{query:re},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:ne($0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:b({operationId:"listPlacements",requestParams:{query:re},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:ne(ao)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:b({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ir(ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Cg}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:b({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:b({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Q0}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Cg}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:b({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:b({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ao}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:b({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:$g,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:b({operationId:"listPlacementPayloadAnchors",requestParams:{query:re},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:ne(J0)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:b({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:re},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:ne(jl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:b({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Ir(jl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:b({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:eT}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jl}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:b({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:b({operationId:"listSurfaceSlots",requestParams:{query:re},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:ne(X0)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Sr,Pii:co}=Pn,{Persisted:jm,Transient:Fm}=Kn,{Internal:mo}=jn,tT=ln(Dt.CustomerOperations,{sdkInput:false}),nT=z.object({external_id:z.string().min(1).meta(co),traits:z.record(z.string(),z.unknown()).default({}).meta(co),plan_id:z.string().optional().meta(Sr)}).meta({id:"Identity","x-revturbine-schema-persistence":jm,"x-revturbine-schema-exposure":mo}),Yg=z.enum(["payment_failed","payment_method_missing"]),kg=de.merge(Te).merge(qe).extend({external_id:z.string().min(1).meta(co),identity:nT.meta(co),stripe_customer_id:z.string().optional().meta(Sr),current_plan_id:z.string().optional().meta(Sr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Sr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Sr),billing_health_issues:z.array(Yg).default([]).meta(Sr),metadata:Fn.meta(Sr)}).meta({id:"Customer","x-revturbine-schema-persistence":jm,"x-revturbine-schema-exposure":mo}),rT=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":Fm,"x-revturbine-schema-exposure":mo}),iT=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":Fm,"x-revturbine-schema-exposure":mo}),sT=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":Fm,"x-revturbine-schema-exposure":mo}),As=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({handle:cn.meta({...Sr,readOnly:true}),customer_id:z.string().min(1).meta(co),customer_id_list:z.array(z.string()).optional().meta(co),override_type:iT.meta(Sr),target_id:z.string().min(1).meta(Sr),value:z.record(z.string(),z.unknown()).default({}).meta(Sr),duration_type:rT.default("permanent").meta(Sr),duration_value:z.string().optional().meta(Sr),expiry_date:En.meta(Sr),status:sT.default("active").meta(Sr),reason:z.string().max(500).optional().meta(Sr),created_by:z.string().optional().meta(Sr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":jm,"x-revturbine-schema-exposure":mo,...tT,...hi()});({"/api/customers":{get:b({operationId:"listCustomers",requestParams:{query:re},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:ne(kg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:b({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:kg}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:b({operationId:"listCustomerOverrides",requestParams:{query:re},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:ne(As)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:b({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:b({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:As.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:b({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:b({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:b({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:As}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:ke,Pii:Fl,Financial:hm}=Pn,{Persisted:Wg,Transient:Ki}=Kn,{External:po,Internal:Dl}=jn,Lm=z.object({in_trial:z.boolean().meta(ke),trial_type:z.string().optional().meta(ke),plan_handle:z.string().optional().meta(ke),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(ke),trial_limit_type:z.enum(["time","usage"]).optional().meta(ke),progress_percent:z.number().min(0).max(100).optional().meta(ke),day_number:z.number().int().min(0).optional().meta(ke),days_remaining:z.number().int().min(0).optional().meta(ke),usage_entitlement_handle:z.string().optional().meta(ke),usage_consumed:z.number().int().min(0).optional().meta(ke),usage_remaining:z.number().int().min(0).optional().meta(ke),usage_limit:z.number().int().min(0).optional().meta(ke)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":po}),Jg=z.object({entitlement_handle:z.string().min(1).meta(ke),unit:z.string().min(1).meta(ke),amount:z.number().min(0).meta(ke),limit:z.number().min(0).optional().meta(ke),reset_date:z.string().optional().meta(ke)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":po});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":po});var Xg=z.object({id:z.string().min(1).meta(ke),name:z.string().min(1).meta(ke),price:z.string().optional().meta(ke),billing_period:z.enum(["monthly","annual","none"]).optional().meta(ke)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":po}),aT=z.object({product_instance_id:z.string().min(1).meta(ke),user_id:z.string().min(1).meta(Fl),plan:Xg.optional().meta(ke),usage:z.record(z.string(),Jg).default({}).meta(ke),trial:Lm.optional().meta(ke),entitlements:z.record(z.string(),z.union([z.boolean(),Vl])).default({}).meta(ke)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":Wg,"x-revturbine-schema-exposure":po}),Ga=de.merge(qe).merge(Te).extend({user_id:z.string().min(1).meta(Fl),account_id:z.string().min(1).nullable().optional().meta(Fl),email:z.string().email().nullable().optional().meta(Fl),email_type:z.string().optional().meta(ke),plan:Xg.optional().meta(ke),usage:z.record(z.string(),Jg).default({}).meta(ke),trial:Lm.optional().meta(ke),payment_failed:z.boolean().optional().meta(ke),payment_at_risk:z.boolean().optional().meta(ke),tiers:z.record(z.string(),z.string()).optional().meta(ke),entitlements:z.record(z.string(),z.union([z.boolean(),Vl])).default({}).meta(ke),instances:z.array(aT).optional().meta(ke),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Fl),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...ke,"x-revturbine-schema-persistence":Ki}),derived_config_version:z.string().nullable().optional().meta(ke),context_hash:z.string().nullable().optional().meta(ke),derived_computed_at:En.meta(ke),activity_score:z.number().int().min(0).nullable().optional().meta(ke),activity_score_computed_at:z.string().datetime().nullable().optional().meta(ke),experiments:z.record(z.string(),z.string()).optional().meta(ke)}).meta({id:"UserContext","x-revturbine-schema-persistence":Wg,"x-revturbine-schema-exposure":po}),oT=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...ke,...ti}),days_remaining:z.number().int().min(0).optional().meta({...ke,...ti}),ends_at:z.string().optional().meta({...ke,...ti})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Dl}),lT=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...ke,...ti}),failed_payment_reason:z.string().optional().meta({...hm,...Tg}),issues:z.array(Yg).optional().meta({...hm,...Tg}),provider_subscription_id:z.string().optional().meta({...hm,...a0})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Dl}),cT=z.object({can_upgrade:z.boolean().optional().meta({...ke,...ti}),can_manage_billing:z.boolean().optional().meta({...ke,...ti})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Dl}),dT=z.object({handle:z.string().min(1).optional().meta({...ke,...ti}),name:z.string().min(1).optional().meta({...ke,...ti})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Dl});z.object({subject:z.string().min(1).meta({...ke,...ti}),context_version:z.string().optional().meta({...ke,...ti}),trial:oT.optional().meta({...ke,...ti}),billing:lT.optional().meta({...ke,...ti}),plan:dT.optional().meta({...ke,...ti}),capabilities:cT.optional().meta({...ke,...ti})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Ki,"x-revturbine-schema-exposure":Dl});({"/api/user-contexts":{get:b({operationId:"listUserContexts",requestParams:{query:re},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:ne(Ga)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:b({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:Ga}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:b({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:Ga.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ga}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:b({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:zn}=Pn,{Persisted:Vm,Transient:Qg}=Kn,{Internal:Ml}=jn,uT=ln(Dt.Playbook,{sdkInput:true}),e_=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),mT=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":Qg,"x-revturbine-schema-exposure":Ml}),pT=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":Qg,"x-revturbine-schema-exposure":Ml}),gm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...zn,readOnly:true}),name:Dn.meta(zn),handle:cn.optional().meta(zn),category:mT.default("custom").meta(zn),visibility_toggle:z.boolean().default(true).meta(zn),source_type:pT.default("system").meta(zn),estimated_size:z.number().int().min(0).optional().meta(zn)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ml,...e_,...Tr()}),fT=er("SegmentDimensionAnchor"),_m=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...zn,readOnly:true}),dimension_id:z.string().min(1).meta(zn),name:Dn.meta(zn),handle:cn.meta(zn),description:na.meta(zn),definition_rule:z.record(z.string(),z.unknown()).optional().meta(zn),used_in_count:z.number().int().min(0).default(0).meta({...zn,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ml,...e_,...Tr()}),hT=er("SegmentValueAnchor");de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...zn,readOnly:true}),name:Dn.meta(zn),handle:cn.meta(zn),description:na.meta(zn),rules:z.record(z.string(),z.unknown()).default({}).meta(zn),experiment_id:z.string().min(1).optional().meta(zn),is_active:z.boolean().default(true).meta(zn),estimated_size:z.number().int().min(0).nullable().default(null).meta(zn),metadata:Fn.meta(zn)}).meta({id:"Segment","x-revturbine-schema-persistence":Vm,"x-revturbine-schema-exposure":Ml,...uT,...Tr()});({"/api/segment-dimension-anchors":{get:b({operationId:"listSegmentDimensionAnchors",requestParams:{query:re},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:ne(fT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:b({operationId:"listSegmentValueAnchors",requestParams:{query:re},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:ne(hT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:b({operationId:"listSegmentDimensions",requestParams:{query:re},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:ne(gm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:b({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:gm}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:b({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:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:b({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:gm}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:b({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:re},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:ne(_m)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:b({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:_m}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:b({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:_m}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:b({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:lt}=Pn,{Persisted:fo,Transient:t_}=Kn,{External:Us}=jn,Um=ln(Dt.Playbook,{sdkInput:true}),gT=ln(Dt.Playbook,{inConfig:false,sdkInput:false}),_T=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),bT=ln(Dt.Playbook,{inConfig:false,sdkInput:true,source:ki.CodeConstant});de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...lt,readOnly:true}),handle:cn.meta({...lt,readOnly:true}),name:Dn.meta(lt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(lt),subject:z.string().max(500).optional().meta(lt),body:z.string().meta(lt),template_variables:z.array(z.string()).default([]).meta(lt),metadata:Fn.meta(lt)}).meta({id:"Message","x-revturbine-schema-persistence":fo,"x-revturbine-schema-exposure":Us,...gT,...hi()});var bm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...lt,readOnly:true}),name:Dn.meta(lt),handle:cn.meta(lt),action_type:Bg.meta(lt),target_url:z.string().optional().meta(lt),target_plan_id:z.string().optional().meta(lt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(lt),metadata:Fn.meta(lt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":fo,"x-revturbine-schema-exposure":Us,...Um,...Tr()}),yT=er("CtaPathAnchor"),vT=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":fo,"x-revturbine-schema-exposure":Us,...bT}),xT=z.object({name:z.string().min(1),field_type:vT,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":fo,"x-revturbine-schema-exposure":Us,..._T}),ym=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...lt,readOnly:true}),name:Dn.meta(lt),handle:cn.meta(lt),surface_type:u0.meta(lt),field_definitions:z.array(xT).default([]).meta(lt),description:na.meta(lt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":fo,"x-revturbine-schema-exposure":Us,...Um,...Tr()}),ST=er("SurfaceTemplateAnchor"),vm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...lt,readOnly:true}),name:Dn.meta(lt),handle:cn.meta(lt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(lt),variation_dimension_id:z.string().optional().meta(lt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(lt),notes:z.string().max(1e3).optional().meta(lt),used_in_count:z.number().int().min(0).default(0).meta({...lt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":fo,"x-revturbine-schema-exposure":Us,...Um,...Tr()}),IT=er("MessageBlockRecordAnchor"),PT=z.object({segment_id:z.string().min(1).meta(lt),message_block_id:z.string().min(1).meta(lt),ui_path_id:z.string().optional().meta(lt),promotion_id:z.string().optional().meta(lt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":t_,"x-revturbine-schema-exposure":Us});z.object({payload_id:z.string().min(1).meta(lt),tenant_id:z.string().min(1).meta(lt),name:Dn.meta(lt),surface_template_id:z.string().min(1).meta(lt),default_message_block_id:z.string().min(1).meta(lt),segment_content_map:z.array(PT).optional().meta(lt),ui_path_id:z.string().optional().meta(lt),promotion_id:z.string().optional().meta(lt),status:z.enum(["draft","active","inactive"]).meta(lt),created_at:z.string().datetime().optional().meta({...lt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...lt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":t_,"x-revturbine-schema-exposure":Us});({"/api/surface-template-anchors":{get:b({operationId:"listSurfaceTemplateAnchors",requestParams:{query:re},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:ne(ST)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:b({operationId:"listSurfaceTemplates",requestParams:{query:re},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:ne(ym)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:b({operationId:"listMessageBlockRecordAnchors",requestParams:{query:re},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:ne(IT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:b({operationId:"listMessageBlocks",requestParams:{query:re},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:ne(vm)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:b({operationId:"listCtaPathAnchors",requestParams:{query:re},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:ne(yT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:b({operationId:"listCtaPaths",requestParams:{query:re},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:ne(bm)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:oo,Pii:TT}=Pn,{Persisted:n_}=Kn,{Internal:CT,External:kT}=jn,RT=ln(Dt.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":n_,"x-revturbine-schema-exposure":kT,...RT});var Rg=de.merge(Te).extend({user_id:z.string().min(1).meta(TT),scope:z.string().min(1).meta(oo),preferences:z.record(z.string(),z.unknown()).default({}).meta(oo)}).meta({id:"UiPreference","x-revturbine-schema-persistence":n_,"x-revturbine-schema-exposure":CT});({"/api/ui-preferences":{get:b({operationId:"listUiPreferences",requestParams:{query:re},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:ne(Rg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:b({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Pr(Rg))}}},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:gt,Financial:Hi}=Pn,{Persisted:r_,Transient:Nl}=Kn,{External:Hl,Internal:i_}=jn,ET=z.object({month:z.string().meta(gt),cohort_size:z.number().int().min(0).meta(gt),retained:z.number().int().min(0).meta(gt),retention_rate:z.number().min(0).max(1).meta(gt),revenue_cents:z.number().int().min(0).meta(Hi)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":Nl,"x-revturbine-schema-exposure":Hl}),wT=z.object({step:z.string().meta(gt),label:z.string().meta(gt),count:z.number().int().min(0).meta(gt),conversion_rate:z.number().min(0).max(1).meta(gt),drop_off_rate:z.number().min(0).max(1).meta(gt)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":Nl,"x-revturbine-schema-exposure":Hl}),AT=z.object({placement_id:z.string().meta(gt),placement_name:z.string().meta(gt),impressions:z.number().int().min(0).meta(gt),clicks:z.number().int().min(0).meta(gt),conversions:z.number().int().min(0).meta(gt),ctr:z.number().min(0).meta(gt),conversion_rate:z.number().min(0).meta(gt),revenue_cents:z.number().int().min(0).meta(Hi)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":Nl,"x-revturbine-schema-exposure":Hl}),OT=z.object({date:z.string().meta(gt),mrr_cents:z.number().int().min(0).meta(Hi),arr_cents:z.number().int().min(0).meta(Hi),new_mrr_cents:z.number().int().min(0).meta(Hi),churned_mrr_cents:z.number().int().min(0).meta(Hi),expansion_mrr_cents:z.number().int().min(0).meta(Hi),net_new_mrr_cents:z.number().int().meta(Hi)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":Nl,"x-revturbine-schema-exposure":Hl}),jT=z.object({metric_key:z.string().min(1).meta(gt),label:z.string().meta(gt),current_value:z.number().meta(Hi),previous_value:z.number().nullable().default(null).meta(Hi),change_percent:z.number().nullable().default(null).meta(gt),period:z.string().meta(gt),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(gt)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":Nl,"x-revturbine-schema-exposure":Hl}),Eg=de.merge(Te).merge(qe).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(gt),severity:wm.meta(gt),resource_type:z.string().min(1).meta(gt),resource_id:z.string().min(1).meta(gt),summary:z.string().max(1e3).meta(gt),expected_value:z.unknown().optional().meta(gt),actual_value:z.unknown().optional().meta(gt),affected_customer_count:z.number().int().min(0).default(0).meta(gt),is_resolved:z.boolean().default(false).meta(gt),resolved_at:En.meta(gt),metadata:Fn.meta(gt)}).meta({id:"DriftReport","x-revturbine-schema-persistence":r_,"x-revturbine-schema-exposure":i_}),wg=de.merge(Te).merge(qe).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(gt),severity:wm.meta(gt),title:z.string().min(1).max(300).meta(gt),description:z.string().max(2e3).meta(gt),resource_type:z.string().optional().meta(gt),resource_id:z.string().optional().meta(gt),is_acknowledged:z.boolean().default(false).meta(gt),acknowledged_at:En.meta(gt),acknowledged_by:z.string().nullable().default(null).meta(gt),metadata:Fn.meta(gt)}).meta({id:"Alert","x-revturbine-schema-persistence":r_,"x-revturbine-schema-exposure":i_});({"/api/analytics/kpis":{get:b({operationId:"listKpiAggregates",requestParams:{query:re},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:ne(jT)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:b({operationId:"listPlacementPerformance",requestParams:{query:re},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:ne(AT)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:b({operationId:"listRevenueMetrics",requestParams:{query:re},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:ne(OT)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:b({operationId:"listCohortMetrics",requestParams:{query:re},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:ne(ET)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:b({operationId:"listFunnelSteps",requestParams:{query:re},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:ne(wT)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:b({operationId:"listDriftReports",requestParams:{query:re},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:ne(Eg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:b({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:Eg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:b({operationId:"listAlerts",requestParams:{query:re},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:ne(wg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:b({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:wg}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:w,Pii:uo}=Pn,{Persisted:s_,Transient:Ln}=Kn,{Internal:Bs,External:mr}=jn,a_=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr}),FT=de.extend({event_type:z.string().min(1).meta(w),source:a_.default("sdk").meta(w),tenant_id:z.string().min(1).optional().meta(w),user_id:z.string().min(1).optional().meta(uo),session_id:z.string().min(1).optional().meta(uo),occurred_at:z.string().datetime().meta(w),request_id:z.string().min(1).meta(w),attributes:z.record(z.string(),z.unknown()).default({}).meta(w),payload:z.record(z.string(),z.unknown()).default({}).meta(w)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs}),LT=FT.extend({ingested_at:z.string().datetime().meta(w)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":s_,"x-revturbine-schema-exposure":Bs});z.array(z.object({id:z.string().min(1).optional().meta(w),event_type:z.string().min(1).meta(w),occurred_at:z.string().datetime().optional().meta(w),tenant_id:z.string().min(1).optional().meta(w),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(w),payload:z.record(z.string(),z.unknown()).optional().meta(w),message:z.string().optional().meta(w),level:z.string().optional().meta(w),path:z.string().optional().meta(w)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs});var VT=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({user_id:z.string().min(1).meta(uo),placement_id:z.string().min(1).meta(w),treatment_id:z.string().min(1).optional().meta(w),surface_slot_id:z.string().min(1).optional().meta(w),surface_template_id:z.string().min(1).optional().meta(w),payload_id:z.string().min(1).optional().meta(w),interaction_type:VT.meta(w),interaction_at:z.string().datetime().optional().meta(w),message_block_handle:z.string().min(1).optional().meta(w),message_block_id:z.string().min(1).optional().meta(w),experiment_id:z.string().min(1).optional().meta(w),variant_key:z.string().min(1).optional().meta(w),test:z.boolean().optional().meta(w),metadata:z.record(z.string(),z.unknown()).optional().meta(w)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.enum(["trial_midpoint","trial_expiring","trial_expired","usage_limit_approaching","usage_limit_reached","credit_balance_low","seat_limit_reached","feature_gated","cancel_intent","payment_failed","auto_renewal_reminder","onboarding_complete","invite_teammate_prompt","referral_offer","plan_upgrade_nudge"]).meta({id:"TriggerEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({days_remaining:z.number().int().min(0).optional().meta(w)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({entitlement_handle:z.string().optional().meta(w),current_usage:z.number().min(0).optional().meta(w),usage_limit:z.number().min(0).optional().meta(w),usage_percent:z.number().min(0).max(100).optional().meta(w),threshold:z.number().min(0).optional().meta(w),balance:z.number().min(0).optional().meta(w),allocation:z.number().min(0).optional().meta(w),seats_used:z.number().int().min(0).optional().meta(w),seats_allowed:z.number().int().min(0).optional().meta(w)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({feature:z.string().min(1).meta(w)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({retry_count:z.number().int().min(0).optional().meta(w),renewal_date:z.string().optional().meta(w)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({event_type:z.string().min(1).meta(w),payload:z.record(z.string(),z.unknown()).default({}).meta(w)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});var BT=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr}),qT=z.enum(["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({event_type:qT.meta(w),source:BT.meta(w),payload:z.record(z.string(),z.unknown()).default({}).meta(w)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({q:z.string().optional().meta(w),source:a_.optional().meta(w),event_type:z.string().optional().meta(w),from:z.string().datetime().optional().meta(w),to:z.string().datetime().optional().meta(w),page:z.coerce.number().int().min(1).default(1).meta(w),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(w)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs});var DT=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs}),MT=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs}),xm=de.merge(Te).merge(qe).extend({event_id:z.string().min(1).meta(w),event_type:z.string().min(1).meta(w),source:DT.meta(w),payload:z.record(z.string(),z.unknown()).default({}).meta(w),status:MT.default("processed").meta(w),processed_at:z.string().datetime().optional().meta(w),error_message:z.string().optional().meta(w)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":s_,"x-revturbine-schema-exposure":Bs});z.object({accepted:z.number().int().min(0).meta(w)}).meta({id:"null","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":Bs});var NT=500,HT=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr}),zT=z.object({environment_id:z.string().min(1).meta(w),user_id:z.string().min(1).meta(uo),account_id:z.string().min(1).meta(w),event_name:z.string().min(1).max(120).meta(w),event_ts:z.string().datetime().meta(w),properties:z.string().optional().meta(w),surface_slot_id:z.string().nullable().optional().meta(w),placement_id:z.string().nullable().optional().meta(w),payload_id:z.string().nullable().optional().meta(w),request_id:z.string().optional().meta(w),experiment_id:z.string().nullable().optional().meta(w),variant_key:z.string().nullable().optional().meta(w),tenant_id:z.string().optional().meta(w),event_id:z.string().nullable().optional().meta(w),origin:HT.nullable().optional().meta(w),playbook_version:z.string().nullable().optional().meta(w),decision_id:z.string().nullable().optional().meta(w),test:z.boolean().optional().meta(w)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({events:z.array(zT).min(1).max(NT).meta(w)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});var GT=10,$T=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr}),ZT=z.object({plans:z.number().int().min(0).meta(w),entitlements:z.number().int().min(0).meta(w),entitlement_rules:z.number().int().min(0).meta(w),segments:z.number().int().min(0).meta(w),placements:z.number().int().min(0).meta(w),placement_payloads:z.number().int().min(0).meta(w),content_ui_paths:z.number().int().min(0).meta(w),surface_templates:z.number().int().min(0).meta(w)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr}),YT=z.object({event_type:$T.meta(w),occurred_at:z.string().datetime().meta(w),request_id:z.string().min(1).optional().meta(w),config_hash_id:z.string().min(1).max(64).optional().meta(w),sdk_version:z.string().min(1).max(64).optional().meta(w),runtime_mode:z.string().min(1).max(64).optional().meta(w),schema_version:z.string().min(1).max(64).optional().meta(w),bundle_version:z.string().min(1).max(64).optional().meta(w),config_shape:ZT.optional().meta(w),message:z.string().max(500).optional().meta(w),reason:z.string().min(1).max(64).optional().meta(w),placement_handle:z.string().min(1).max(64).optional().meta(w),slot_handle:z.string().min(1).max(64).optional().meta(w),surface:z.string().min(1).max(64).optional().meta(w),plan_handle:z.string().min(1).max(64).optional().meta(w),entitlement_handle:z.string().min(1).max(64).optional().meta(w)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});z.object({events:z.array(YT).min(1).max(GT).meta(w)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Ln,"x-revturbine-schema-exposure":mr});({"/api/events/search":{get:b({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:l0(LT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:b({operationId:"listWebhookEvents",requestParams:{query:re},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:ne(xm)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:$e}=Pn,{Persisted:zl,Transient:Kl}=Kn,{Internal:Gi}=jn,o_=ln(Dt.Playbook,{sdkInput:true}),l_=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),JT=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Kl,"x-revturbine-schema-exposure":Gi}),Bm=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Kl,"x-revturbine-schema-exposure":Gi}),c_=z.object({name:Dn.meta($e),handle:cn.meta($e),plan_id:z.string().nullable().optional().meta($e),segment_id:z.string().nullable().optional().meta($e),trial_limit_type:Bm.default("time").meta($e),duration_days:z.number().int().min(1).max(365).nullable().optional().meta($e),grace_period_days:z.number().int().min(0).default(0).meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),require_payment_method:z.boolean().default(false).meta($e),auto_convert:z.boolean().default(true).meta($e),convert_to_plan_id:z.string().optional().meta($e),fallback_plan_id:z.string().optional().meta($e),limit_per_customer:z.number().int().min(1).default(1).meta($e),is_active:z.boolean().default(true).meta($e),metadata:Fn.meta($e)}),$a=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...$e,readOnly:true})}).merge(c_).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":zl,"x-revturbine-schema-exposure":Gi,...o_,...Tr()}),XT=er("FreeTrialRuleAnchor"),QT=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Kl,"x-revturbine-schema-exposure":Gi}),d_=z.object({name:Dn.meta($e),handle:cn.meta($e),premium_plan_id:z.string().min(1).meta($e),fallback_plan_id:z.string().min(1).meta($e),segment_id:z.string().nullable().optional().meta($e),trial_limit_type:Bm.default("time").meta($e),duration_days:z.number().int().min(1).max(365).nullable().optional().meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),start_policy:QT.default("signup").meta($e),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta($e),entitlements_during_trial:z.array(z.string()).default([]).meta($e),is_active:z.boolean().default(true).meta($e),metadata:Fn.meta($e)}),Za=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...$e,readOnly:true})}).merge(d_).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":zl,"x-revturbine-schema-exposure":Gi,...o_,...Tr()}),eC=er("ReverseTrialRuleAnchor"),u_=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Kl,"x-revturbine-schema-exposure":Gi}),m_=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Kl,"x-revturbine-schema-exposure":Gi}),Ya=de.merge(Te).merge(qe).extend({trial_limit_policy:u_.default("1_per_lifetime").meta($e),eligibility_scope:m_.default("per_customer").meta($e)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":zl,"x-revturbine-schema-exposure":Gi,...l_}),Wa=de.merge(Te).merge(qe).extend({trial_limit_policy:u_.default("1_per_lifetime").meta($e),eligibility_scope:m_.default("per_customer").meta($e)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":zl,"x-revturbine-schema-exposure":Gi,...l_}),Qc=de.merge(Te).merge(qe).extend({customer_id:z.string().min(1).meta($e),rule_id:z.string().min(1).meta($e),rule_type:z.enum(["free_trial","reverse_trial"]).meta($e),plan_id:z.string().min(1).meta($e),status:JT.default("active").meta($e),started_at:z.string().datetime().meta({...$e,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta($e),trial_limit_type:Bm.default("time").meta($e),usage_entitlement_handle:z.string().min(1).optional().meta($e),usage_limit_value:z.number().int().min(1).optional().meta($e),converted_at:En.meta($e),cancelled_at:En.meta($e),metadata:Fn.meta($e)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":zl,"x-revturbine-schema-exposure":Gi});({"/api/free-trial-rule-anchors":{get:b({operationId:"listFreeTrialRuleAnchors",requestParams:{query:re},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:ne(XT)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:b({operationId:"listFreeTrialRules",requestParams:{query:re},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:ne($a)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:b({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:$a}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:b({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:$a.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:$a}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:b({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:b({operationId:"listReverseTrialRuleAnchors",requestParams:{query:re},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:ne(eC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:b({operationId:"listReverseTrialRules",requestParams:{query:re},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:ne(Za)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:b({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:Za}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:b({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Za.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Za}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:b({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:b({operationId:"listFreeTrialSettings",requestParams:{query:re},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:ne(Ya)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:b({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:b({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ya.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ya}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:b({operationId:"listReverseTrialSettings",requestParams:{query:re},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:ne(Wa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:b({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:Wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:b({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Wa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Wa}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:b({operationId:"listTrialInstances",requestParams:{query:re},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:ne(Qc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:b({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:b({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:b({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:Qc}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:yn}=Pn,{Persisted:qm,Transient:p_}=Kn,{Internal:Gl}=jn,f_=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),tC=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":p_,"x-revturbine-schema-exposure":Gl}),nC=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":p_,"x-revturbine-schema-exposure":Gl}),rC=z.object({variant_id:z.string().min(1),name:Dn,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":qm,"x-revturbine-schema-exposure":Gl,...f_}),ms=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...yn,readOnly:true}),name:Dn.meta(yn),handle:cn.meta(yn),description:z.string().max(1e3).optional().meta(yn),experiment_type:nC.meta(yn),status:tC.default("draft").meta(yn),target_resource_id:z.string().optional().meta(yn),target_segment_ids:z.array(z.string()).default([]).meta(yn),variants:z.array(rC).min(2).meta(yn),primary_metric:z.string().min(1).meta(yn),metric_threshold:z.number().default(.05).meta(yn),secondary_metrics:z.array(z.string()).default([]).meta(yn),traffic_allocation:z.number().min(0).max(1).default(1).meta(yn),started_at:En.meta(yn),ended_at:En.meta(yn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(yn),winning_variant_id:z.string().nullable().default(null).meta(yn),metadata:Fn.meta(yn)}).meta({id:"Experiment","x-revturbine-schema-persistence":qm,"x-revturbine-schema-exposure":Gl,...f_,...Tr()}),iC=er("ExperimentAnchor"),sC=wm,Ag=de.merge(Te).merge(qe).extend({experiment_id:z.string().optional().meta(yn),resource_type:z.string().min(1).meta(yn),resource_id:z.string().min(1).meta(yn),severity:sC.default("info").meta(yn),title:z.string().min(1).max(300).meta(yn),description:z.string().max(2e3).meta(yn),suggested_action:z.string().max(1e3).optional().meta(yn),estimated_impact:z.number().optional().meta(yn),is_dismissed:z.boolean().default(false).meta(yn),metadata:Fn.meta(yn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":qm,"x-revturbine-schema-exposure":Gl});({"/api/experiment-anchors":{get:b({operationId:"listExperimentAnchors",requestParams:{query:re},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:ne(iC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:b({operationId:"listExperiments",requestParams:{query:re},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:ne(ms)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:b({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:b({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:ms.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:b({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:b({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:ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:b({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:b({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:ms}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:b({operationId:"listOptimizationSuggestions",requestParams:{query:re},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:ne(Ag)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:b({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Ag}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:hr,Financial:Og}=Pn,{Persisted:aC,Transient:h_}=Kn,{Internal:Dm}=jn,oC=ln(Dt.Playbook,{sdkInput:true}),lC=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":h_,"x-revturbine-schema-exposure":Dm}),cC=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":h_,"x-revturbine-schema-exposure":Dm}),Os=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...hr,readOnly:true}),name:Dn.meta(hr),handle:cn.meta(hr),description:z.string().max(1e3).optional().meta(hr),rt_status:lC.default("draft").meta(hr),discount_type:cC.meta(hr),discount_value:z.number().min(0).meta(Og),currency:z.string().length(3).default("USD").meta(Og),applicable_plan_ids:z.array(z.string()).default([]).meta(hr),applicable_addon_ids:z.array(z.string()).default([]).meta(hr),target_segment_ids:z.array(z.string()).default([]).meta(hr),max_redemptions:z.number().int().min(0).nullable().default(null).meta(hr),current_redemptions:z.number().int().min(0).default(0).meta({...hr,readOnly:true}),coupon_code:z.string().max(100).optional().meta(hr),starts_at:En.meta(hr),ends_at:En.meta(hr),stripe_coupon_id:z.string().nullable().default(null).meta(hr),stripe_promotion_code_id:z.string().nullable().default(null).meta(hr),auto_sync_stripe:z.boolean().default(false).meta(hr),metadata:Fn.meta(hr)}).meta({id:"Promotion","x-revturbine-schema-persistence":aC,"x-revturbine-schema-exposure":Dm,...oC,...Tr()}),dC=er("PromotionAnchor");({"/api/promotion-anchors":{get:b({operationId:"listPromotionAnchors",requestParams:{query:re},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:ne(dC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:b({operationId:"listPromotions",requestParams:{query:re},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:ne(Os)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:b({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:b({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:Os.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:b({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:b({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:b({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Os}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:Rn,Pii:Mm}=Pn,{Persisted:Nm}=Kn,{Internal:Hm}=jn,uC=de.merge(Te).merge(qe).extend({customer_id:z.string().min(1).meta(Mm),placement_id:z.string().min(1).meta(Rn),payload_id:z.string().nullable().default(null).meta(Rn),variant_id:z.string().nullable().default(null).meta(Rn),surface_type:z.string().meta(Rn),presented_at:z.string().datetime().meta({...Rn,readOnly:true}),dismissed_at:En.meta(Rn),cta_clicked_at:En.meta(Rn),cta_action_type:z.string().nullable().default(null).meta(Rn),converted:z.boolean().default(false).meta(Rn),session_id:z.string().optional().meta(Rn),metadata:Fn.meta(Rn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":Nm,"x-revturbine-schema-exposure":Hm}),mC=de.merge(Te).merge(qe).extend({customer_id:z.string().min(1).meta(Mm),placement_id:z.string().min(1).meta(Rn),decision:z.enum(["show","suppress","defer"]).meta(Rn),reason:z.string().max(500).meta(Rn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(Rn),experiment_id:z.string().nullable().default(null).meta(Rn),variant_id:z.string().nullable().default(null).meta(Rn),latency_ms:z.number().min(0).optional().meta(Rn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":Nm,"x-revturbine-schema-exposure":Hm}),pC=de.merge(Te).merge(qe).extend({customer_id:z.string().min(1).meta(Mm),entitlement_handle:z.string().min(1).meta(Rn),entitlement_type:z.string().meta(Rn),result:z.enum(["granted","denied","limited","metered"]).meta(Rn),current_usage:z.number().nullable().default(null).meta(Rn),limit:z.number().nullable().default(null).meta(Rn),source:z.enum(["plan","addon","override","trial"]).meta(Rn),source_id:z.string().min(1).meta(Rn),latency_ms:z.number().min(0).optional().meta(Rn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":Nm,"x-revturbine-schema-exposure":Hm});({"/api/presentation-records":{get:b({operationId:"listPresentationRecords",requestParams:{query:re},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:ne(uC)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:b({operationId:"listDecisionLogs",requestParams:{query:re},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:ne(mC)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:b({operationId:"listEntitlementEvalLogs",requestParams:{query:re},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:ne(pC)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:p}=Pn,{Persisted:ho,Transient:Xe}=Kn,{Internal:_i,External:Pt}=jn,ht=ln(Dt.Playbook,{sdkInput:true}),so=ln(Dt.Playbook,{sdkInput:false}),Fs=ln(Dt.Playbook,{inConfig:false,sdkInput:false}),g_=ln(Dt.Playbook,{inConfig:false,sdkInput:true}),Ja=ln(Dt.Playbook,{inConfig:false,sdkInput:true,source:ki.CodeConstant}),Im=ln(Dt.Playbook,{inConfig:false,sdkInput:true,source:ki.Runtime}),Pm=ln(Dt.Playbook,{inConfig:false,sdkInput:false,source:ki.Runtime}),fC=ln(Dt.Billing,{sdkInput:false}),hC=ln(Dt.Metering,{sdkInput:false}),gC=ln(Dt.Branding,{inConfig:true,sdkInput:true}),_C=ln(Dt.Branding,{sdkInput:false}),bC="1.0.0",Rl=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),name:Dn.meta(p),handle:cn.meta(p),description:na.meta(p),is_default:z.boolean().default(false).meta(p),entitlement_ids:z.array(z.string()).default([]).meta(p),metadata:Fn.meta(p)}).meta({id:"SeatType","x-revturbine-schema-persistence":ho,"x-revturbine-schema-exposure":_i,...Fs,...Tr()}),yC=er("SeatTypeAnchor"),El=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:cn.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:Fn.meta(p)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":ho,"x-revturbine-schema-exposure":_i,...Fs,...Tr()}),vC=er("PersonalizationTokenAnchor"),xC=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":_i}),Tm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({handle:cn.meta({...p,readOnly:true}),stripe_account_id:z.string().min(1).meta(p),live_mode:z.boolean().default(false).meta(p),onboarding_state:xC.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:Fn.meta(p)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":ho,"x-revturbine-schema-exposure":_i,...fC,...hi()});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":Xe,"x-revturbine-schema-exposure":Pt,..._C});var wl=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({handle:cn.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:Fn.meta(p)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":ho,"x-revturbine-schema-exposure":_i,...hC,...hi()}),jg=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":_i}),Al=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:cn.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:jg.default("warn").meta(p),hard_limit_action:jg.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":ho,"x-revturbine-schema-exposure":_i,...g_,...hi()}),SC=er("UsageEnforcementSettingsAnchor"),IC=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":Xe,"x-revturbine-schema-exposure":_i}),PC=z.object({id:z.string().min(1).meta(p),group:z.array(IC).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":Xe,"x-revturbine-schema-exposure":_i}),TC=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":_i}),__=z.object({capRules:z.array(PC).default([]).meta(p),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(p),remindLaterMinutes:z.number().int().min(0).default(60).meta(p),testMode:TC.default("off").meta(p)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":_i}),Cm=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({anchor_id:z.string().min(1).meta({...p,readOnly:true}),handle:cn.meta({...p,readOnly:true}),global_frequency_cap:__.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":ho,"x-revturbine-schema-exposure":_i,...g_,...hi()}),CC=er("PlacementSettingsAnchor"),kC=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":Xe,"x-revturbine-schema-exposure":Pt}),RC=z.object({name:z.string().min(1).meta(p),handle:z.string().min(1).meta(p),predicates:z.array(kC).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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),EC=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:Ls.default("public").meta(p)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht}),wC=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:Ls.default("public").meta(p)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...so}),AC=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:ql.meta(p),visibility:Ls.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:od.meta(p)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...Fs}),OC=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:ql.meta(p),visibility:Ls.default("public").meta(p),stripe_price_id:z.string().nullable().default(null).meta(p),price_source:od.meta(p)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...Fs}),jC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),FC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),LC=z.object({handle:z.string().min(1).meta(p),global_frequency_cap:__.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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),VC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),UC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),BC=z.object({unique_handle:z.string().min(1).meta(p),name:z.string().min(1).meta(p),type:Em.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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),qC=z.object({id:z.string().min(1).meta(p),entitlement_id:z.string().min(1).meta(p),targets:z.array(Kg).min(1).meta(p),segment_ids:z.array(z.string()).default([]).meta(p),kind:Em.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}),...lo.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(p),allocation:ld.optional().meta(p)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht}),DC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),MC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),NC=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":Xe,"x-revturbine-schema-exposure":Pt}),HC=z.object({id:z.string().min(1).meta(p),surface_type:z.string().meta(p),fields:z.array(NC).optional().meta(p)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht}),zC=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":Xe,"x-revturbine-schema-exposure":Pt}),KC=z.object({name:z.string().min(1).meta(p),action_type:zC.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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),GC=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),$C=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),Fg=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":Xe,"x-revturbine-schema-exposure":Pt}),ZC=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:Fg.meta(p),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Fg})).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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),YC=z.object({label:z.string().meta(p),path:Bg.meta(p),config:z.record(z.string(),z.string()).optional().meta(p)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt}),b_=z.object({template_id:z.string().min(1).meta(p),fields:z.record(z.string(),z.string()).meta(p),ctas:z.array(YC).meta(p)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt}),y_=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":Xe,"x-revturbine-schema-exposure":Pt}),WC=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":Xe,"x-revturbine-schema-exposure":Pt}),v_=z.object({max_per_period:WC.optional().meta(p),cooldown_days:z.number().int().min(0).optional().meta(p)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt}),JC=z.object({id:z.string().min(1).meta(p),target:y_.meta(p),surfaces:z.array(b_).meta(p),caps:v_.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":Xe,"x-revturbine-schema-exposure":Pt}),XC=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:Ll}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ll}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:Ll}),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":Xe,"x-revturbine-schema-exposure":Pt}),QC=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt}),ek=z.object({id:z.string().min(1).meta(p),name:z.string().min(1).meta(p),category:QC.meta(p),trigger:XC.meta(p),payloads:z.array(JC).meta(p),order:z.number().int().min(0).meta(p)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht}),tk=z.object({payload_id:z.string().min(1).meta(p),placement_id:z.string().min(1).meta(p),target:y_.meta(p),caps:v_.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(b_).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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),nk=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":Xe,"x-revturbine-schema-exposure":Pt,...ht}),rk=de.merge(c_).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...Fs}),ik=de.merge(d_).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...Fs}),sk=z.object({plans:z.array(EC).meta({...p,...ht}),addons:z.array(wC).optional().meta({...p,...so}),entitlements:z.array(BC).meta({...p,...ht}),entitlement_rules:z.array(qC).meta({...p,...ht}),segments:z.array(RC).meta({...p,...ht}),content_ui_paths:z.array(KC).meta({...p,...ht}),slot_configs:z.array(DC).optional().meta({...p,...ht,...mm({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,...ht,...mm({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,...gC,...mm({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(MC).optional().meta({...p,...ht}),message_blocks:z.array(ZC).optional().meta({...p,...ht}),placement_payloads:z.array(tk).optional().meta({...p,...ht}),placements:z.array(ek).optional().meta({...p,...ht}),content_promotions:z.array(GC).optional().meta({...p,...ht}),personalization_tokens:z.array($C).optional().meta({...p,...ht}),surface_templates:z.array(HC).optional().meta({...p,...ht}),free_trial_rules:z.array(rk).optional().meta({...p,...so}),reverse_trial_rules:z.array(ik).optional().meta({...p,...so}),plan_variations:z.array(AC).optional().meta({...p,...so}),addon_variations:z.array(OC).optional().meta({...p,...so}),extension_rules:z.array(nk).optional().meta({...p,...ht}),seat_types:z.array(jC).optional().meta({...p,...ht}),enforcement_defaults:z.array(FC).optional().meta({...p,...ht}),placement_settings:z.array(LC).optional().meta({...p,...ht}),segment_dimensions:z.array(VC).optional().meta({...p,...ht}),meter_bindings:z.array(UC).optional().meta({...p,...ht}),experiments:z.array(z.unknown()).max(0).optional().meta({...p,...Fs}),signal_catalog:z.object({}).strict().optional().meta({...p,...Fs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht}),ak=z.object({artifact_type:z.literal("playbook").meta({...p,...Ja,readOnly:true}),format_version:z.literal(bC).meta({...p,...Ja,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...p,...Ja}),playbook_version_id:z.string().nullable().default(null).meta({...p,...Im,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...p,...Pm,readOnly:true}),environment_id:z.string().min(1).optional().meta({...p,...Pm,readOnly:true}),project_id:z.string().min(1).optional().meta({...p,...Pm,readOnly:true}),exported_at:z.string().datetime().optional().meta({...p,...Im,readOnly:true}),schema_version:z.string().min(1).optional().meta({...p,...Ja,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ja,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...p,...Ja,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...Im}),x_=ak.extend(sk.shape).meta({"x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht});function ok(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function S_(t){if(!ok(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(S_,x_).meta({id:"Playbook","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht});z.preprocess(S_,x_.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Xe,"x-revturbine-schema-exposure":Pt,...ht});({"/api/seat-type-anchors":{get:b({operationId:"listSeatTypeAnchors",requestParams:{query:re},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:ne(yC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:b({operationId:"listSeatTypes",requestParams:{query:re},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:ne(Rl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:b({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ir(Rl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:b({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Rl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Rl}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:b({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:b({operationId:"listPersonalizationTokenAnchors",requestParams:{query:re},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:ne(vC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:b({operationId:"listPersonalizationTokens",requestParams:{query:re},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:ne(El)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:b({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ir(El)}}},responses:{201:{description:"Created",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:b({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:El.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:El}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:b({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:b({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pr(Tm)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Tm}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:b({operationId:"listMeteringConfigs",requestParams:{query:re},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:ne(wl)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:b({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ir(wl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:b({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wl.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wl}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:b({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:b({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:re},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:ne(SC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:b({operationId:"listUsageEnforcementSettings",requestParams:{query:re},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:ne(Al)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:b({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ir(Al)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Al}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:b({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Al.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Al}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:b({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:b({operationId:"listPlacementSettingsAnchors",requestParams:{query:re},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:ne(CC)}}},default:{description:"Error response",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:b({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Pr(Cm)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Cm}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:ps}=Pn,{Persisted:I_}=Kn,{Internal:P_}=jn,lk=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":I_,"x-revturbine-schema-exposure":P_}),Lg=de.merge(Te).merge(qe).extend({action:lk.meta(ps),resource_type:z.string().min(1).max(100).meta(ps),resource_id:z.string().min(1).meta(ps),resource_name:z.string().max(200).optional().meta(ps),actor_id:z.string().min(1).meta(ps),actor_email:z.string().email().optional().meta(ps),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(ps),summary:z.string().max(1e3).optional().meta(ps),metadata:Fn.meta(ps)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":I_,"x-revturbine-schema-exposure":P_});({"/api/changelog":{get:b({operationId:"listChangeLogEntries",requestParams:{query:re},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:ne(Lg)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:b({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:Lg}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:ed}=Pn,{Persisted:ck,Transient:dk}=Kn,{Internal:T_}=jn,uk=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":dk,"x-revturbine-schema-exposure":T_}),js=de.merge(Te).extend({name:Dn.meta(ed),handle:cn.meta(ed),status:uk.default("active").meta(ed),metadata:Fn.meta(ed)}).meta({id:"Tenant","x-revturbine-schema-persistence":ck,"x-revturbine-schema-exposure":T_});({"/api/tenants":{get:b({operationId:"listTenants",requestParams:{query:re},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:ne(js)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:b({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:b({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:js.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:b({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:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:b({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:js}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:pi}=Pn,{Persisted:mk,Transient:C_}=Kn,{Internal:zm}=jn,pk=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":C_,"x-revturbine-schema-exposure":zm}),Xa=de.merge(Te).merge(qe).extend({name:Dn.meta(pi),handle:cn.meta(pi),description:na.meta(pi),is_production:z.boolean().default(false).meta({...pi,readOnly:true}),status:pk.default("active").meta(pi),cloned_from_environment_id:z.string().nullable().default(null).meta({...pi,readOnly:true}),cloned_at:En.meta({...pi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...pi,readOnly:true}),requires_approval:z.boolean().default(false).meta(pi),auto_deploy_on_approval:z.boolean().default(false).meta(pi),created_by:z.string().optional().meta(pi),metadata:Fn.meta(pi)}).meta({id:"Environment","x-revturbine-schema-persistence":mk,"x-revturbine-schema-exposure":zm}),fk=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":C_,"x-revturbine-schema-exposure":zm});({"/api/environments":{get:b({operationId:"listEnvironments",requestParams:{query:re},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:ne(Xa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:b({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:Xa}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:b({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:Xa}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:b({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:Xa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xa}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:b({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:Xa}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:b({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:fk}}},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:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:Be,Pii:Ul}=Pn,{Transient:$i,Persisted:hk}=Kn,{External:Ri}=jn,gk=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri});z.object({superseded_output_id:z.string().min(1).meta(Be),superseded_by:z.string().min(1).meta(Be),reason:gk.meta(Be)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":hk,"x-revturbine-schema-exposure":Ri,...Pn.Operational});var _k=z.enum(Ug).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri}),k_=z.object({output_id:z.string().meta(Be),category:z.string().meta(Be),surface:z.object({template:z.string().optional().meta(Be),type:sd.meta(Be),slot_id:z.string().optional().meta(Be)}).meta(Be),content:z.record(z.string(),z.unknown()).meta(Be),promotion:z.record(z.string(),z.unknown()).optional().meta(Be),cta_path:z.record(z.string(),z.unknown()).optional().meta(Be),ui_path:z.record(z.string(),z.unknown()).optional().meta(Be),rule_id:z.string().meta(Be),decision_id:z.string().meta(Be),config_version:z.string().meta(Be),present_upsell:z.boolean().meta(Be),experiment_id:z.string().optional().meta(Be),variant_key:z.string().optional().meta(Be),experiment_version_id:z.string().optional().meta(Be)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri}),bk=z.object({status:_k.meta(Be),allowed:z.boolean().meta(Be),reason:z.string().optional().meta(Be),current_tier:z.string().optional().meta(Be),limit:z.number().optional().meta(Be),used:z.number().optional().meta(Be),remaining:z.number().optional().meta(Be),placement:k_.optional().meta(Be)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri});z.object({id:z.string().meta(Be),name:z.string().optional().meta(Be),discount:z.string().optional().meta(Be),type:z.string().optional().meta(Be),status:z.string().optional().meta(Be)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri});var yk=z.object({id:z.string().meta(Ul),anonymous_id:z.string().optional().meta(Be),traits:z.record(z.string(),z.unknown()).optional().meta(Ul)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri}),vk=z.object({slot_id:z.string().optional().meta(Be),entitlement_handle:z.string().optional().meta(Be),plan_handle:z.string().optional().meta(Be),placement_handle:z.string().optional().meta(Be),visible:z.boolean().meta(Be),output:k_.optional().meta(Be),reason_codes:z.array(z.string()).optional().meta(Be)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri}),xk=bk,Sk=Lm.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri}),Ik=z.object({segments:z.array(z.string()).optional().meta(Be),traits:z.record(z.string(),z.unknown()).optional().meta(Ul),usage_balances:z.record(z.string(),z.number()).optional().meta(Be)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri});z.object({version:z.literal("1.0.0").meta(Be),request_id:z.string().meta(Be),tenant_id:z.string().meta(Be),evaluated_at:z.string().datetime().meta(Be),ttl_seconds:z.number().int().min(0).max(86400).meta(Be),user:yk.meta(Ul),decisions:z.array(vk).meta(Be),entitlements:z.record(z.string(),xk).optional().meta(Be),theme:z.record(z.string(),z.unknown()).optional().meta(Be),trial_status:Sk.optional().meta(Be),user_context:Ik.optional().meta(Ul)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":$i,"x-revturbine-schema-exposure":Ri});var {Unrestricted:Zt}=Pn,{Persisted:Pk,Transient:dd}=Kn,{Internal:$l}=jn,Tk=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":dd,"x-revturbine-schema-exposure":$l}),Ol=de.merge(Te).merge(qe).extend({environment_id:z.string().min(1).meta(Zt),name:Dn.meta(Zt),description:z.string().max(2e3).optional().meta(Zt),status:Tk.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:En.meta({...Zt,readOnly:true}),reviewed_at:En.meta({...Zt,readOnly:true}),deployed_at:En.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:Fn.meta(Zt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":Pk,"x-revturbine-schema-exposure":$l}),R_=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":dd,"x-revturbine-schema-exposure":$l}),Ck=z.object({playbook_version_id:z.string().meta(Zt),entries:z.array(R_).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":dd,"x-revturbine-schema-exposure":$l}),kk=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":dd,"x-revturbine-schema-exposure":$l});({"/api/playbook-versions/{playbookVersionId}/submit":{post:b({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:Ol}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:b({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:Ol}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:b({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:Ol}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:b({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:kk}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:b({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:Ol}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:b({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:Ck}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:b({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:re},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:ne(R_)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:b({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:Ol}}},default:{description:"Error",content:{"application/json":{schema:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:b({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:mt}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:It,Pii:Rk}=Pn,{Persisted:Ei}=Kn,{Internal:wi}=jn,Ek=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),td=de.merge(Te).merge(qe).extend({name:Dn.meta(It),key_hash:z.string().min(1).meta({...Rk,readOnly:true}),key_prefix:z.string().min(1).max(20).meta({...It,readOnly:true}),key_last4:z.string().length(4).meta({...It,readOnly:true}),status:Ek.default("active").meta(It),last_used_at:En.meta({...It,readOnly:true}),expires_at:En.meta(It)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),wk=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),ea=de.merge(Te).merge(qe).extend({key:z.string().min(1).max(100).meta(It),value_type:wk.default("boolean").meta(It),value:z.string().max(4e3).default("false").meta(It),description:na.meta(It),enabled:z.boolean().default(true).meta(It)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),km=de.merge(Te).merge(qe).extend({workspace_name:z.string().min(1).max(200).meta(It),support_email:z.string().email().nullable().default(null).meta(It),timezone:z.string().max(50).default("UTC").meta(It),default_currency:z.string().length(3).default("USD").meta(It),logo_url:z.string().url().nullable().default(null).meta(It),activity_window_days:z.number().int().min(1).default(30).meta(It),activity_high_min:z.number().int().min(1).default(10).meta(It),activity_medium_min:z.number().int().min(1).default(3).meta(It),activity_low_min:z.number().int().min(1).default(1).meta(It)}).meta({id:"TenantConfig","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),Rm=de.merge(Te).merge(qe).extend({server_url:z.string().url().max(500).meta(It),api_token_hint:z.string().max(50).nullable().default(null).meta(It),allow_write_actions:z.boolean().default(false).meta(It),enabled_tools:z.array(z.string().max(100)).default([]).meta(It),enabled:z.boolean().default(false).meta(It)}).meta({id:"McpConfig","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),nd=de.merge(Te).merge(qe).extend({step_key:z.string().min(1).max(100).meta(It),label:z.string().min(1).max(200).meta(It),done:z.boolean().default(false).meta(It),completed_at:En.meta({...It,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),Ak=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),Ok=de.merge(qe).extend({environment_id:z.string().min(1).default("production").meta(It),actor_type:Ak.meta(It),actor_id:z.string().nullable().default(null).meta(It),action:z.string().min(1).max(120).meta(It),object_type:z.string().max(120).nullable().default(null).meta(It),object_id:z.string().max(200).nullable().default(null).meta(It),payload:z.record(z.string(),z.unknown()).nullable().default(null).meta(It),occurred_at:z.string().datetime().meta({...It,readOnly:true})}).meta({id:"AuditEvent","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),jk=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi}),rd=de.merge(Te).merge(qe).merge(pn).merge(bn).extend({handle:cn.meta({...It,readOnly:true}),identifier:z.string().min(1).max(200).meta(It),identifier_type:jk.default("user_id").meta(It),note:z.string().max(500).nullable().default(null).meta(It),added_by:z.string().meta(It)}).meta({id:"PlacementTestUser","x-revturbine-schema-persistence":Ei,"x-revturbine-schema-exposure":wi,...hi()});({"/api/settings/api-keys":{get:b({operationId:"listApiKeys",requestParams:{query:re},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:ne(td)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:b({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ir(td)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:td}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:b({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:td}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:b({operationId:"listFeatureFlags",requestParams:{query:re},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:ne(ea)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:b({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ir(ea)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:b({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:ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:b({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Pr(ea).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:b({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:ea}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:b({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Pr(km).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:km}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:b({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Pr(Rm).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Rm}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:b({operationId:"listOnboardingSteps",requestParams:{query:re},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:ne(nd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:b({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:nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:b({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Pr(nd).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:nd}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:b({operationId:"listAuditEvents",requestParams:{query:re},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:ne(Ok)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:b({operationId:"listPlacementTestUsers",requestParams:{query:re},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:ne(rd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:b({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Ir(rd)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:b({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:rd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:le,Pii:Or}=Pn,{Persisted:Kr,Transient:Km}=Kn,{Internal:gr}=jn,Fk=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.merge(Te).extend({name:Dn.meta(le),email:z.string().email().meta(Or),email_verified:z.boolean().default(false).meta(le),image:z.string().url().nullable().default(null).meta(Or),role:Fk.default("user").meta(le),banned:z.boolean().default(false).meta({...le,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...le,readOnly:true}),ban_expires:En.meta({...le,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...le,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.merge(Te).extend({expires_at:z.string().datetime().meta(le),token:z.string().min(1).meta({...Or,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Or),user_agent:z.string().nullable().default(null).meta(Or),user_id:z.string().min(1).meta({...le,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(le),impersonated_by:z.string().nullable().default(null).meta({...le,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.merge(Te).extend({account_id:z.string().min(1).meta(le),provider_id:z.string().min(1).meta(le),user_id:z.string().min(1).meta({...le,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Or,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Or,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Or,readOnly:true}),access_token_expires_at:En.meta({...le,readOnly:true}),refresh_token_expires_at:En.meta({...le,readOnly:true}),scope:z.string().nullable().default(null).meta(le),password:z.string().nullable().default(null).meta({...Or,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.merge(Te).extend({identifier:z.string().min(1).meta(Or),value:z.string().min(1).meta({...Or,readOnly:true}),expires_at:z.string().datetime().meta(le)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({secret:z.string().min(1).meta({...Or,readOnly:true}),backup_codes:z.string().min(1).meta({...Or,readOnly:true}),user_id:z.string().min(1).meta({...le,readOnly:true}),verified:z.boolean().default(false).meta({...le,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({name:Dn.meta(le),slug:z.string().min(1).max(100).nullable().default(null).meta(le),logo:z.string().url().nullable().default(null).meta(le),created_at:z.string().datetime().meta({...le,readOnly:true}),metadata:z.string().nullable().default(null).meta(le)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});var E_=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});var w_=z.enum(["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"]).meta({id:"PermissionResource","x-revturbine-schema-persistence":Km,"x-revturbine-schema-exposure":gr}),A_=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":Km,"x-revturbine-schema-exposure":gr});z.object({resource:w_,action:A_}).meta({id:"Permission","x-revturbine-schema-persistence":Km,"x-revturbine-schema-exposure":gr});var Lk=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],Vk=["plans","entitlements","placements","targeting","content","experiments"],Uk=["plans","entitlements","placements","targeting","content","experiments"],Bk=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],qk=["read","create","update","delete","publish","approve","invite","manage_roles"];function ud(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Dk=ud(Lk,["read"]),Mk=[...Dk,...ud(Vk,["create","update"])];[...Mk,...ud(Uk,["publish","approve","delete"])];ud(Bk,qk);var Nk=w_.options.flatMap(t=>A_.options.map(e=>`${t}:${e}`));z.enum(Nk).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({organization_id:z.string().min(1).meta({...le,readOnly:true}),user_id:z.string().min(1).meta({...le,readOnly:true}),role:E_.default("viewer").meta(le),created_at:z.string().datetime().meta({...le,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});var Hk=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({organization_id:z.string().min(1).meta({...le,readOnly:true}),email:z.string().email().meta(Or),role:E_.nullable().default(null).meta(le),status:Hk.default("pending").meta(le),expires_at:z.string().datetime().meta(le),created_at:z.string().datetime().meta({...le,readOnly:true}),inviter_id:z.string().min(1).meta({...le,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({name:z.string().max(200).nullable().default(null).meta(le),public_key:z.string().min(1).meta({...Or,readOnly:true}),user_id:z.string().min(1).meta({...le,readOnly:true}),credential_id:z.string().min(1).meta({...le,readOnly:true}),counter:z.number().int().default(0).meta({...le,readOnly:true}),device_type:z.string().min(1).meta(le),backed_up:z.boolean().default(false).meta(le),transports:z.string().nullable().default(null).meta(le),created_at:z.string().datetime().meta({...le,readOnly:true}),aaguid:z.string().nullable().default(null).meta(le)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.merge(Te).extend({config_id:z.string().min(1).meta(le),name:z.string().max(200).nullable().default(null).meta(le),start:z.string().nullable().default(null).meta(le),reference_id:z.string().min(1).meta(le),prefix:z.string().nullable().default(null).meta(le),key:z.string().min(1).meta({...Or,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(le),refill_amount:z.number().int().nullable().default(null).meta(le),last_refill_at:En.meta({...le,readOnly:true}),enabled:z.boolean().default(true).meta(le),rate_limit_enabled:z.boolean().default(false).meta(le),rate_limit_time_window:z.number().int().nullable().default(null).meta(le),rate_limit_max:z.number().int().nullable().default(null).meta(le),request_count:z.number().int().default(0).meta({...le,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...le,readOnly:true}),last_request:En.meta({...le,readOnly:true}),expires_at:En.meta(le),permissions:z.string().nullable().default(null).meta(le),metadata:z.string().nullable().default(null).meta(le)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});de.extend({issuer:z.string().min(1).meta(le),oidc_config:z.string().nullable().default(null).meta(le),saml_config:z.string().nullable().default(null).meta(le),user_id:z.string().min(1).meta({...le,readOnly:true}),provider_id:z.string().min(1).meta(le),organization_id:z.string().nullable().default(null).meta(le),domain:z.string().min(1).meta(le)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":Kr,"x-revturbine-schema-exposure":gr});var O_="0.2.87";var md=/^[a-z0-9._]{1,100}$/;var tt={Persisted:"persisted",Transient:"transient"},Ze={Internal:"internal",External:"external"},Me={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 j_="x-revturbine-schema-exposure",Gk="readOnly",$k="x-revturbine-decision-only",pd={[$k]:true},Fr={[j_]:Ze.External},Gm={[j_]:Ze.Internal};function Mn(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[Gk]===true||(e[n]=r);}return z.object(e)}function Gn(t){let e=Mn(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(md)}):e}var {Unrestricted:ar}=Me,{Transient:Lr,Persisted:Zk}=tt,{Internal:ra,External:Zi}=Ze;z.object({page:z.coerce.number().int().min(1).default(1).meta(ar),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(ar)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi});var $m=t=>z.object({items:z.array(t).meta(ar),total:z.number().int().min(0).meta(ar),page:z.number().int().min(1).meta(ar),per_page:z.number().int().min(1).meta(ar),has_more:z.boolean().meta(ar)}).meta({id:"PaginatedResponse","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi}),J=z.object({created_at:z.string().datetime().meta({...ar,readOnly:true}),updated_at:z.string().datetime().meta({...ar,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi}),N=z.object({id:z.string().min(1).meta({...ar,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi}),ie=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...ar,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":ra});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi});var Zl=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":Lr,"x-revturbine-schema-exposure":Zi}),Yl=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi});var go=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi}),Zm=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":Zi});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":ra});var Mt=z.string().min(1).max(200),ct=z.string().min(1).max(100),ri=z.string().max(500).optional(),Tt=z.record(z.string(),z.unknown()).default({}),qs=z.number().int().min(10).max(100).multipleOf(10),Nt=z.string().datetime().nullable().default(null),Ct=z.object({environment_id:z.string().min(1).default("production").meta({...ar,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":ra}),At=z.object({playbook_version_id:z.string().nullable().default(null).meta(ar),is_current:z.boolean().default(true).meta({...ar,readOnly:true}),is_deleted:z.boolean().default(false).meta({...ar,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...ar,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...ar,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...ar,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":ra}),Qk=N.merge(J).merge(ie).merge(Ct).extend({handle:ct.meta({...ar,readOnly:true}),active:z.boolean().default(true).meta({...ar,readOnly:true})});function dn(t){return Qk.meta({id:t,"x-revturbine-schema-persistence":Zk,"x-revturbine-schema-exposure":ra})}var _o=z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Lr,"x-revturbine-schema-exposure":ra}),Ym=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":Lr,"x-revturbine-schema-exposure":ra}),bo=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":Lr,"x-revturbine-schema-exposure":Zi});var Ne={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Gr={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},eR="x-revturbine-context",tR="x-revturbine-in-config",nR="x-revturbine-sdk-input",rR="x-revturbine-source",iR="x-revturbine-deprecation",sR={[Ne.Playbook]:Gr.Customer,[Ne.Branding]:Gr.Customer,[Ne.Billing]:Gr.Stripe,[Ne.Metering]:Gr.Customer,[Ne.CustomerOperations]:Gr.Runtime,[Ne.EventIngestion]:Gr.Runtime};function pt(t,e){return {[eR]:t,[tR]:e.inConfig??t===Ne.Playbook,[nR]:e.sdkInput,[rR]:e.source??sR[t]}}function Wl(t){return {deprecated:true,[iR]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Wm={Named:"named",Minted:"minted"},F_="x-revturbine-schema-identity";function Tn(t="handle"){return {[F_]:{kind:Wm.Named,handleField:t}}}function or(t="handle"){return {[F_]:{kind:Wm.Minted,handleField:t}}}var B=t=>z.object({items:z.array(t)}),Ce=z.object({error:z.string(),code:z.string(),request_id:z.string()}),_=t=>t,q=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:Gt,Financial:fd}=Me,{Persisted:Jl,Transient:hd}=tt,{External:gs}=Ze,aR=pt(Ne.Playbook,{sdkInput:true}),oR=pt(Ne.Playbook,{sdkInput:false}),Jm=pt(Ne.Billing,{sdkInput:false}),Yi=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":gs}),ca=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":gs}),yo=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":gs}),ia=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:Mt.meta(Gt),handle:ct.meta(Gt),tier_position:z.number().int().min(0).default(0).meta(Gt),sort_order:z.number().int().default(0).meta(Gt),visibility:Yi.default("public").meta(Gt),metadata:Tt.meta(Gt)}).meta({id:"Plan","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":gs,...aR,...Tn()}),lR=dn("PlanAnchor"),sa=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:ct.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(fd),pricing_model:ca.meta(Gt),visibility:Yi.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:yo.default("static").meta(Gt)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":gs,...Jm,...or()}),cR=dn("PlanVariationAnchor"),aa=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),name:Mt.meta(Gt),handle:ct.meta(Gt),sort_order:z.number().int().default(0).meta(Gt),visibility:Yi.default("public").meta(Gt),metadata:Tt.meta(Gt)}).meta({id:"AddOn","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":gs,...oR,...Tn()}),dR=dn("AddOnAnchor"),oa=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Gt,readOnly:true}),handle:ct.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(fd),pricing_model:ca.meta(Gt),visibility:Yi.default("public").meta(Gt),stripe_price_id:z.string().optional().meta(Gt),price_source:yo.default("static").meta(Gt)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":gs,...Jm,...or()}),uR=dn("AddOnVariationAnchor"),L_=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":hd,"x-revturbine-schema-exposure":gs}),la=N.merge(J).merge(ie).extend({stripe_price_id:z.string().min(1).meta(Gt),stripe_product_id:z.string().min(1).meta(Gt),billing_period:L_.meta(Gt),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(fd),currency:Zm.meta(fd),pricing_model:ca.meta(Gt),nickname:z.string().nullable().default(null).meta(Gt),is_mock:z.boolean().default(false).meta(Gt),last_updated_from_stripe:Nt.meta(Gt)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Jl,"x-revturbine-schema-exposure":gs,...Jm});var mR=Mn(ia),pR=Mn(sa),fR=Mn(aa),hR=Mn(oa),gR=Mn(la);({"/api/plan-anchors":{get:_({operationId:"listPlanAnchors",requestParams:{query:q},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:B(lR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:_({operationId:"listPlans",requestParams:{query:q},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:B(ia)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:_({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Gn(ia)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:ia}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:_({operationId:"getPlan",requestParams:{path:z.object({planId:z.string()})},summary:"Get plan by ID",tags:["plans"],responses:{200:{description:"Plan detail",content:{"application/json":{schema:ia}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:_({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:mR}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:ia}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:_({operationId:"deletePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Delete plan",tags:["plans"],responses:{204:{description:"Plan deleted"},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:_({operationId:"reorderPlans",summary:"Reorder plans",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:z.object({ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"reorder"}}})},"/api/plan-variation-anchors":{get:_({operationId:"listPlanVariationAnchors",requestParams:{query:q},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:B(cR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:_({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:q},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:B(sa)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:_({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Gn(sa)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:sa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:_({operationId:"getPlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get plan variation by ID",tags:["plans"],responses:{200:{description:"Plan variation detail",content:{"application/json":{schema:sa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:_({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:pR}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:sa}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:_({operationId:"deletePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete plan variation",tags:["plans"],responses:{204:{description:"Plan variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"delete"}}})},"/api/addon-anchors":{get:_({operationId:"listAddOnAnchors",requestParams:{query:q},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:B(dR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:_({operationId:"listAddOns",requestParams:{query:q},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:B(aa)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:_({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Gn(aa)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:aa}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:_({operationId:"getAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Get add-on by ID",tags:["plans"],responses:{200:{description:"Add-on detail",content:{"application/json":{schema:aa}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:_({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:fR}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:aa}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Delete add-on",tags:["plans"],responses:{204:{description:"Add-on deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"delete"}}})},"/api/addon-variation-anchors":{get:_({operationId:"listAddOnVariationAnchors",requestParams:{query:q},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:B(uR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:_({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:q},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:B(oa)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:_({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Gn(oa)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:oa}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:_({operationId:"getAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Get add-on variation by ID",tags:["plans"],responses:{200:{description:"Add-on variation detail",content:{"application/json":{schema:oa}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:_({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:hR}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:oa}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:_({operationId:"deleteAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Delete add-on variation",tags:["plans"],responses:{204:{description:"Variation deleted"}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"delete"}}})},"/api/stripe-prices":{get:_({operationId:"listStripePrices",requestParams:{query:q},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:B(la)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:_({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Gn(la)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:_({operationId:"getStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Get Stripe price by ID",tags:["plans"],responses:{200:{description:"Stripe price detail",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:_({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:gR}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:la}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:_({operationId:"deleteStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Delete Stripe price",tags:["plans"],responses:{204:{description:"Stripe price deleted"}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"delete"}}})}});var {Unrestricted:be}=Me,{Persisted:Qm,Transient:ii}=tt,{Internal:V_,External:$r}=Ze,U_=pt(Ne.Playbook,{sdkInput:true}),bR=pt(Ne.Playbook,{inConfig:false,sdkInput:false}),ep=z.enum(["per_month","per_year","per_billing_period","lifetime","concurrent","per_instance","per_second","per_minute","per_hour","per_6_hours","per_day","per_week"]).meta({id:"UsagePeriodScope","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),vo=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),B_=z.enum(Yl).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),q_=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),tp=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),ua=z.object({entitlement_id:z.string().min(1).meta(be),entitlement_handle:z.string().min(1).meta(be),status:B_.meta(be),limit:z.number().optional().meta(be),used:z.number().optional().meta(be),allocation:vo.optional().meta(be),enforcement:tp.optional().meta(be),source:q_.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":ii,"x-revturbine-schema-exposure":$r,...Me.Operational});z.object({account:z.record(z.string(),ua).optional().meta(be),instance:z.record(z.string(),ua).optional().meta(be),user:z.record(z.string(),ua).optional().meta(be)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r,...Me.Operational});var D_=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),M_=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),_d=z.object({kind:M_.meta(be),id:z.string().min(1).meta(be)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),N_=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),da=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...be,readOnly:true}),name:Mt.meta(be),handle:ct.meta(be),customer_facing_description:z.string().max(500).optional().meta(be),type:go.meta(be),unit:z.string().max(100).optional().meta(be),period_scope:ep.optional().meta(be),allocation:vo.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:Tt.meta(be)}).meta({id:"Entitlement","x-revturbine-schema-persistence":Qm,"x-revturbine-schema-exposure":$r,...U_,...Tn()}),vR=dn("EntitlementAnchor"),Ds=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...be,readOnly:true}),handle:ct.meta({...be,readOnly:true}),entitlement_id:z.string().min(1).meta(be),targets:z.array(_d).min(1).meta(be),segment_ids:z.array(z.string()).default([]).meta(be),visibility:D_.default("public").meta(be),period_scope:ep.optional().meta(be),instance:z.string().max(100).optional().meta(be),reset_period:N_.optional().meta(be),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(be),enforcement:tp.optional().meta(be),warning_threshold_percent:qs.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:vo.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":Qm,"x-revturbine-schema-exposure":V_,...U_,...or()}),xR=dn("EntitlementRuleAnchor");Ds.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var IR=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r}),PR=z.object({code:IR.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":ii,"x-revturbine-schema-exposure":$r}),Xm=Ds.extend({warnings:z.array(PR).optional().meta(be)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ii,"x-revturbine-schema-exposure":$r});var gd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({handle:ct.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":Qm,"x-revturbine-schema-exposure":V_,...bR,...or()}),TR=Mn(da),CR=Mn(Ds);({"/api/entitlement-anchors":{get:_({operationId:"listEntitlementAnchors",requestParams:{query:q},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:B(vR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:_({operationId:"listEntitlementRuleAnchors",requestParams:{query:q},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:B(xR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:_({operationId:"listEntitlements",requestParams:{query:q},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:B(da)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:_({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Gn(da)}}},responses:{201:{description:"Created",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:_({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:_({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:TR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:da}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Delete entitlement",tags:["entitlements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:_({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:q},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:B(Ds)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:_({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Gn(Ds)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Xm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:_({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:CR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Xm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete entitlement rule",tags:["entitlements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"delete"}}})},"/api/entitlement-rules/{ruleId}/duplicate":{post:_({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Xm}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:_({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:q},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:B(gd)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:_({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Gn(gd)}}},responses:{201:{description:"Created",content:{"application/json":{schema:gd}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:je}=Me,{Persisted:bd,Transient:Ms}=tt,{External:yi}=Ze,z_=pt(Ne.Playbook,{sdkInput:true});pt(Ne.Playbook,{inConfig:false,sdkInput:false});var RR=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),ER=pt(Ne.Playbook,{inConfig:false,sdkInput:false,source:Gr.Runtime}),wR=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var np=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi}),rp=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi}),K_=z.object({count:z.number().int().positive().meta(je),period:rp.meta(je)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi});z.object({surface_type:z.string().min(1).meta(je),rules:z.array(K_).meta(je),cooldown_ms:z.number().int().nonnegative().optional().meta(je)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":bd,"x-revturbine-schema-exposure":yi,...Me.Operational,...RR});var G_=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":Ms,"x-revturbine-schema-exposure":yi}),ma=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),name:Mt.meta(je),handle:ct.meta(je),description:ri.meta(je),category:np.meta(je),drag_order_in_category:z.number().int().default(0).meta(je),surface_slot_id:z.string().optional().meta(je),entitlement_id:z.string().optional().meta(je),tier_threshold:z.string().optional().meta(je),threshold_percent:qs.optional().meta(je),trial_type:z.enum(["free","reverse"]).optional().meta(je),trigger_type:z.string().optional().meta(je),trial_progress_percent:z.number().min(0).max(100).optional().meta(je),days_before_end:z.number().int().min(0).optional().meta(je),qualifier:wR.optional().meta(je),activation_window_start:z.string().datetime().optional().meta(je),activation_window_end:z.string().datetime().optional().meta(je),metadata:Tt.meta(je)}).meta({id:"Placement","x-revturbine-schema-persistence":bd,"x-revturbine-schema-exposure":yi,...z_,...Tn()}),OR=dn("PlacementAnchor"),$_=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi}),Z_=z.object({code:$_.meta(je),message:z.string().min(1).meta(je),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(je)}).meta({id:"PlacementWarning","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi}),H_=ma.extend({warnings:z.array(Z_).optional().meta(je)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi});var Y_=z.object({label:z.string().min(1).max(200).meta(je),cta_path_type:G_.meta(je),config_fields:z.record(z.string(),z.unknown()).default({}).meta(je)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Ms,"x-revturbine-schema-exposure":yi}),xo=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...je,readOnly:true}),handle:ct.meta({...je,readOnly:true}),placement_id:z.string().min(1).meta(je),drag_order:z.number().int().default(0).meta(je),target_plan_ids:z.array(z.string()).default([]).meta(je),target_plan_billing_cadences:z.array(z.string()).default([]).meta(je),target_segments:z.array(z.string()).default([]).meta(je),surface_slot_ids:z.array(z.string()).default([]).meta(je),surface_template_id:z.string().min(1).meta(je),content_fields:z.record(z.string(),z.unknown()).default({}).meta(je),cta_list:z.array(Y_).default([]).meta(je),max_per_period:z.number().int().min(0).nullable().default(null).meta(je),max_period_unit:rp.default("session").meta(je),cooldown_after_dismiss_days:z.number().int().min(0).default(7).meta(je),remind_later_minutes:z.number().int().min(0).nullable().default(null).meta(je),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(je),recommendation_plan_override:z.string().optional().meta(je)}).meta({id:"PlacementPayload","x-revturbine-schema-persistence":bd,"x-revturbine-schema-exposure":yi,...z_,...or()}),jR=dn("PlacementPayloadAnchor"),W_=N.merge(J).merge(ie).merge(Ct).merge(At).extend({surface_slot_handle:z.string().min(1).max(200).meta(je),surface_type:Zl.meta(je),surface_template_ids:z.array(z.string()).default([]).meta(je),surface_slot_category:z.enum(["fixed","gated","triggered"]).default("fixed").meta(je),first_seen:z.string().datetime().meta({...je,readOnly:true}),last_seen:z.string().datetime().meta({...je,readOnly:true}),status:z.enum(["active","inactive","new"]).default("new").meta(je),placement_count:z.number().int().min(0).default(0).meta({...je,readOnly:true})}).meta({id:"SurfaceSlot","x-revturbine-schema-persistence":bd,"x-revturbine-schema-exposure":yi,...ER,...Tn("surface_slot_handle")}),FR=Mn(ma),LR=Mn(xo);({"/api/placement-anchors":{get:_({operationId:"listPlacementAnchors",requestParams:{query:q},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:B(OR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:_({operationId:"listPlacements",requestParams:{query:q},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:B(ma)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:_({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Gn(ma)}}},responses:{201:{description:"Created",content:{"application/json":{schema:H_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:_({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:ma}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:_({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:FR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:H_}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:_({operationId:"deletePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Delete placement",tags:["placements"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:_({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:ma}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:_({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:np,ids:z.array(z.string())})}}},responses:{200:{description:"Reordered"}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"reorder"}}})},"/api/placement-payload-anchors":{get:_({operationId:"listPlacementPayloadAnchors",requestParams:{query:q},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:B(jR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:_({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:q},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:B(xo)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:_({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Gn(xo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:_({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:LR}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xo}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:_({operationId:"deletePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Delete placement payload",tags:["placements"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"delete"}}})},"/api/surface-slots":{get:_({operationId:"listSurfaceSlots",requestParams:{query:q},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:B(W_)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var {Unrestricted:Cr,Pii:So}=Me,{Persisted:sp,Transient:ap}=tt,{Internal:Io}=Ze,UR=pt(Ne.CustomerOperations,{sdkInput:false}),J_=z.object({external_id:z.string().min(1).meta(So),traits:z.record(z.string(),z.unknown()).default({}).meta(So),plan_id:z.string().optional().meta(Cr)}).meta({id:"Identity","x-revturbine-schema-persistence":sp,"x-revturbine-schema-exposure":Io}),yd=z.enum(["payment_failed","payment_method_missing"]),ip=N.merge(J).merge(ie).extend({external_id:z.string().min(1).meta(So),identity:J_.meta(So),stripe_customer_id:z.string().optional().meta(Cr),current_plan_id:z.string().optional().meta(Cr),subscription_status:z.enum(["active","past_due","canceled","trialing","unpaid","none"]).default("none").meta(Cr),status:z.enum(["active","churned","trial","suspended"]).default("active").meta(Cr),billing_health_issues:z.array(yd).default([]).meta(Cr),metadata:Tt.meta(Cr)}).meta({id:"Customer","x-revturbine-schema-persistence":sp,"x-revturbine-schema-exposure":Io}),X_=z.enum(["permanent","for_duration"]).meta({id:"CustomerOverrideDuration","x-revturbine-schema-persistence":ap,"x-revturbine-schema-exposure":Io}),Q_=z.enum(["grant_plan","grant_addon","grant_entitlement"]).meta({id:"CustomerOverrideType","x-revturbine-schema-persistence":ap,"x-revturbine-schema-exposure":Io}),eb=z.enum(["active","expired","revoked"]).meta({id:"CustomerOverrideStatus","x-revturbine-schema-persistence":ap,"x-revturbine-schema-exposure":Io}),_s=N.merge(J).merge(ie).merge(Ct).merge(At).extend({handle:ct.meta({...Cr,readOnly:true}),customer_id:z.string().min(1).meta(So),customer_id_list:z.array(z.string()).optional().meta(So),override_type:Q_.meta(Cr),target_id:z.string().min(1).meta(Cr),value:z.record(z.string(),z.unknown()).default({}).meta(Cr),duration_type:X_.default("permanent").meta(Cr),duration_value:z.string().optional().meta(Cr),expiry_date:Nt.meta(Cr),status:eb.default("active").meta(Cr),reason:z.string().max(500).optional().meta(Cr),created_by:z.string().optional().meta(Cr)}).meta({id:"CustomerOverride","x-revturbine-schema-persistence":sp,"x-revturbine-schema-exposure":Io,...UR,...or()});({"/api/customers":{get:_({operationId:"listCustomers",requestParams:{query:q},summary:"List customers",tags:["customers"],responses:{200:{description:"Customer list",content:{"application/json":{schema:B(ip)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"list"}}})},"/api/customers/{customerId}":{get:_({operationId:"getCustomer",requestParams:{path:z.object({customerId:z.string()})},summary:"Get customer by ID",tags:["customers"],responses:{200:{description:"Customer",content:{"application/json":{schema:ip}}}},"x-revturbine-operation":{exposure:"internal",resource:"customers",persistence:{table:"customers",mode:"get"}}})},"/api/customer-overrides":{get:_({operationId:"listCustomerOverrides",requestParams:{query:q},summary:"List customer overrides",tags:["customers"],responses:{200:{description:"Override list",content:{"application/json":{schema:B(_s)}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"list"}}})},"/api/customer-overrides/{overrideId}":{get:_({operationId:"getCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Get customer override",tags:["customers"],responses:{200:{description:"Override",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"get"}}}),patch:_({operationId:"updateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Update customer override",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:_s.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}}),delete:_({operationId:"deleteCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Delete customer override",tags:["customers"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"delete"}}})},"/api/customer-overrides/{overrideId}/revoke":{post:_({operationId:"revokeCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Revoke an active customer override",tags:["customers"],responses:{200:{description:"Revoked",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"update"}}})},"/api/customer-overrides/{overrideId}/duplicate":{post:_({operationId:"duplicateCustomerOverride",requestParams:{path:z.object({overrideId:z.string()})},summary:"Duplicate customer override for another customer",tags:["customers"],requestBody:{required:true,content:{"application/json":{schema:z.object({customer_id:z.string()})}}},responses:{201:{description:"Duplicated",content:{"application/json":{schema:_s}}}},"x-revturbine-operation":{exposure:"internal",resource:"customer-overrides",persistence:{table:"customerOverrides",mode:"create"}}})}});var {Unrestricted:Ee,Pii:Xl,Financial:op}=Me,{Persisted:tb,Transient:Wi}=tt,{External:Po,Internal:Ql}=Ze,ec=z.object({in_trial:z.boolean().meta(Ee),trial_type:z.string().optional().meta(Ee),plan_handle:z.string().optional().meta(Ee),state:z.enum(["active","running_out","expired","converted","none"]).optional().meta(Ee),trial_limit_type:z.enum(["time","usage"]).optional().meta(Ee),progress_percent:z.number().min(0).max(100).optional().meta(Ee),day_number:z.number().int().min(0).optional().meta(Ee),days_remaining:z.number().int().min(0).optional().meta(Ee),usage_entitlement_handle:z.string().optional().meta(Ee),usage_consumed:z.number().int().min(0).optional().meta(Ee),usage_remaining:z.number().int().min(0).optional().meta(Ee),usage_limit:z.number().int().min(0).optional().meta(Ee)}).meta({id:"UserTrialStatus","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Po}),lp=z.object({entitlement_handle:z.string().min(1).meta(Ee),unit:z.string().min(1).meta(Ee),amount:z.number().min(0).meta(Ee),limit:z.number().min(0).optional().meta(Ee),reset_date:z.string().optional().meta(Ee)}).meta({id:"UserUsageEntry","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Po});z.enum(["new","high","medium","low","inactive"]).meta({id:"ActivityLevel","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Po});var cp=z.object({id:z.string().min(1).meta(Ee),name:z.string().min(1).meta(Ee),price:z.string().optional().meta(Ee),billing_period:z.enum(["monthly","annual","none"]).optional().meta(Ee)}).meta({id:"UserPlanContext","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Po}),nb=z.object({product_instance_id:z.string().min(1).meta(Ee),user_id:z.string().min(1).meta(Xl),plan:cp.optional().meta(Ee),usage:z.record(z.string(),lp).default({}).meta(Ee),trial:ec.optional().meta(Ee),entitlements:z.record(z.string(),z.union([z.boolean(),ua])).default({}).meta(Ee)}).meta({id:"UserInstanceContext","x-revturbine-schema-persistence":tb,"x-revturbine-schema-exposure":Po}),pa=N.merge(ie).merge(J).extend({user_id:z.string().min(1).meta(Xl),account_id:z.string().min(1).nullable().optional().meta(Xl),email:z.string().email().nullable().optional().meta(Xl),email_type:z.string().optional().meta(Ee),plan:cp.optional().meta(Ee),usage:z.record(z.string(),lp).default({}).meta(Ee),trial:ec.optional().meta(Ee),payment_failed:z.boolean().optional().meta(Ee),payment_at_risk:z.boolean().optional().meta(Ee),tiers:z.record(z.string(),z.string()).optional().meta(Ee),entitlements:z.record(z.string(),z.union([z.boolean(),ua])).default({}).meta(Ee),instances:z.array(nb).optional().meta(Ee),custom:z.record(z.string(),z.union([z.string(),z.number(),z.boolean(),z.null()])).default({}).meta(Xl),personalization:z.record(z.string(),z.union([z.string(),z.number()])).default({}).meta({...Ee,"x-revturbine-schema-persistence":Wi}),derived_config_version:z.string().nullable().optional().meta(Ee),context_hash:z.string().nullable().optional().meta(Ee),derived_computed_at:Nt.meta(Ee),activity_score:z.number().int().min(0).nullable().optional().meta(Ee),activity_score_computed_at:z.string().datetime().nullable().optional().meta(Ee),experiments:z.record(z.string(),z.string()).optional().meta(Ee)}).meta({id:"UserContext","x-revturbine-schema-persistence":tb,"x-revturbine-schema-exposure":Po}),DR=z.object({status:z.enum(["active","running_out","expired","converted","none"]).meta({...Ee,...Fr}),days_remaining:z.number().int().min(0).optional().meta({...Ee,...Fr}),ends_at:z.string().optional().meta({...Ee,...Fr})}).meta({id:"ClientContextTrial","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Ql}),MR=z.object({health:z.enum(["ok","attention_required"]).optional().meta({...Ee,...Fr}),failed_payment_reason:z.string().optional().meta({...op,...pd}),issues:z.array(yd).optional().meta({...op,...pd}),provider_subscription_id:z.string().optional().meta({...op,...Gm})}).meta({id:"ClientContextBilling","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Ql}),NR=z.object({can_upgrade:z.boolean().optional().meta({...Ee,...Fr}),can_manage_billing:z.boolean().optional().meta({...Ee,...Fr})}).meta({id:"ClientContextCapabilities","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Ql}),HR=z.object({handle:z.string().min(1).optional().meta({...Ee,...Fr}),name:z.string().min(1).optional().meta({...Ee,...Fr})}).meta({id:"ClientContextPlan","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Ql});z.object({subject:z.string().min(1).meta({...Ee,...Fr}),context_version:z.string().optional().meta({...Ee,...Fr}),trial:DR.optional().meta({...Ee,...Fr}),billing:MR.optional().meta({...Ee,...Fr}),plan:HR.optional().meta({...Ee,...Fr}),capabilities:NR.optional().meta({...Ee,...Fr})}).meta({id:"ClientContext","x-revturbine-schema-persistence":Wi,"x-revturbine-schema-exposure":Ql});({"/api/user-contexts":{get:_({operationId:"listUserContexts",requestParams:{query:q},summary:"List user contexts",tags:["users"],responses:{200:{description:"User context list",content:{"application/json":{schema:B(pa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"list"}}})},"/api/user-contexts/{userContextId}":{get:_({operationId:"getUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Get user context",tags:["users"],responses:{200:{description:"User context",content:{"application/json":{schema:pa}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"get"}}}),patch:_({operationId:"updateUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Update a user context",tags:["users"],requestBody:{required:true,content:{"application/json":{schema:pa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:pa}}}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"update"}}}),delete:_({operationId:"deleteUserContext",requestParams:{path:z.object({userContextId:z.string()})},summary:"Delete a user context",tags:["users"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"user-contexts",persistence:{table:"userContexts",mode:"delete"}}})}});var {Unrestricted:$n}=Me,{Persisted:dp,Transient:rb}=tt,{Internal:tc}=Ze,GR=pt(Ne.Playbook,{sdkInput:true}),ib=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),sb=z.enum(["default","custom"]).meta({id:"DimensionCategory","x-revturbine-schema-persistence":rb,"x-revturbine-schema-exposure":tc}),ab=z.enum(["system","sdk_trait","sdk_trait_enum","cdp_property","manual_list"]).meta({id:"DimensionSourceType","x-revturbine-schema-persistence":rb,"x-revturbine-schema-exposure":tc}),vd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),name:Mt.meta($n),handle:ct.optional().meta($n),category:sb.default("custom").meta($n),visibility_toggle:z.boolean().default(true).meta($n),source_type:ab.default("system").meta($n),estimated_size:z.number().int().min(0).optional().meta($n)}).meta({id:"SegmentDimension","x-revturbine-schema-persistence":dp,"x-revturbine-schema-exposure":tc,...ib,...Tn()}),$R=dn("SegmentDimensionAnchor"),xd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),dimension_id:z.string().min(1).meta($n),name:Mt.meta($n),handle:ct.meta($n),description:ri.meta($n),definition_rule:z.record(z.string(),z.unknown()).optional().meta($n),used_in_count:z.number().int().min(0).default(0).meta({...$n,readOnly:true})}).meta({id:"SegmentValue","x-revturbine-schema-persistence":dp,"x-revturbine-schema-exposure":tc,...ib,...Tn()}),ZR=dn("SegmentValueAnchor");N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...$n,readOnly:true}),name:Mt.meta($n),handle:ct.meta($n),description:ri.meta($n),rules:z.record(z.string(),z.unknown()).default({}).meta($n),experiment_id:z.string().min(1).optional().meta($n),is_active:z.boolean().default(true).meta($n),estimated_size:z.number().int().min(0).nullable().default(null).meta($n),metadata:Tt.meta($n)}).meta({id:"Segment","x-revturbine-schema-persistence":dp,"x-revturbine-schema-exposure":tc,...GR,...Tn()});({"/api/segment-dimension-anchors":{get:_({operationId:"listSegmentDimensionAnchors",requestParams:{query:q},summary:"List segment dimension anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment dimension anchor list",content:{"application/json":{schema:B($R)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-dimension-anchors",persistence:{table:"segmentDimensions",mode:"list"}}})},"/api/segment-value-anchors":{get:_({operationId:"listSegmentValueAnchors",requestParams:{query:q},summary:"List segment value anchors (identity registry)",tags:["segments"],responses:{200:{description:"Segment value anchor list",content:{"application/json":{schema:B(ZR)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-value-anchors",persistence:{table:"segmentValues",mode:"list"}}})},"/api/segments":{get:_({operationId:"listSegmentDimensions",requestParams:{query:q},summary:"List segment dimensions",tags:["segments"],responses:{200:{description:"Dimension list",content:{"application/json":{schema:B(vd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"list"}}})},"/api/segments/custom":{post:_({operationId:"createCustomDimension",summary:"Create custom segment dimension",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),description:z.string().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:vd}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"create"}}})},"/api/segments/{dimensionId}":{delete:_({operationId:"deleteCustomDimension",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Delete custom dimension",tags:["segments"],responses:{204:{description:"Deleted"},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"delete"}}})},"/api/segments/{dimensionId}/visibility":{patch:_({operationId:"toggleDimensionVisibility",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Toggle dimension visibility",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({visible:z.boolean()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vd}}}},"x-revturbine-operation":{exposure:"internal",resource:"segments",persistence:{table:"segmentDimensionVersions",mode:"update"}}})},"/api/segments/{dimensionId}/values":{get:_({operationId:"listSegmentValues",requestParams:{path:z.object({dimensionId:z.string()}),query:q},summary:"List segment values for dimension",tags:["segments"],responses:{200:{description:"Value list",content:{"application/json":{schema:B(xd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"list"}}}),post:_({operationId:"createSegmentValue",requestParams:{path:z.object({dimensionId:z.string()})},summary:"Create segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string(),handle:z.string(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"create"}}})},"/api/segment-values/{valueId}":{patch:_({operationId:"updateSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Update segment value",tags:["segments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().optional(),definition_rule:z.record(z.string(),z.unknown()).optional()})}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"update"}}}),delete:_({operationId:"deleteSegmentValue",requestParams:{path:z.object({valueId:z.string()})},summary:"Delete segment value",tags:["segments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"segment-values",persistence:{table:"segmentValueVersions",mode:"delete"}}})}});var {Unrestricted:dt}=Me,{Persisted:To,Transient:ob}=tt,{External:Ns}=Ze,up=pt(Ne.Playbook,{sdkInput:true}),JR=pt(Ne.Playbook,{inConfig:false,sdkInput:false}),XR=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),QR=pt(Ne.Playbook,{inConfig:false,sdkInput:true,source:Gr.CodeConstant});N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true}),handle:ct.meta({...dt,readOnly:true}),name:Mt.meta(dt),channel:z.enum(["in_app","email","push","sms","webhook"]).meta(dt),subject:z.string().max(500).optional().meta(dt),body:z.string().meta(dt),template_variables:z.array(z.string()).default([]).meta(dt),metadata:Tt.meta(dt)}).meta({id:"Message","x-revturbine-schema-persistence":To,"x-revturbine-schema-exposure":Ns,...JR,...or()});var Sd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true}),name:Mt.meta(dt),handle:ct.meta(dt),action_type:bo.meta(dt),target_url:z.string().optional().meta(dt),target_plan_id:z.string().optional().meta(dt),config_fields:z.record(z.string(),z.unknown()).default({}).meta(dt),metadata:Tt.meta(dt)}).meta({id:"CtaPath","x-revturbine-schema-persistence":To,"x-revturbine-schema-exposure":Ns,...up,...Tn()}),tE=dn("CtaPathAnchor"),lb=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":To,"x-revturbine-schema-exposure":Ns,...QR}),cb=z.object({name:z.string().min(1),field_type:lb,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":To,"x-revturbine-schema-exposure":Ns,...XR}),Id=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true}),name:Mt.meta(dt),handle:ct.meta(dt),surface_type:Ym.meta(dt),field_definitions:z.array(cb).default([]).meta(dt),description:ri.meta(dt)}).meta({id:"SurfaceTemplate","x-revturbine-schema-persistence":To,"x-revturbine-schema-exposure":Ns,...up,...Tn()}),nE=dn("SurfaceTemplateAnchor"),Pd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...dt,readOnly:true}),name:Mt.meta(dt),handle:ct.meta(dt),content_fields:z.record(z.string(),z.unknown()).default({}).meta(dt),variation_dimension_id:z.string().optional().meta(dt),variation_values:z.array(z.object({segment_value_id:z.string(),content_fields_override:z.record(z.string(),z.unknown())})).optional().meta(dt),notes:z.string().max(1e3).optional().meta(dt),used_in_count:z.number().int().min(0).default(0).meta({...dt,readOnly:true})}).meta({id:"MessageBlockRecord","x-revturbine-schema-persistence":To,"x-revturbine-schema-exposure":Ns,...up,...Tn()}),rE=dn("MessageBlockRecordAnchor"),db=z.object({segment_id:z.string().min(1).meta(dt),message_block_id:z.string().min(1).meta(dt),ui_path_id:z.string().optional().meta(dt),promotion_id:z.string().optional().meta(dt)}).meta({id:"ContentPayloadSegmentEntry","x-revturbine-schema-persistence":ob,"x-revturbine-schema-exposure":Ns});z.object({payload_id:z.string().min(1).meta(dt),tenant_id:z.string().min(1).meta(dt),name:Mt.meta(dt),surface_template_id:z.string().min(1).meta(dt),default_message_block_id:z.string().min(1).meta(dt),segment_content_map:z.array(db).optional().meta(dt),ui_path_id:z.string().optional().meta(dt),promotion_id:z.string().optional().meta(dt),status:z.enum(["draft","active","inactive"]).meta(dt),created_at:z.string().datetime().optional().meta({...dt,readOnly:true}),updated_at:z.string().datetime().optional().meta({...dt,readOnly:true})}).meta({id:"ContentPlacementPayload","x-revturbine-schema-persistence":ob,"x-revturbine-schema-exposure":Ns});({"/api/surface-template-anchors":{get:_({operationId:"listSurfaceTemplateAnchors",requestParams:{query:q},summary:"List surface template anchors (identity registry)",tags:["content"],responses:{200:{description:"Surface template anchor list",content:{"application/json":{schema:B(nE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"surface-template-anchors",persistence:{table:"surfaceTemplates",mode:"list"}}})},"/api/surface-templates":{get:_({operationId:"listSurfaceTemplates",requestParams:{query:q},summary:"List surface templates",tags:["content"],responses:{200:{description:"Template list",content:{"application/json":{schema:B(Id)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-templates",persistence:{table:"surfaceTemplateVersions",mode:"list"}}})},"/api/message-block-record-anchors":{get:_({operationId:"listMessageBlockRecordAnchors",requestParams:{query:q},summary:"List message block anchors (identity registry)",tags:["content"],responses:{200:{description:"Message block anchor list",content:{"application/json":{schema:B(rE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"message-block-record-anchors",persistence:{table:"messageBlocks",mode:"list"}}})},"/api/messages":{get:_({operationId:"listMessageBlocks",requestParams:{query:q},summary:"List message blocks",tags:["content"],responses:{200:{description:"Message block list",content:{"application/json":{schema:B(Pd)}}}},"x-revturbine-operation":{exposure:"external",resource:"message-blocks",persistence:{table:"messageBlockVersions",mode:"list"}}})},"/api/cta-path-anchors":{get:_({operationId:"listCtaPathAnchors",requestParams:{query:q},summary:"List CTA path anchors (identity registry)",tags:["content"],responses:{200:{description:"CTA path anchor list",content:{"application/json":{schema:B(tE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"cta-path-anchors",persistence:{table:"ctaPaths",mode:"list"}}})},"/api/cta-paths":{get:_({operationId:"listCtaPaths",requestParams:{query:q},summary:"List CTA paths",tags:["content"],responses:{200:{description:"CTA path list",content:{"application/json":{schema:B(Sd)}}}},"x-revturbine-operation":{exposure:"external",resource:"cta-paths",persistence:{table:"ctaPathVersions",mode:"list"}}})}});var {Unrestricted:Co,Pii:aE}=Me,{Persisted:ub}=tt,{Internal:oE,External:lE}=Ze,cE=pt(Ne.Branding,{sdkInput:false});z.object({id:z.string().min(1).meta({...Co,readOnly:true}),name:z.string().min(1).max(120).meta(Co),mode:z.enum(["light","dark","system"]).default("system").meta(Co),tokens:z.record(z.string(),z.string()).default({}).meta(Co)}).meta({id:"Theme","x-revturbine-schema-persistence":ub,"x-revturbine-schema-exposure":lE,...cE});var mp=N.merge(J).extend({user_id:z.string().min(1).meta(aE),scope:z.string().min(1).meta(Co),preferences:z.record(z.string(),z.unknown()).default({}).meta(Co)}).meta({id:"UiPreference","x-revturbine-schema-persistence":ub,"x-revturbine-schema-exposure":oE});({"/api/ui-preferences":{get:_({operationId:"listUiPreferences",requestParams:{query:q},summary:"List UI preferences",tags:["ui"],responses:{200:{description:"UI preferences list response",content:{"application/json":{schema:B(mp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"ui-preferences",persistence:{table:"uiPreferences",mode:"list"}}}),put:_({operationId:"upsertUiPreferences",summary:"Upsert UI preferences",tags:["ui"],requestBody:{required:true,content:{"application/json":{schema:z.array(Mn(mp))}}},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:_t,Financial:Ji}=Me,{Persisted:mb,Transient:nc}=tt,{External:rc,Internal:pb}=Ze,fb=z.object({month:z.string().meta(_t),cohort_size:z.number().int().min(0).meta(_t),retained:z.number().int().min(0).meta(_t),retention_rate:z.number().min(0).max(1).meta(_t),revenue_cents:z.number().int().min(0).meta(Ji)}).meta({id:"CohortMonth","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":rc}),hb=z.object({step:z.string().meta(_t),label:z.string().meta(_t),count:z.number().int().min(0).meta(_t),conversion_rate:z.number().min(0).max(1).meta(_t),drop_off_rate:z.number().min(0).max(1).meta(_t)}).meta({id:"FunnelStep","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":rc}),gb=z.object({placement_id:z.string().meta(_t),placement_name:z.string().meta(_t),impressions:z.number().int().min(0).meta(_t),clicks:z.number().int().min(0).meta(_t),conversions:z.number().int().min(0).meta(_t),ctr:z.number().min(0).meta(_t),conversion_rate:z.number().min(0).meta(_t),revenue_cents:z.number().int().min(0).meta(Ji)}).meta({id:"PlacementPerformanceRow","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":rc}),_b=z.object({date:z.string().meta(_t),mrr_cents:z.number().int().min(0).meta(Ji),arr_cents:z.number().int().min(0).meta(Ji),new_mrr_cents:z.number().int().min(0).meta(Ji),churned_mrr_cents:z.number().int().min(0).meta(Ji),expansion_mrr_cents:z.number().int().min(0).meta(Ji),net_new_mrr_cents:z.number().int().meta(Ji)}).meta({id:"RevenueMetric","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":rc}),bb=z.object({metric_key:z.string().min(1).meta(_t),label:z.string().meta(_t),current_value:z.number().meta(Ji),previous_value:z.number().nullable().default(null).meta(Ji),change_percent:z.number().nullable().default(null).meta(_t),period:z.string().meta(_t),unit:z.enum(["count","cents","percent","ratio","seconds"]).default("count").meta(_t)}).meta({id:"KpiAggregate","x-revturbine-schema-persistence":nc,"x-revturbine-schema-exposure":rc}),pp=N.merge(J).merge(ie).extend({report_type:z.enum(["plan_drift","entitlement_drift","usage_anomaly","revenue_anomaly"]).meta(_t),severity:_o.meta(_t),resource_type:z.string().min(1).meta(_t),resource_id:z.string().min(1).meta(_t),summary:z.string().max(1e3).meta(_t),expected_value:z.unknown().optional().meta(_t),actual_value:z.unknown().optional().meta(_t),affected_customer_count:z.number().int().min(0).default(0).meta(_t),is_resolved:z.boolean().default(false).meta(_t),resolved_at:Nt.meta(_t),metadata:Tt.meta(_t)}).meta({id:"DriftReport","x-revturbine-schema-persistence":mb,"x-revturbine-schema-exposure":pb}),fp=N.merge(J).merge(ie).extend({alert_type:z.enum(["usage_threshold","revenue_drop","conversion_drop","experiment_significance","drift_detected","custom"]).meta(_t),severity:_o.meta(_t),title:z.string().min(1).max(300).meta(_t),description:z.string().max(2e3).meta(_t),resource_type:z.string().optional().meta(_t),resource_id:z.string().optional().meta(_t),is_acknowledged:z.boolean().default(false).meta(_t),acknowledged_at:Nt.meta(_t),acknowledged_by:z.string().nullable().default(null).meta(_t),metadata:Tt.meta(_t)}).meta({id:"Alert","x-revturbine-schema-persistence":mb,"x-revturbine-schema-exposure":pb});({"/api/analytics/kpis":{get:_({operationId:"listKpiAggregates",requestParams:{query:q},summary:"List KPI aggregate metrics",tags:["analytics"],responses:{200:{description:"KPI list",content:{"application/json":{schema:B(bb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"kpiAggregates",mode:"list"}}})},"/api/analytics/placement-performance":{get:_({operationId:"listPlacementPerformance",requestParams:{query:q},summary:"List placement performance rows",tags:["analytics"],responses:{200:{description:"Performance rows",content:{"application/json":{schema:B(gb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"placementPerformance",mode:"list"}}})},"/api/analytics/revenue":{get:_({operationId:"listRevenueMetrics",requestParams:{query:q},summary:"List revenue metrics over time",tags:["analytics"],responses:{200:{description:"Revenue metrics",content:{"application/json":{schema:B(_b)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"revenueMetrics",mode:"list"}}})},"/api/analytics/cohorts":{get:_({operationId:"listCohortMetrics",requestParams:{query:q},summary:"List cohort retention metrics",tags:["analytics"],responses:{200:{description:"Cohort metrics",content:{"application/json":{schema:B(fb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"cohortMetrics",mode:"list"}}})},"/api/analytics/funnels":{get:_({operationId:"listFunnelSteps",requestParams:{query:q},summary:"List funnel step metrics",tags:["analytics"],responses:{200:{description:"Funnel steps",content:{"application/json":{schema:B(hb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"funnelSteps",mode:"list"}}})},"/api/analytics/drift-reports":{get:_({operationId:"listDriftReports",requestParams:{query:q},summary:"List drift reports",tags:["analytics"],responses:{200:{description:"Drift reports",content:{"application/json":{schema:B(pp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"list"}}})},"/api/analytics/drift-reports/{reportId}/resolve":{post:_({operationId:"resolveDriftReport",requestParams:{path:z.object({reportId:z.string()})},summary:"Mark a drift report as resolved",tags:["analytics"],responses:{200:{description:"Resolved",content:{"application/json":{schema:pp}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"driftReports",mode:"update"}}})},"/api/analytics/alerts":{get:_({operationId:"listAlerts",requestParams:{query:q},summary:"List alerts",tags:["analytics"],responses:{200:{description:"Alert list",content:{"application/json":{schema:B(fp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"list"}}})},"/api/analytics/alerts/{alertId}/acknowledge":{post:_({operationId:"acknowledgeAlert",requestParams:{path:z.object({alertId:z.string()})},summary:"Acknowledge an alert",tags:["analytics"],responses:{200:{description:"Acknowledged",content:{"application/json":{schema:fp}}}},"x-revturbine-operation":{exposure:"internal",resource:"analytics",persistence:{table:"alerts",mode:"update"}}})}});var {Unrestricted:A,Pii:ko}=Me,{Persisted:yb,Transient:Vn}=tt,{Internal:Hs,External:pr}=Ze,gp=z.enum(["clickstream","telemetry","sdk","workflow","system"]).meta({id:"EventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr}),vb=N.extend({event_type:z.string().min(1).meta(A),source:gp.default("sdk").meta(A),tenant_id:z.string().min(1).optional().meta(A),user_id:z.string().min(1).optional().meta(ko),session_id:z.string().min(1).optional().meta(ko),occurred_at:z.string().datetime().meta(A),request_id:z.string().min(1).meta(A),attributes:z.record(z.string(),z.unknown()).default({}).meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"EventEnvelope","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs}),xb=vb.extend({ingested_at:z.string().datetime().meta(A)}).meta({id:"IngestedEvent","x-revturbine-schema-persistence":yb,"x-revturbine-schema-exposure":Hs});z.array(z.object({id:z.string().min(1).optional().meta(A),event_type:z.string().min(1).meta(A),occurred_at:z.string().datetime().optional().meta(A),tenant_id:z.string().min(1).optional().meta(A),user_id:z.string().min(1).optional().meta(ko),session_id:z.string().min(1).optional().meta(ko),attributes:z.record(z.string(),z.unknown()).optional().meta(A),payload:z.record(z.string(),z.unknown()).optional().meta(A),message:z.string().optional().meta(A),level:z.string().optional().meta(A),path:z.string().optional().meta(A)})).meta({id:"EventIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs});var Sb=z.enum(["impression","dismiss","remind_me_later","cta_clicked","cta_completed","suppress"]).meta({id:"TreatmentInteractionType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({user_id:z.string().min(1).meta(ko),placement_id:z.string().min(1).meta(A),treatment_id:z.string().min(1).optional().meta(A),surface_slot_id:z.string().min(1).optional().meta(A),surface_template_id:z.string().min(1).optional().meta(A),payload_id:z.string().min(1).optional().meta(A),interaction_type:Sb.meta(A),interaction_at:z.string().datetime().optional().meta(A),message_block_handle:z.string().min(1).optional().meta(A),message_block_id:z.string().min(1).optional().meta(A),experiment_id:z.string().min(1).optional().meta(A),variant_key:z.string().min(1).optional().meta(A),test:z.boolean().optional().meta(A),metadata:z.record(z.string(),z.unknown()).optional().meta(A)}).meta({id:"TreatmentInteractionInput","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});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":pr});z.object({days_remaining:z.number().int().min(0).optional().meta(A)}).meta({id:"TrialTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({entitlement_handle:z.string().optional().meta(A),current_usage:z.number().min(0).optional().meta(A),usage_limit:z.number().min(0).optional().meta(A),usage_percent:z.number().min(0).max(100).optional().meta(A),threshold:z.number().min(0).optional().meta(A),balance:z.number().min(0).optional().meta(A),allocation:z.number().min(0).optional().meta(A),seats_used:z.number().int().min(0).optional().meta(A),seats_allowed:z.number().int().min(0).optional().meta(A)}).meta({id:"UsageTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({feature:z.string().min(1).meta(A)}).meta({id:"FeatureGateTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({retry_count:z.number().int().min(0).optional().meta(A),renewal_date:z.string().optional().meta(A)}).meta({id:"PaymentTriggerPayload","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({event_type:z.string().min(1).meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"SemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});var Pb=z.enum(["system","workflow"]).meta({id:"ControlPlaneEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr}),Tb=z.enum(["web_signed_up","web_signed_in","cli_signed_up","cli_signed_in","cli_command_executed","changeset_submitted","changeset_approved","changeset_rejected","changeset_deployed","changeset_launched","changeset_parked","changeset_resumed","changeset_discarded","changeset_archived","config_imported","config_exported","entity_created","entity_updated","entity_deleted","web_api_error"]).meta({id:"ControlPlaneEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({event_type:Tb.meta(A),source:Pb.meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A)}).meta({id:"ControlPlaneSemanticEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({q:z.string().optional().meta(A),source:gp.optional().meta(A),event_type:z.string().optional().meta(A),from:z.string().datetime().optional().meta(A),to:z.string().datetime().optional().meta(A),page:z.coerce.number().int().min(1).default(1).meta(A),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(A)}).meta({id:"EventSearchParams","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs});var Cb=z.enum(["stripe","apple","google"]).meta({id:"WebhookEventSource","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs}),kb=z.enum(["processed","failed","skipped"]).meta({id:"WebhookEventStatus","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs}),Td=N.merge(J).merge(ie).extend({event_id:z.string().min(1).meta(A),event_type:z.string().min(1).meta(A),source:Cb.meta(A),payload:z.record(z.string(),z.unknown()).default({}).meta(A),status:kb.default("processed").meta(A),processed_at:z.string().datetime().optional().meta(A),error_message:z.string().optional().meta(A)}).meta({id:"WebhookEventLog","x-revturbine-schema-persistence":yb,"x-revturbine-schema-exposure":Hs});z.object({accepted:z.number().int().min(0).meta(A)}).meta({id:"null","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":Hs});var SE=500,IE=z.enum(["explicit","automatic","derived","raw"]).meta({id:"EventOrigin","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr}),Rb=z.object({environment_id:z.string().min(1).meta(A),user_id:z.string().min(1).meta(ko),account_id:z.string().min(1).meta(A),event_name:z.string().min(1).max(120).meta(A),event_ts:z.string().datetime().meta(A),properties:z.string().optional().meta(A),surface_slot_id:z.string().nullable().optional().meta(A),placement_id:z.string().nullable().optional().meta(A),payload_id:z.string().nullable().optional().meta(A),request_id:z.string().optional().meta(A),experiment_id:z.string().nullable().optional().meta(A),variant_key:z.string().nullable().optional().meta(A),tenant_id:z.string().optional().meta(A),event_id:z.string().nullable().optional().meta(A),origin:IE.nullable().optional().meta(A),playbook_version:z.string().nullable().optional().meta(A),decision_id:z.string().nullable().optional().meta(A),test:z.boolean().optional().meta(A)}).meta({id:"TrackEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({events:z.array(Rb).min(1).max(SE).meta(A)}).meta({id:"TrackIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});var PE=10,wb=z.enum(["sdk_init","sdk_error","sdk_validation_warning","resolution_failure"]).meta({id:"SdkMetaEventType","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr}),Ab=z.object({plans:z.number().int().min(0).meta(A),entitlements:z.number().int().min(0).meta(A),entitlement_rules:z.number().int().min(0).meta(A),segments:z.number().int().min(0).meta(A),placements:z.number().int().min(0).meta(A),placement_payloads:z.number().int().min(0).meta(A),content_ui_paths:z.number().int().min(0).meta(A),surface_templates:z.number().int().min(0).meta(A)}).meta({id:"SdkConfigShape","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr}),Ob=z.object({event_type:wb.meta(A),occurred_at:z.string().datetime().meta(A),request_id:z.string().min(1).optional().meta(A),config_hash_id:z.string().min(1).max(64).optional().meta(A),sdk_version:z.string().min(1).max(64).optional().meta(A),runtime_mode:z.string().min(1).max(64).optional().meta(A),schema_version:z.string().min(1).max(64).optional().meta(A),bundle_version:z.string().min(1).max(64).optional().meta(A),config_shape:Ab.optional().meta(A),message:z.string().max(500).optional().meta(A),reason:z.string().min(1).max(64).optional().meta(A),placement_handle:z.string().min(1).max(64).optional().meta(A),slot_handle:z.string().min(1).max(64).optional().meta(A),surface:z.string().min(1).max(64).optional().meta(A),plan_handle:z.string().min(1).max(64).optional().meta(A),entitlement_handle:z.string().min(1).max(64).optional().meta(A)}).meta({id:"SdkMetaEvent","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});z.object({events:z.array(Ob).min(1).max(PE).meta(A)}).meta({id:"SdkMetaIngestBatch","x-revturbine-schema-persistence":Vn,"x-revturbine-schema-exposure":pr});({"/api/events/search":{get:_({operationId:"searchEvents",summary:"Search ingested events",tags:["events"],responses:{200:{description:"Paginated event results",content:{"application/json":{schema:$m(xb)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"events"}})},"/api/webhook-events":{get:_({operationId:"listWebhookEvents",requestParams:{query:q},summary:"List webhook event log entries",tags:["events"],responses:{200:{description:"Webhook event list",content:{"application/json":{schema:B(Td)}}}},"x-revturbine-operation":{exposure:"internal",resource:"webhook-events",persistence:{table:"webhookEventLog",mode:"list"}}})}});var {Unrestricted:Ye}=Me,{Persisted:sc,Transient:ac}=tt,{Internal:Xi}=Ze,Fb=pt(Ne.Playbook,{sdkInput:true}),Lb=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),Vb=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Xi}),_p=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Xi}),bp=z.object({name:Mt.meta(Ye),handle:ct.meta(Ye),plan_id:z.string().nullable().optional().meta(Ye),segment_id:z.string().nullable().optional().meta(Ye),trial_limit_type:_p.default("time").meta(Ye),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ye),grace_period_days:z.number().int().min(0).default(0).meta(Ye),usage_entitlement_handle:z.string().min(1).optional().meta(Ye),usage_limit_value:z.number().int().min(1).optional().meta(Ye),require_payment_method:z.boolean().default(false).meta(Ye),auto_convert:z.boolean().default(true).meta(Ye),convert_to_plan_id:z.string().optional().meta(Ye),fallback_plan_id:z.string().optional().meta(Ye),limit_per_customer:z.number().int().min(1).default(1).meta(Ye),is_active:z.boolean().default(true).meta(Ye),metadata:Tt.meta(Ye)}),fa=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Ye,readOnly:true})}).merge(bp).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":Xi,...Fb,...Tn()}),CE=dn("FreeTrialRuleAnchor"),Ub=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Xi}),yp=z.object({name:Mt.meta(Ye),handle:ct.meta(Ye),premium_plan_id:z.string().min(1).meta(Ye),fallback_plan_id:z.string().min(1).meta(Ye),segment_id:z.string().nullable().optional().meta(Ye),trial_limit_type:_p.default("time").meta(Ye),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(Ye),usage_entitlement_handle:z.string().min(1).optional().meta(Ye),usage_limit_value:z.number().int().min(1).optional().meta(Ye),start_policy:Ub.default("signup").meta(Ye),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(Ye),entitlements_during_trial:z.array(z.string()).default([]).meta(Ye),is_active:z.boolean().default(true).meta(Ye),metadata:Tt.meta(Ye)}),ha=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...Ye,readOnly:true})}).merge(yp).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":Xi,...Fb,...Tn()}),kE=dn("ReverseTrialRuleAnchor"),vp=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Xi}),xp=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":ac,"x-revturbine-schema-exposure":Xi}),ga=N.merge(J).merge(ie).extend({trial_limit_policy:vp.default("1_per_lifetime").meta(Ye),eligibility_scope:xp.default("per_customer").meta(Ye)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":Xi,...Lb}),_a=N.merge(J).merge(ie).extend({trial_limit_policy:vp.default("1_per_lifetime").meta(Ye),eligibility_scope:xp.default("per_customer").meta(Ye)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":Xi,...Lb}),ic=N.merge(J).merge(ie).extend({customer_id:z.string().min(1).meta(Ye),rule_id:z.string().min(1).meta(Ye),rule_type:z.enum(["free_trial","reverse_trial"]).meta(Ye),plan_id:z.string().min(1).meta(Ye),status:Vb.default("active").meta(Ye),started_at:z.string().datetime().meta({...Ye,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(Ye),trial_limit_type:_p.default("time").meta(Ye),usage_entitlement_handle:z.string().min(1).optional().meta(Ye),usage_limit_value:z.number().int().min(1).optional().meta(Ye),converted_at:Nt.meta(Ye),cancelled_at:Nt.meta(Ye),metadata:Tt.meta(Ye)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":sc,"x-revturbine-schema-exposure":Xi});({"/api/free-trial-rule-anchors":{get:_({operationId:"listFreeTrialRuleAnchors",requestParams:{query:q},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:B(CE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:_({operationId:"listFreeTrialRules",requestParams:{query:q},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:B(fa)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:_({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:fa.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:fa}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete free trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"delete"}}})},"/api/reverse-trial-rule-anchors":{get:_({operationId:"listReverseTrialRuleAnchors",requestParams:{query:q},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:B(kE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:_({operationId:"listReverseTrialRules",requestParams:{query:q},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:B(ha)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:_({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:ha}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:_({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ha.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ha}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:_({operationId:"deleteReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Delete reverse trial rule",tags:["trials"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"delete"}}})},"/api/trials/free-settings":{get:_({operationId:"listFreeTrialSettings",requestParams:{query:q},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:B(ga)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:_({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:ga}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:_({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:ga.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ga}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:_({operationId:"listReverseTrialSettings",requestParams:{query:q},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:B(_a)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:_({operationId:"getReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get reverse trial settings",tags:["trials"],responses:{200:{description:"Reverse trial settings",content:{"application/json":{schema:_a}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:_({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:_a.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_a}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:_({operationId:"listTrialInstances",requestParams:{query:q},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:B(ic)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:_({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:_({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:_({operationId:"convertTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Convert trial to paid subscription",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:z.object({plan_id:z.string().optional()})}}},responses:{200:{description:"Converted",content:{"application/json":{schema:ic}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:xn}=Me,{Persisted:Ip,Transient:Bb}=tt,{Internal:oc}=Ze,qb=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),Db=z.enum(["draft","ramping","winning","neutral","needs_attention","paused","complete"]).meta({id:"ExperimentStatus","x-revturbine-schema-persistence":Bb,"x-revturbine-schema-exposure":oc}),Mb=z.enum(["placement_ab","entitlement_ab","plan_ab","pricing_ab","custom"]).meta({id:"ExperimentType","x-revturbine-schema-persistence":Bb,"x-revturbine-schema-exposure":oc}),Nb=z.object({variant_id:z.string().min(1),name:Mt,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":Ip,"x-revturbine-schema-exposure":oc,...qb}),Qi=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...xn,readOnly:true}),name:Mt.meta(xn),handle:ct.meta(xn),description:z.string().max(1e3).optional().meta(xn),experiment_type:Mb.meta(xn),status:Db.default("draft").meta(xn),target_resource_id:z.string().optional().meta(xn),target_segment_ids:z.array(z.string()).default([]).meta(xn),variants:z.array(Nb).min(2).meta(xn),primary_metric:z.string().min(1).meta(xn),metric_threshold:z.number().default(.05).meta(xn),secondary_metrics:z.array(z.string()).default([]).meta(xn),traffic_allocation:z.number().min(0).max(1).default(1).meta(xn),started_at:Nt.meta(xn),ended_at:Nt.meta(xn),confidence_threshold:z.number().min(0).max(1).default(.95).meta(xn),winning_variant_id:z.string().nullable().default(null).meta(xn),metadata:Tt.meta(xn)}).meta({id:"Experiment","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":oc,...qb,...Tn()}),EE=dn("ExperimentAnchor"),Hb=_o,Sp=N.merge(J).merge(ie).extend({experiment_id:z.string().optional().meta(xn),resource_type:z.string().min(1).meta(xn),resource_id:z.string().min(1).meta(xn),severity:Hb.default("info").meta(xn),title:z.string().min(1).max(300).meta(xn),description:z.string().max(2e3).meta(xn),suggested_action:z.string().max(1e3).optional().meta(xn),estimated_impact:z.number().optional().meta(xn),is_dismissed:z.boolean().default(false).meta(xn),metadata:Tt.meta(xn)}).meta({id:"OptimizationSuggestion","x-revturbine-schema-persistence":Ip,"x-revturbine-schema-exposure":oc});({"/api/experiment-anchors":{get:_({operationId:"listExperimentAnchors",requestParams:{query:q},summary:"List experiment anchors (identity registry)",tags:["experiments"],responses:{200:{description:"Experiment anchor list",content:{"application/json":{schema:B(EE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiment-anchors",persistence:{table:"experiments",mode:"list"}}})},"/api/experiments":{get:_({operationId:"listExperiments",requestParams:{query:q},summary:"List experiments",tags:["experiments"],responses:{200:{description:"Experiment list",content:{"application/json":{schema:B(Qi)}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"list"}}})},"/api/experiments/{experimentId}":{get:_({operationId:"getExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Get experiment",tags:["experiments"],responses:{200:{description:"Experiment",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"get"}}}),patch:_({operationId:"updateExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Update experiment",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:Qi.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}}),delete:_({operationId:"deleteExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Delete experiment",tags:["experiments"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"delete"}}})},"/api/experiments/{experimentId}/start":{post:_({operationId:"startExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Start experiment (begin traffic allocation)",tags:["experiments"],responses:{200:{description:"Started",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/pause":{post:_({operationId:"pauseExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Pause running experiment",tags:["experiments"],responses:{200:{description:"Paused",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/experiments/{experimentId}/complete":{post:_({operationId:"completeExperiment",requestParams:{path:z.object({experimentId:z.string()})},summary:"Complete experiment and declare winner",tags:["experiments"],requestBody:{required:true,content:{"application/json":{schema:z.object({winning_variant_id:z.string()})}}},responses:{200:{description:"Completed",content:{"application/json":{schema:Qi}}}},"x-revturbine-operation":{exposure:"internal",resource:"experiments",persistence:{table:"experimentVersions",mode:"update"}}})},"/api/optimization-suggestions":{get:_({operationId:"listOptimizationSuggestions",requestParams:{query:q},summary:"List optimization suggestions",tags:["experiments"],responses:{200:{description:"Suggestion list",content:{"application/json":{schema:B(Sp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"list"}}})},"/api/optimization-suggestions/{suggestionId}/dismiss":{post:_({operationId:"dismissOptimizationSuggestion",requestParams:{path:z.object({suggestionId:z.string()})},summary:"Dismiss an optimization suggestion",tags:["experiments"],responses:{200:{description:"Dismissed",content:{"application/json":{schema:Sp}}}},"x-revturbine-operation":{exposure:"internal",resource:"optimization-suggestions",persistence:{table:"optimizationSuggestions",mode:"update"}}})}});var {Unrestricted:_r,Financial:zb}=Me,{Persisted:AE,Transient:Kb}=tt,{Internal:Pp}=Ze,OE=pt(Ne.Playbook,{sdkInput:true}),Gb=z.enum(["draft","scheduled","live","expired","archived"]).meta({id:"PromotionStatus","x-revturbine-schema-persistence":Kb,"x-revturbine-schema-exposure":Pp}),$b=z.enum(["percentage","fixed_amount","free_months"]).meta({id:"DiscountType","x-revturbine-schema-persistence":Kb,"x-revturbine-schema-exposure":Pp}),bs=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({..._r,readOnly:true}),name:Mt.meta(_r),handle:ct.meta(_r),description:z.string().max(1e3).optional().meta(_r),rt_status:Gb.default("draft").meta(_r),discount_type:$b.meta(_r),discount_value:z.number().min(0).meta(zb),currency:z.string().length(3).default("USD").meta(zb),applicable_plan_ids:z.array(z.string()).default([]).meta(_r),applicable_addon_ids:z.array(z.string()).default([]).meta(_r),target_segment_ids:z.array(z.string()).default([]).meta(_r),max_redemptions:z.number().int().min(0).nullable().default(null).meta(_r),current_redemptions:z.number().int().min(0).default(0).meta({..._r,readOnly:true}),coupon_code:z.string().max(100).optional().meta(_r),starts_at:Nt.meta(_r),ends_at:Nt.meta(_r),stripe_coupon_id:z.string().nullable().default(null).meta(_r),stripe_promotion_code_id:z.string().nullable().default(null).meta(_r),auto_sync_stripe:z.boolean().default(false).meta(_r),metadata:Tt.meta(_r)}).meta({id:"Promotion","x-revturbine-schema-persistence":AE,"x-revturbine-schema-exposure":Pp,...OE,...Tn()}),jE=dn("PromotionAnchor");({"/api/promotion-anchors":{get:_({operationId:"listPromotionAnchors",requestParams:{query:q},summary:"List promotion anchors (identity registry)",tags:["promotions"],responses:{200:{description:"Promotion anchor list",content:{"application/json":{schema:B(jE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotion-anchors",persistence:{table:"promotions",mode:"list"}}})},"/api/promotions":{get:_({operationId:"listPromotions",requestParams:{query:q},summary:"List promotions",tags:["promotions"],responses:{200:{description:"Promotion list",content:{"application/json":{schema:B(bs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"list"}}})},"/api/promotions/{promotionId}":{get:_({operationId:"getPromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Get promotion",tags:["promotions"],responses:{200:{description:"Promotion",content:{"application/json":{schema:bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"get"}}}),patch:_({operationId:"updatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Update promotion",tags:["promotions"],requestBody:{required:true,content:{"application/json":{schema:bs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}}),delete:_({operationId:"deletePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Delete (archive) promotion",tags:["promotions"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"delete"}}})},"/api/promotions/{promotionId}/sync-stripe":{post:_({operationId:"syncPromotionToStripe",requestParams:{path:z.object({promotionId:z.string()})},summary:"Sync promotion to Stripe as coupon/promotion code",tags:["promotions"],responses:{200:{description:"Synced",content:{"application/json":{schema:bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"update"}}})},"/api/promotions/{promotionId}/duplicate":{post:_({operationId:"duplicatePromotion",requestParams:{path:z.object({promotionId:z.string()})},summary:"Duplicate promotion",tags:["promotions"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:bs}}}},"x-revturbine-operation":{exposure:"internal",resource:"promotions",persistence:{table:"promotionVersions",mode:"create"}}})}});var {Unrestricted:wn,Pii:Tp}=Me,{Persisted:Cp}=tt,{Internal:kp}=Ze,Zb=N.merge(J).merge(ie).extend({customer_id:z.string().min(1).meta(Tp),placement_id:z.string().min(1).meta(wn),payload_id:z.string().nullable().default(null).meta(wn),variant_id:z.string().nullable().default(null).meta(wn),surface_type:z.string().meta(wn),presented_at:z.string().datetime().meta({...wn,readOnly:true}),dismissed_at:Nt.meta(wn),cta_clicked_at:Nt.meta(wn),cta_action_type:z.string().nullable().default(null).meta(wn),converted:z.boolean().default(false).meta(wn),session_id:z.string().optional().meta(wn),metadata:Tt.meta(wn)}).meta({id:"PresentationRecord","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":kp}),Yb=N.merge(J).merge(ie).extend({customer_id:z.string().min(1).meta(Tp),placement_id:z.string().min(1).meta(wn),decision:z.enum(["show","suppress","defer"]).meta(wn),reason:z.string().max(500).meta(wn),matched_rules:z.array(z.object({rule_id:z.string(),rule_type:z.string(),matched:z.boolean()})).default([]).meta(wn),experiment_id:z.string().nullable().default(null).meta(wn),variant_id:z.string().nullable().default(null).meta(wn),latency_ms:z.number().min(0).optional().meta(wn)}).meta({id:"DecisionLog","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":kp}),Wb=N.merge(J).merge(ie).extend({customer_id:z.string().min(1).meta(Tp),entitlement_handle:z.string().min(1).meta(wn),entitlement_type:z.string().meta(wn),result:z.enum(["granted","denied","limited","metered"]).meta(wn),current_usage:z.number().nullable().default(null).meta(wn),limit:z.number().nullable().default(null).meta(wn),source:z.enum(["plan","addon","override","trial"]).meta(wn),source_id:z.string().min(1).meta(wn),latency_ms:z.number().min(0).optional().meta(wn)}).meta({id:"EntitlementEvalLog","x-revturbine-schema-persistence":Cp,"x-revturbine-schema-exposure":kp});({"/api/presentation-records":{get:_({operationId:"listPresentationRecords",requestParams:{query:q},summary:"List presentation records",tags:["runtime"],responses:{200:{description:"Presentation records",content:{"application/json":{schema:B(Zb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"presentation-records",persistence:{table:"presentationRecords",mode:"list"}}})},"/api/decision-logs":{get:_({operationId:"listDecisionLogs",requestParams:{query:q},summary:"List decision logs",tags:["runtime"],responses:{200:{description:"Decision logs",content:{"application/json":{schema:B(Yb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"decision-logs",persistence:{table:"decisionLogs",mode:"list"}}})},"/api/entitlement-eval-logs":{get:_({operationId:"listEntitlementEvalLogs",requestParams:{query:q},summary:"List entitlement evaluation logs",tags:["runtime"],responses:{200:{description:"Entitlement eval logs",content:{"application/json":{schema:B(Wb)}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-eval-logs",persistence:{table:"entitlementEvalLogs",mode:"list"}}})}});var {Unrestricted:f}=Me,{Persisted:Fo,Transient:Qe}=tt,{Internal:vi,External:kt}=Ze,bt=pt(Ne.Playbook,{sdkInput:true}),Eo=pt(Ne.Playbook,{sdkInput:false}),zs=pt(Ne.Playbook,{inConfig:false,sdkInput:false}),Jb=pt(Ne.Playbook,{inConfig:false,sdkInput:true}),Ro=pt(Ne.Playbook,{inConfig:false,sdkInput:true,source:Gr.CodeConstant}),Rp=pt(Ne.Playbook,{inConfig:false,sdkInput:true,source:Gr.Runtime}),Ep=pt(Ne.Playbook,{inConfig:false,sdkInput:false,source:Gr.Runtime}),VE=pt(Ne.Billing,{sdkInput:false}),UE=pt(Ne.Metering,{sdkInput:false}),BE=pt(Ne.Branding,{inConfig:true,sdkInput:true}),qE=pt(Ne.Branding,{sdkInput:false}),Xb="1.0.0",wo=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),name:Mt.meta(f),handle:ct.meta(f),description:ri.meta(f),is_default:z.boolean().default(false).meta(f),entitlement_ids:z.array(z.string()).default([]).meta(f),metadata:Tt.meta(f)}).meta({id:"SeatType","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...zs,...Tn()}),DE=dn("SeatTypeAnchor"),Ao=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:ct.meta(f),label:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().nullable().default(null).meta(f),example_value:z.string().nullable().default(null).meta(f),value_map:z.record(z.string(),z.string()).default({}).meta(f),format:z.enum(["string","number","currency","percentage","date"]).nullable().default(null).meta(f),metadata:Tt.meta(f)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...zs,...Tn()}),ME=dn("PersonalizationTokenAnchor"),Qb=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),Cd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({handle:ct.meta({...f,readOnly:true}),stripe_account_id:z.string().min(1).meta(f),live_mode:z.boolean().default(false).meta(f),onboarding_state:Qb.default("not_started").meta({...f,readOnly:true}),onboarding_complete:z.boolean().default(false).meta({...f,readOnly:true}),charges_enabled:z.boolean().default(false).meta({...f,readOnly:true}),details_submitted:z.boolean().default(false).meta({...f,readOnly:true}),payouts_enabled:z.boolean().default(false).meta({...f,readOnly:true}),webhook_secret_set:z.boolean().default(false).meta({...f,readOnly:true}),sync_products:z.boolean().default(true).meta(f),sync_prices:z.boolean().default(true).meta(f),sync_subscriptions:z.boolean().default(true).meta(f),sync_invoices:z.boolean().default(false).meta(f),default_currency:z.string().length(3).default("USD").meta(f),tax_behavior:z.enum(["inclusive","exclusive","unspecified"]).default("unspecified").meta(f),last_sync_at:z.string().optional().meta({...f,readOnly:true}),metadata:Tt.meta(f)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...VE,...or()});z.object({theme:z.record(z.string(),z.unknown()).optional().meta(f),workspace_name:z.string().optional().meta(f),logo_url:z.string().optional().meta(f),support_email:z.string().optional().meta(f)}).meta({id:"BrandingConfig","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...qE});var Oo=N.merge(J).merge(ie).merge(Ct).merge(At).extend({handle:ct.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),meter_key:z.string().min(1).max(100).meta(f),aggregation_type:z.enum(["sum","count","max","last_value"]).default("sum").meta(f),reset_period:z.enum(["none","daily","weekly","monthly","yearly"]).default("monthly").meta(f),stripe_meter_id:z.string().nullable().default(null).meta(f),is_active:z.boolean().default(true).meta(f),metadata:Tt.meta(f)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...UE,...or()}),wp=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),jo=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:ct.meta({...f,readOnly:true}),entitlement_id:z.string().min(1).meta(f),soft_limit_percent:z.number().min(0).max(100).default(80).meta(f),hard_limit_percent:z.number().min(0).max(100).default(100).meta(f),soft_limit_action:wp.default("warn").meta(f),hard_limit_action:wp.default("block").meta(f),grace_period_hours:z.number().int().min(0).default(0).meta(f),notification_channels:z.array(z.enum(["email","in_app","webhook"])).default(["in_app"]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"UsageEnforcementSettings","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...Jb,...or()}),HE=dn("UsageEnforcementSettingsAnchor"),ey=z.object({kind:z.enum(["template","slot"]).meta(f),id:z.string().min(1).meta(f),label:z.string().min(1).optional().meta(f)}).meta({id:"PlacementSettingsCapRuleGroupItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),ty=z.object({id:z.string().min(1).meta(f),group:z.array(ey).min(1).meta(f),cap:z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month"]).meta(f)}).meta(f)}).meta({id:"PlacementSettingsCapRule","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),ny=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),Op=z.object({capRules:z.array(ty).default([]).meta(f),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(f),remindLaterMinutes:z.number().int().min(0).default(60).meta(f),testMode:ny.default("off").meta(f)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":vi}),kd=N.merge(J).merge(ie).merge(Ct).merge(At).extend({anchor_id:z.string().min(1).meta({...f,readOnly:true}),handle:ct.meta({...f,readOnly:true}),global_frequency_cap:Op.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.enum(["highest_priority","most_recent","random"]).default("highest_priority").meta(f)}).meta({id:"PlacementSettings","x-revturbine-schema-persistence":Fo,"x-revturbine-schema-exposure":vi,...Jb,...or()}),zE=dn("PlacementSettingsAnchor"),jp=z.object({field:z.string().min(1).meta(f),operator:z.enum(["eq","neq","gt","lt","gte","lte","contains","in"]).meta(f),value:z.string().meta(f)}).meta({id:"RevTurbineConfigSegmentsItemPredicatesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Fp=z.object({name:z.string().min(1).meta(f),handle:z.string().min(1).meta(f),predicates:z.array(jp).optional().meta(f),dimension_id:z.string().optional().meta(f),experiment_id:z.string().min(1).optional().meta(f)}).meta({id:"RevTurbineConfigSegmentsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),ry=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),tier_position:z.number().int().min(0).default(0).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Yi.default("public").meta(f)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),iy=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),sort_order:z.number().int().min(0).default(0).meta(f),visibility:Yi.default("public").meta(f)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...Eo}),sy=z.object({handle:z.string().min(1).meta(f),plan_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:ca.meta(f),visibility:Yi.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:yo.meta(f)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...zs}),ay=z.object({handle:z.string().min(1).meta(f),addon_handle:z.string().min(1).meta(f),billing_period:z.enum(["monthly","annual","one_time","custom"]).meta(f),segment_handle:z.string().nullable().default(null).meta(f),price_amount:z.number().min(0).meta(f),pricing_model:ca.meta(f),visibility:Yi.default("public").meta(f),stripe_price_id:z.string().nullable().default(null).meta(f),price_source:yo.meta(f)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...zs}),oy=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),description:z.string().nullable().default(null).meta(f),is_default:z.boolean().default(false).meta(f),entitlement_handles:z.array(z.string()).default([]).meta(f)}).meta({id:"RevTurbineConfigSeatTypesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),ly=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().nullable().default(null).meta(f),soft_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),hard_limit_percent:z.number().int().min(0).nullable().default(null).meta(f),soft_limit_action:z.string().meta(f),hard_limit_action:z.string().meta(f),grace_period_hours:z.number().int().min(0).nullable().default(null).meta(f),notification_channels:z.array(z.string()).default([]).meta(f),is_active:z.boolean().default(true).meta(f)}).meta({id:"RevTurbineConfigEnforcementDefaultsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),cy=z.object({handle:z.string().min(1).meta(f),global_frequency_cap:Op.nullable().default(null).meta(f),global_frequency_cap_period:z.enum(["hour","day","week","month","session"]).nullable().default(null).meta(f),suppress_for_paid:z.boolean().default(false).meta(f),suppress_for_trial:z.boolean().default(false).meta(f),allow_stacking:z.boolean().default(false).meta(f),priority_collision_strategy:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigPlacementSettingsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),dy=z.object({handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:z.string().nullable().default(null).meta(f),visibility_toggle:z.boolean().default(true).meta(f),source_type:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigSegmentDimensionsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),uy=z.object({handle:z.string().min(1).meta(f),entitlement_handle:z.string().min(1).meta(f),meter_handle:z.string().min(1).meta(f),limit:z.number().int().min(0).nullable().default(null).meta(f),reset_period:z.string().nullable().default(null).meta(f)}).meta({id:"RevTurbineConfigMeterBindingsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),my=z.object({unique_handle:z.string().min(1).meta(f),name:z.string().min(1).meta(f),type:go.meta(f),unit:z.string().optional().meta(f),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),py=z.object({id:z.string().min(1).meta(f),entitlement_id:z.string().min(1).meta(f),targets:z.array(_d).min(1).meta(f),segment_ids:z.array(z.string()).default([]).meta(f),kind:go.optional().meta({...f,readOnly:true}),unit:z.string().optional().meta({...f,readOnly:true}),tier_name:z.string().optional().meta({...f,readOnly:true}),tier_description:z.string().optional().meta({...f,readOnly:true}),...Ds.pick({enabled:true,limit_value:true,enforcement:true,tier_value:true,period_scope:true,included_count:true,seat_type_id:true,initial_grant:true,allowance_value:true,rollover_enabled:true,max_balance:true,reset_period:true,max_seats:true,rate_value:true,amount_cents:true,currency:true}).shape,current_usage:z.number().default(0).meta(f),allocation:vo.optional().meta(f)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),fy=z.object({slot_id:z.string().min(1).meta(f),active:z.boolean().meta(f),triggers:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigSlotConfigsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),hy=z.object({id:z.string().min(1).meta(f),label:z.string().min(1).meta(f),description:z.string().meta(f),surface_type:z.string().meta(f),placement_handle:z.string().min(1).meta(f),template:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigPlacementSlotsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),gy=z.object({name:z.string().min(1).meta(f),type:z.string().optional().meta(f),required:z.boolean().optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItemFieldsItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),_y=z.object({id:z.string().min(1).meta(f),surface_type:z.string().meta(f),fields:z.array(gy).optional().meta(f)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),Lp=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":Qe,"x-revturbine-schema-exposure":kt}),by=z.object({name:z.string().min(1).meta(f),action_type:Lp.meta(f),plan_handle:z.string().optional().meta(f),promotion_id:z.string().optional().meta(f),placement_handle:z.string().optional().meta(f),url:z.string().optional().meta(f),tour_id:z.string().optional().meta(f),target_billing_period:z.enum(["monthly","annual"]).optional().meta(f),description:z.string().optional().meta(f)}).meta({id:"ContentUiPath","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),yy=z.object({id:z.string().meta(f),name:z.string().meta(f),discount:z.string().meta(f),type:z.string().meta(f),status:z.string().meta(f)}).meta({id:"ContentPromotion","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),vy=z.object({token:z.string().regex(/^[a-z][a-z0-9_]*$/).meta(f),label:z.string().min(1).meta(f),description:z.string().optional().meta(f),category:z.enum(["user","plan","usage","trial","billing","promotion","custom"]).meta(f),data_source:z.string().optional().meta(f),example_value:z.string().optional().meta(f),value_map:z.record(z.string(),z.string()).optional().meta(f),format:z.enum(["string","number","currency","percentage","date"]).optional().meta(f)}).meta({id:"RevTurbineConfigPersonalizationTokensItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),Ap=z.object({header:z.string().optional().meta(f),body:z.string().optional().meta(f),cta_label:z.string().optional().meta(f),secondary_cta_label:z.string().optional().meta(f)}).catchall(z.unknown()).meta({id:"MessageBlockContent","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),xy=z.object({block_id:z.string().min(1).meta(f),tenant_id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),surface_template_id:z.string().optional().meta(f),default_content:Ap.meta(f),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:Ap})).optional().meta(f),child_blocks:z.array(z.object({slot:z.string(),block_id:z.string()})).optional().meta(f),tokens_used:z.array(z.string()).optional().meta(f),status:z.enum(["draft","active","archived"]).meta(f),created_at:z.string().datetime().meta({...f,readOnly:true}),updated_at:z.string().datetime().meta({...f,readOnly:true})}).meta({id:"MessageBlock","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),Sy=z.object({label:z.string().meta(f),path:bo.meta(f),config:z.record(z.string(),z.string()).optional().meta(f)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Vp=z.object({template_id:z.string().min(1).meta(f),fields:z.record(z.string(),z.string()).meta(f),ctas:z.array(Sy).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Up=z.object({plan_ids:z.array(z.string()).meta(f),billing_cadences:z.array(z.string()).optional().meta(f),segment_chips:z.array(z.string()).meta(f)}).meta({id:"RevTurbineConfigStudioPayloadTarget","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Iy=z.object({count:z.number().int().min(1).meta(f),period:z.enum(["session","day","week","month","lifetime"]).meta(f)}).meta({id:"RevTurbineConfigPeriodCap","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Bp=z.object({max_per_period:Iy.optional().meta(f),cooldown_days:z.number().int().min(0).optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Py=z.object({id:z.string().min(1).meta(f),target:Up.meta(f),surfaces:z.array(Vp).meta(f),caps:Bp.optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().optional().meta({...f,readOnly:true}),recommendation_strategy:z.enum(["next_tier_up","best_value","custom"]).optional().default("next_tier_up").meta(f),recommendation_plan_override:z.string().optional().meta(f)}).meta({id:"RevTurbineConfigStudioPayload","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),Ty=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:qs}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:qs}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:qs}),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":Qe,"x-revturbine-schema-exposure":kt}),Cy=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt}),qp=z.object({id:z.string().min(1).meta(f),name:z.string().min(1).meta(f),category:Cy.meta(f),trigger:Ty.meta(f),payloads:z.array(Py).meta(f),order:z.number().int().min(0).meta(f)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),ky=z.object({payload_id:z.string().min(1).meta(f),placement_id:z.string().min(1).meta(f),target:Up.meta(f),caps:Bp.optional().meta(f),remind_later_minutes:z.number().int().min(0).nullable().optional().meta(f),created_at:z.string().meta({...f,readOnly:true}),updated_at:z.string().datetime().optional().meta({...f,readOnly:true}),source_mode:z.enum(["inline","content_linked"]).meta(f),surfaces:z.array(Vp).optional().meta(f),surface_slot_ids:z.array(z.string()).optional().meta(f),content_link:z.object({message_block_id:z.string().optional(),ui_path_id:z.string().optional(),promotion_id:z.string().optional(),content_payload_id:z.string().optional()}).optional().meta(f)}).meta({id:"RevTurbineConfigPlacementPayloadItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),KE=z.object({kind:z.string().min(1).meta(f),schema_version:z.number().int().nonnegative().meta(f),config:z.unknown().meta(f)}).meta({id:"RevTurbineConfigExtensionRulesItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),GE=N.merge(bp).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...zs}),$E=N.merge(yp).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...zs}),Ry=z.object({plans:z.array(ry).meta({...f,...bt}),addons:z.array(iy).optional().meta({...f,...Eo}),entitlements:z.array(my).meta({...f,...bt}),entitlement_rules:z.array(py).meta({...f,...bt}),segments:z.array(Fp).meta({...f,...bt}),content_ui_paths:z.array(by).meta({...f,...bt}),slot_configs:z.array(fy).optional().meta({...f,...bt,...Wl({since:"0.1.117",replacement:"SDK-local activation/trigger state",removeAfter:"one compatibility window",reason:"Slot activation moved to SDK-local state (plan 118 TASK-6); no longer a Playbook authoring input."})}),content_overrides:z.record(z.string(),z.record(z.string(),z.string())).optional().meta({...f,...bt,...Wl({since:"0.1.117",replacement:"Message Block / Placement Payload content",removeAfter:"one compatibility window",reason:"Content overrides moved to Message Block / Payload content (plan 118 TASK-6); no longer a Playbook authoring input."})}),theme:z.record(z.string(),z.unknown()).optional().meta({...f,...BE,...Wl({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(hy).optional().meta({...f,...bt}),message_blocks:z.array(xy).optional().meta({...f,...bt}),placement_payloads:z.array(ky).optional().meta({...f,...bt}),placements:z.array(qp).optional().meta({...f,...bt}),content_promotions:z.array(yy).optional().meta({...f,...bt}),personalization_tokens:z.array(vy).optional().meta({...f,...bt}),surface_templates:z.array(_y).optional().meta({...f,...bt}),free_trial_rules:z.array(GE).optional().meta({...f,...Eo}),reverse_trial_rules:z.array($E).optional().meta({...f,...Eo}),plan_variations:z.array(sy).optional().meta({...f,...Eo}),addon_variations:z.array(ay).optional().meta({...f,...Eo}),extension_rules:z.array(KE).optional().meta({...f,...bt}),seat_types:z.array(oy).optional().meta({...f,...bt}),enforcement_defaults:z.array(ly).optional().meta({...f,...bt}),placement_settings:z.array(cy).optional().meta({...f,...bt}),segment_dimensions:z.array(dy).optional().meta({...f,...bt}),meter_bindings:z.array(uy).optional().meta({...f,...bt}),experiments:z.array(z.unknown()).max(0).optional().meta({...f,...zs}),signal_catalog:z.object({}).strict().optional().meta({...f,...zs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt}),Ey=z.object({artifact_type:z.literal("playbook").meta({...f,...Ro,readOnly:true}),format_version:z.literal(Xb).meta({...f,...Ro,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...f,...Ro}),playbook_version_id:z.string().nullable().default(null).meta({...f,...Rp,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...f,...Ep,readOnly:true}),environment_id:z.string().min(1).optional().meta({...f,...Ep,readOnly:true}),project_id:z.string().min(1).optional().meta({...f,...Ep,readOnly:true}),exported_at:z.string().datetime().optional().meta({...f,...Rp,readOnly:true}),schema_version:z.string().min(1).optional().meta({...f,...Ro,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...f,...Ro,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...f,...Ro,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...Rp}),Rd=Ey.extend(Ry.shape).meta({"x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt});function ZE(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function wy(t){if(!ZE(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(wy,Rd).meta({id:"Playbook","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt});z.preprocess(wy,Rd.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":Qe,"x-revturbine-schema-exposure":kt,...bt});({"/api/seat-type-anchors":{get:_({operationId:"listSeatTypeAnchors",requestParams:{query:q},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:B(DE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:_({operationId:"listSeatTypes",requestParams:{query:q},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:B(wo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:_({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Gn(wo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:_({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:wo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:wo}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:_({operationId:"deleteSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Delete seat type",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"delete"}}})},"/api/personalization-token-anchors":{get:_({operationId:"listPersonalizationTokenAnchors",requestParams:{query:q},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:B(ME)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:_({operationId:"listPersonalizationTokens",requestParams:{query:q},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:B(Ao)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:_({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Gn(Ao)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:_({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Ao.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ao}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:_({operationId:"deletePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Delete personalization token",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"delete"}}})},"/api/config/stripe":{put:_({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mn(Cd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Cd}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:_({operationId:"listMeteringConfigs",requestParams:{query:q},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:B(Oo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:_({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Gn(Oo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:_({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Oo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Oo}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:_({operationId:"deleteMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Delete metering configuration",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"delete"}}})},"/api/usage-enforcement-setting-anchors":{get:_({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:q},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:B(HE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:_({operationId:"listUsageEnforcementSettings",requestParams:{query:q},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:B(jo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:_({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Gn(jo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:_({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:jo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:jo}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:_({operationId:"deleteUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Delete usage enforcement settings",tags:["config"],responses:{204:{description:"Deleted"}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"delete"}}})},"/api/placement-setting-anchors":{get:_({operationId:"listPlacementSettingsAnchors",requestParams:{query:q},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:B(zE)}}},default:{description:"Error response",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:_({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Mn(kd)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:kd}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var {Unrestricted:ys}=Me,{Persisted:Ay}=tt,{Internal:Oy}=Ze,jy=z.enum(["create","update","delete","archive","restore","reorder","duplicate","sync","publish"]).meta({id:"ChangeLogAction","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":Oy}),Dp=N.merge(J).merge(ie).extend({action:jy.meta(ys),resource_type:z.string().min(1).max(100).meta(ys),resource_id:z.string().min(1).meta(ys),resource_name:z.string().max(200).optional().meta(ys),actor_id:z.string().min(1).meta(ys),actor_email:z.string().email().optional().meta(ys),diff:z.object({before:z.record(z.string(),z.unknown()).optional(),after:z.record(z.string(),z.unknown()).optional()}).optional().meta(ys),summary:z.string().max(1e3).optional().meta(ys),metadata:Tt.meta(ys)}).meta({id:"ChangeLogEntry","x-revturbine-schema-persistence":Ay,"x-revturbine-schema-exposure":Oy});({"/api/changelog":{get:_({operationId:"listChangeLogEntries",requestParams:{query:q},summary:"List change log entries",tags:["changelog"],responses:{200:{description:"Change log entries",content:{"application/json":{schema:B(Dp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"list"}}})},"/api/changelog/{entryId}":{get:_({operationId:"getChangeLogEntry",requestParams:{path:z.object({entryId:z.string()})},summary:"Get change log entry by ID",tags:["changelog"],responses:{200:{description:"Change log entry",content:{"application/json":{schema:Dp}}}},"x-revturbine-operation":{exposure:"internal",resource:"changelog",persistence:{table:"changeLogEntries",mode:"get"}}})}});var {Unrestricted:Ed}=Me,{Persisted:QE,Transient:ew}=tt,{Internal:Fy}=Ze,Ly=z.enum(["active","suspended","archived"]).meta({id:"TenantStatus","x-revturbine-schema-persistence":ew,"x-revturbine-schema-exposure":Fy}),xs=N.merge(J).extend({name:Mt.meta(Ed),handle:ct.meta(Ed),status:Ly.default("active").meta(Ed),metadata:Tt.meta(Ed)}).meta({id:"Tenant","x-revturbine-schema-persistence":QE,"x-revturbine-schema-exposure":Fy});({"/api/tenants":{get:_({operationId:"listTenants",requestParams:{query:q},summary:"List tenants",tags:["tenants"],responses:{200:{description:"Tenant list",content:{"application/json":{schema:B(xs)}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"list"}}})},"/api/tenants/{tenantId}":{get:_({operationId:"getTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Get tenant by ID",tags:["tenants"],responses:{200:{description:"Tenant",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"get"}}}),patch:_({operationId:"updateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Update tenant",tags:["tenants"],requestBody:{required:true,content:{"application/json":{schema:xs.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/suspend":{post:_({operationId:"suspendTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Suspend tenant (disables all API access)",tags:["tenants"],responses:{200:{description:"Suspended",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})},"/api/tenants/{tenantId}/reactivate":{post:_({operationId:"reactivateTenant",requestParams:{path:z.object({tenantId:z.string()})},summary:"Reactivate a suspended tenant",tags:["tenants"],responses:{200:{description:"Reactivated",content:{"application/json":{schema:xs}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenants",persistence:{table:"tenants",mode:"update"}}})}});var {Unrestricted:xi}=Me,{Persisted:nw,Transient:Vy}=tt,{Internal:Mp}=Ze,Uy=z.enum(["active","archived","locked"]).meta({id:"EnvironmentStatus","x-revturbine-schema-persistence":Vy,"x-revturbine-schema-exposure":Mp}),ba=N.merge(J).merge(ie).extend({name:Mt.meta(xi),handle:ct.meta(xi),description:ri.meta(xi),is_production:z.boolean().default(false).meta({...xi,readOnly:true}),status:Uy.default("active").meta(xi),cloned_from_environment_id:z.string().nullable().default(null).meta({...xi,readOnly:true}),cloned_at:Nt.meta({...xi,readOnly:true}),cloned_at_sequence:z.number().int().min(0).nullable().default(null).meta({...xi,readOnly:true}),requires_approval:z.boolean().default(false).meta(xi),auto_deploy_on_approval:z.boolean().default(false).meta(xi),created_by:z.string().optional().meta(xi),metadata:Tt.meta(xi)}).meta({id:"Environment","x-revturbine-schema-persistence":nw,"x-revturbine-schema-exposure":Mp}),By=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":Mp});({"/api/environments":{get:_({operationId:"listEnvironments",requestParams:{query:q},summary:"List environments",tags:["environments"],responses:{200:{description:"Environment list",content:{"application/json":{schema:B(ba)}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"list"}}}),post:_({operationId:"createEnvironment",summary:"Create environment (optionally cloned from another)",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200),handle:z.string().min(1).max(100),description:z.string().max(500).optional(),clone_from_environment_id:z.string().optional(),requires_approval:z.boolean().optional()})}}},responses:{201:{description:"Created",content:{"application/json":{schema:ba}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"create"}}})},"/api/environments/{environmentId}":{get:_({operationId:"getEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Get environment by ID",tags:["environments"],responses:{200:{description:"Environment",content:{"application/json":{schema:ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"get"}}}),patch:_({operationId:"updateEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Update environment settings",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:ba.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:ba}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/{environmentId}/archive":{post:_({operationId:"archiveEnvironment",requestParams:{path:z.object({environmentId:z.string()})},summary:"Archive environment (production cannot be archived)",tags:["environments"],responses:{200:{description:"Archived",content:{"application/json":{schema:ba}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"update"}}})},"/api/environments/promote":{post:_({operationId:"promoteEnvironment",summary:"Promote (merge) changes from one environment to another",tags:["environments"],requestBody:{required:true,content:{"application/json":{schema:By}}},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:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"environments",persistence:{table:"environments",mode:"promote"}}})}});var {Unrestricted:De,Pii:lc}=Me,{Transient:es,Persisted:iw}=tt,{External:Ai}=Ze,qy=z.enum(["milestone_version","milestone_order"]).meta({id:"SupersessionReason","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai});z.object({superseded_output_id:z.string().min(1).meta(De),superseded_by:z.string().min(1).meta(De),reason:qy.meta(De)}).meta({id:"SupersessionRecord","x-revturbine-schema-persistence":iw,"x-revturbine-schema-exposure":Ai,...Me.Operational});var Dy=z.enum(Yl).meta({id:"EntitlementStatus","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai}),Np=z.object({output_id:z.string().meta(De),category:z.string().meta(De),surface:z.object({template:z.string().optional().meta(De),type:Zl.meta(De),slot_id:z.string().optional().meta(De)}).meta(De),content:z.record(z.string(),z.unknown()).meta(De),promotion:z.record(z.string(),z.unknown()).optional().meta(De),cta_path:z.record(z.string(),z.unknown()).optional().meta(De),ui_path:z.record(z.string(),z.unknown()).optional().meta(De),rule_id:z.string().meta(De),decision_id:z.string().meta(De),config_version:z.string().meta(De),present_upsell:z.boolean().meta(De),experiment_id:z.string().optional().meta(De),variant_key:z.string().optional().meta(De),experiment_version_id:z.string().optional().meta(De)}).meta({id:"PlacementDecisionOutput","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai}),My=z.object({status:Dy.meta(De),allowed:z.boolean().meta(De),reason:z.string().optional().meta(De),current_tier:z.string().optional().meta(De),limit:z.number().optional().meta(De),used:z.number().optional().meta(De),remaining:z.number().optional().meta(De),placement:Np.optional().meta(De)}).meta({id:"EntitlementCheckResult","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai});z.object({id:z.string().meta(De),name:z.string().optional().meta(De),discount:z.string().optional().meta(De),type:z.string().optional().meta(De),status:z.string().optional().meta(De)}).meta({id:"RuntimePromotionSnapshot","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai});var Ny=z.object({id:z.string().meta(lc),anonymous_id:z.string().optional().meta(De),traits:z.record(z.string(),z.unknown()).optional().meta(lc)}).meta({id:"ServerEvaluationPayloadUser","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai}),Hy=z.object({slot_id:z.string().optional().meta(De),entitlement_handle:z.string().optional().meta(De),plan_handle:z.string().optional().meta(De),placement_handle:z.string().optional().meta(De),visible:z.boolean().meta(De),output:Np.optional().meta(De),reason_codes:z.array(z.string()).optional().meta(De)}).meta({id:"ServerEvaluationPayloadDecisionsItem","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai}),zy=My,Ky=ec.meta({id:"ServerEvaluationPayloadTrialStatus","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai}),Gy=z.object({segments:z.array(z.string()).optional().meta(De),traits:z.record(z.string(),z.unknown()).optional().meta(lc),usage_balances:z.record(z.string(),z.number()).optional().meta(De)}).meta({id:"ServerEvaluationPayloadUserContext","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai});z.object({version:z.literal("1.0.0").meta(De),request_id:z.string().meta(De),tenant_id:z.string().meta(De),evaluated_at:z.string().datetime().meta(De),ttl_seconds:z.number().int().min(0).max(86400).meta(De),user:Ny.meta(lc),decisions:z.array(Hy).meta(De),entitlements:z.record(z.string(),zy).optional().meta(De),theme:z.record(z.string(),z.unknown()).optional().meta(De),trial_status:Ky.optional().meta(De),user_context:Gy.optional().meta(lc)}).meta({id:"ServerEvaluationPayload","x-revturbine-schema-persistence":es,"x-revturbine-schema-exposure":Ai});var {Unrestricted:Yt}=Me,{Persisted:lw,Transient:wd}=tt,{Internal:cc}=Ze,$y=z.enum(["draft","awaiting_approval","approved","deploying","deployed","rejected","archived"]).meta({id:"PlaybookVersionStatus","x-revturbine-schema-persistence":wd,"x-revturbine-schema-exposure":cc}),Lo=N.merge(J).merge(ie).extend({environment_id:z.string().min(1).meta(Yt),name:Mt.meta(Yt),description:z.string().max(2e3).optional().meta(Yt),status:$y.default("draft").meta(Yt),labels:z.array(z.string()).default([]).meta(Yt),created_by:z.string().min(1).meta(Yt),submitted_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),reviewed_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),deployed_by:z.string().nullable().default(null).meta({...Yt,readOnly:true}),submitted_at:Nt.meta({...Yt,readOnly:true}),reviewed_at:Nt.meta({...Yt,readOnly:true}),deployed_at:Nt.meta({...Yt,readOnly:true}),base_snapshot_sequence:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),entry_count:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),conflict_count:z.number().int().min(0).default(0).meta({...Yt,readOnly:true}),rollback_of_playbook_version_id:z.string().nullable().default(null).meta(Yt),cherry_picked_from_playbook_version_id:z.string().nullable().default(null).meta(Yt),review_notes:z.string().max(2e3).optional().meta(Yt),rejection_reason:z.string().max(2e3).optional().meta(Yt),snapshot:z.record(z.string(),z.unknown()).nullable().default(null).meta({...Yt,readOnly:true}),bundle:z.string().nullable().default(null).meta({...Yt,readOnly:true}),metadata:Tt.meta(Yt)}).meta({id:"PlaybookVersion","x-revturbine-schema-persistence":lw,"x-revturbine-schema-exposure":cc}),Hp=z.object({handle:z.string().meta(Yt),resource_type:z.string().meta(Yt),resource_name:z.string().optional().meta(Yt),action:z.enum(["create","update","delete"]).meta(Yt),has_conflict:z.boolean().meta(Yt)}).meta({id:"PlaybookVersionEntrySummary","x-revturbine-schema-persistence":wd,"x-revturbine-schema-exposure":cc}),Zy=z.object({playbook_version_id:z.string().meta(Yt),entries:z.array(Hp).meta(Yt),total_entries:z.number().int().min(0).meta(Yt),total_conflicts:z.number().int().min(0).meta(Yt),deployable:z.boolean().meta(Yt)}).meta({id:"PlaybookVersionDiff","x-revturbine-schema-persistence":wd,"x-revturbine-schema-exposure":cc}),Yy=z.object({playbook_version_id:z.string().meta(Yt),deployed_count:z.number().int().min(0).meta(Yt),superseded_count:z.number().int().min(0).meta(Yt),skipped_conflicts:z.number().int().min(0).meta(Yt),deployed_at:z.string().datetime().meta(Yt)}).meta({id:"PlaybookVersionDeployResult","x-revturbine-schema-persistence":wd,"x-revturbine-schema-exposure":cc});({"/api/playbook-versions/{playbookVersionId}/submit":{post:_({operationId:"submitPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Submit playbook version for approval",tags:["playbook-versions"],responses:{200:{description:"Submitted",content:{"application/json":{schema:Lo}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/approve":{post:_({operationId:"approvePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Approve playbook version (may auto-deploy if environment allows)",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({review_notes:z.string().max(2e3).optional()})}}},responses:{200:{description:"Approved",content:{"application/json":{schema:Lo}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/reject":{post:_({operationId:"rejectPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Reject playbook version",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({rejection_reason:z.string().max(2e3)})}}},responses:{200:{description:"Rejected",content:{"application/json":{schema:Lo}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/deploy":{post:_({operationId:"deployPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Deploy playbook version \u2014 activates all entries, supersedes previous versions",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({force:z.boolean().default(false)})}}},responses:{200:{description:"Deploy result",content:{"application/json":{schema:Yy}}},default:{description:"Error (conflicts exist)",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"deploy"}}})},"/api/playbook-versions/{playbookVersionId}/archive":{post:_({operationId:"archivePlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Archive (abandon) a playbook version",tags:["playbook-versions"],responses:{200:{description:"Archived",content:{"application/json":{schema:Lo}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})},"/api/playbook-versions/{playbookVersionId}/preview":{get:_({operationId:"previewPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Preview diff of all entries vs current state (dry-run deploy)",tags:["playbook-versions"],responses:{200:{description:"Diff preview",content:{"application/json":{schema:Zy}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"preview"}}})},"/api/playbook-versions/{playbookVersionId}/conflicts":{get:_({operationId:"listPlaybookVersionConflicts",requestParams:{path:z.object({playbookVersionId:z.string()}),query:q},summary:"List entries with sequence conflicts (base_sequence \u2260 current)",tags:["playbook-versions"],responses:{200:{description:"Conflict list",content:{"application/json":{schema:B(Hp)}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"list"}}})},"/api/playbook-versions/{playbookVersionId}/rollback":{post:_({operationId:"rollbackPlaybookVersion",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Create a rollback playbook version that reverts a deployed one",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({name:z.string().min(1).max(200).optional()})}}},responses:{201:{description:"Rollback PlaybookVersion created",content:{"application/json":{schema:Lo}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"create"}}})},"/api/playbook-versions/{playbookVersionId}/cherry-pick":{post:_({operationId:"cherryPickEntries",requestParams:{path:z.object({playbookVersionId:z.string()})},summary:"Cherry-pick individual entries from this PlaybookVersion into another",tags:["playbook-versions"],requestBody:{required:true,content:{"application/json":{schema:z.object({handles:z.array(z.string()).min(1),target_playbook_version_id:z.string().min(1)})}}},responses:{200:{description:"Cherry-picked",content:{"application/json":{schema:z.object({copied_count:z.number().int()})}}},default:{description:"Error",content:{"application/json":{schema:Ce}}}},"x-revturbine-operation":{exposure:"internal",resource:"playbook-versions",persistence:{table:"playbookVersions",mode:"update"}}})}});var {Unrestricted:Rt,Pii:dw}=Me,{Persisted:Oi}=tt,{Internal:ji}=Ze,Wy=z.enum(["active","revoked","rotating"]).meta({id:"ApiKeyStatus","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),dc=N.merge(J).merge(ie).extend({name:Mt.meta(Rt),key_hash:z.string().min(1).meta({...dw,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:Wy.default("active").meta(Rt),last_used_at:Nt.meta({...Rt,readOnly:true}),expires_at:Nt.meta(Rt)}).meta({id:"ApiKey","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),Jy=z.enum(["boolean","string","number","json"]).meta({id:"FlagValueType","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),Ks=N.merge(J).merge(ie).extend({key:z.string().min(1).max(100).meta(Rt),value_type:Jy.default("boolean").meta(Rt),value:z.string().max(4e3).default("false").meta(Rt),description:ri.meta(Rt),enabled:z.boolean().default(true).meta(Rt)}).meta({id:"FeatureFlag","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),Ad=N.merge(J).merge(ie).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":Oi,"x-revturbine-schema-exposure":ji}),Od=N.merge(J).merge(ie).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":Oi,"x-revturbine-schema-exposure":ji}),uc=N.merge(J).merge(ie).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:Nt.meta({...Rt,readOnly:true})}).meta({id:"OnboardingChecklist","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),Xy=z.enum(["user","agent","system","webhook"]).meta({id:"AuditActorType","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),Qy=N.merge(ie).extend({environment_id:z.string().min(1).default("production").meta(Rt),actor_type:Xy.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":Oi,"x-revturbine-schema-exposure":ji}),ev=z.enum(["user_id","account_id","email"]).meta({id:"PlacementTestUserIdentifierType","x-revturbine-schema-persistence":Oi,"x-revturbine-schema-exposure":ji}),mc=N.merge(J).merge(ie).merge(Ct).merge(At).extend({handle:ct.meta({...Rt,readOnly:true}),identifier:z.string().min(1).max(200).meta(Rt),identifier_type:ev.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":Oi,"x-revturbine-schema-exposure":ji,...or()});({"/api/settings/api-keys":{get:_({operationId:"listApiKeys",requestParams:{query:q},summary:"List API keys for the tenant",tags:["settings"],responses:{200:{description:"API keys",content:{"application/json":{schema:B(dc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"list"}}}),post:_({operationId:"createApiKey",summary:"Create a new API key",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Gn(dc)}}},responses:{201:{description:"API key created",content:{"application/json":{schema:dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"create",writeSchema:"ApiKeySchema#writable"}}})},"/api/settings/api-keys/{keyId}":{delete:_({operationId:"revokeApiKey",requestParams:{path:z.object({keyId:z.string()})},summary:"Revoke an API key",tags:["settings"],responses:{200:{description:"API key revoked",content:{"application/json":{schema:dc}}}},"x-revturbine-operation":{exposure:"internal",resource:"api-keys",persistence:{table:"apiKeys",mode:"delete"}}})},"/api/flags":{get:_({operationId:"listFeatureFlags",requestParams:{query:q},summary:"List feature flags for the tenant",tags:["settings"],responses:{200:{description:"Feature flags",content:{"application/json":{schema:B(Ks)}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"list"}}}),post:_({operationId:"createFeatureFlag",summary:"Create a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Gn(Ks)}}},responses:{201:{description:"Feature flag created",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"create",writeSchema:"FeatureFlagSchema#writable"}}})},"/api/flags/{flagId}":{get:_({operationId:"getFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Get a feature flag",tags:["settings"],responses:{200:{description:"Feature flag",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"get"}}}),put:_({operationId:"updateFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Update a feature flag",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mn(Ks).partial()}}},responses:{200:{description:"Feature flag updated",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"update",writeSchema:"FeatureFlagSchema#writable"}}}),delete:_({operationId:"deleteFeatureFlag",requestParams:{path:z.object({flagId:z.string()})},summary:"Delete a feature flag",tags:["settings"],responses:{200:{description:"Feature flag deleted",content:{"application/json":{schema:Ks}}}},"x-revturbine-operation":{exposure:"internal",resource:"feature-flags",persistence:{table:"featureFlags",mode:"delete"}}})},"/api/settings/tenant-config":{put:_({operationId:"updateTenantConfig",summary:"Update tenant configuration",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mn(Ad).partial()}}},responses:{200:{description:"Tenant config updated",content:{"application/json":{schema:Ad}}}},"x-revturbine-operation":{exposure:"internal",resource:"tenant-config",persistence:{table:"tenantConfigs",mode:"update",writeSchema:"TenantConfigSchema#writable"}}})},"/api/settings/mcp":{put:_({operationId:"updateMcpConfig",summary:"Update MCP config",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mn(Od).partial()}}},responses:{200:{description:"MCP config updated",content:{"application/json":{schema:Od}}}},"x-revturbine-operation":{exposure:"internal",resource:"mcp-config",persistence:{table:"mcpConfigs",mode:"update",writeSchema:"McpConfigSchema#writable"}}})},"/api/settings/onboarding":{get:_({operationId:"listOnboardingSteps",requestParams:{query:q},summary:"List onboarding checklist steps",tags:["settings"],responses:{200:{description:"Onboarding steps",content:{"application/json":{schema:B(uc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"list"}}})},"/api/settings/onboarding/{stepId}":{get:_({operationId:"getOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Get an onboarding step",tags:["settings"],responses:{200:{description:"Onboarding step",content:{"application/json":{schema:uc}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"get"}}}),put:_({operationId:"updateOnboardingStep",requestParams:{path:z.object({stepId:z.string()})},summary:"Update an onboarding step",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Mn(uc).partial()}}},responses:{200:{description:"Onboarding step updated",content:{"application/json":{schema:uc}}}},"x-revturbine-operation":{exposure:"internal",resource:"onboarding",persistence:{table:"onboardingChecklist",mode:"update",writeSchema:"OnboardingChecklistSchema#writable"}}})},"/api/settings/audit-events":{get:_({operationId:"listAuditEvents",requestParams:{query:q},summary:"List audit events for the tenant",tags:["settings"],responses:{200:{description:"Audit events",content:{"application/json":{schema:B(Qy)}}}},"x-revturbine-operation":{exposure:"internal",resource:"audit-events",persistence:{table:"auditEvents",mode:"list"}}})},"/api/config/placement-test-users":{get:_({operationId:"listPlacementTestUsers",requestParams:{query:q},summary:"List placement test users for the tenant",tags:["settings"],responses:{200:{description:"Placement test users",content:{"application/json":{schema:B(mc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"list"}}}),post:_({operationId:"createPlacementTestUser",summary:"Add a placement test user",tags:["settings"],requestBody:{required:true,content:{"application/json":{schema:Gn(mc)}}},responses:{201:{description:"Placement test user created",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"create",writeSchema:"PlacementTestUserSchema#writable"}}})},"/api/config/placement-test-users/{testUserId}":{delete:_({operationId:"deletePlacementTestUser",requestParams:{path:z.object({testUserId:z.string()})},summary:"Remove a placement test user",tags:["settings"],responses:{200:{description:"Placement test user removed",content:{"application/json":{schema:mc}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-test-users",persistence:{table:"placementTestUsers",mode:"delete"}}})}});var {Unrestricted:ce,Pii:Ur}=Me,{Persisted:Yr,Transient:zp}=tt,{Internal:br}=Ze,tv=z.enum(["user","admin"]).meta({id:"UserRole","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.merge(J).extend({name:Mt.meta(ce),email:z.string().email().meta(Ur),email_verified:z.boolean().default(false).meta(ce),image:z.string().url().nullable().default(null).meta(Ur),role:tv.default("user").meta(ce),banned:z.boolean().default(false).meta({...ce,readOnly:true}),ban_reason:z.string().nullable().default(null).meta({...ce,readOnly:true}),ban_expires:Nt.meta({...ce,readOnly:true}),two_factor_enabled:z.boolean().default(false).meta({...ce,readOnly:true})}).meta({id:"AuthUser","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.merge(J).extend({expires_at:z.string().datetime().meta(ce),token:z.string().min(1).meta({...Ur,readOnly:true}),ip_address:z.string().nullable().default(null).meta(Ur),user_agent:z.string().nullable().default(null).meta(Ur),user_id:z.string().min(1).meta({...ce,readOnly:true}),active_organization_id:z.string().nullable().default(null).meta(ce),impersonated_by:z.string().nullable().default(null).meta({...ce,readOnly:true})}).meta({id:"AuthSession","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.merge(J).extend({account_id:z.string().min(1).meta(ce),provider_id:z.string().min(1).meta(ce),user_id:z.string().min(1).meta({...ce,readOnly:true}),access_token:z.string().nullable().default(null).meta({...Ur,readOnly:true}),refresh_token:z.string().nullable().default(null).meta({...Ur,readOnly:true}),id_token:z.string().nullable().default(null).meta({...Ur,readOnly:true}),access_token_expires_at:Nt.meta({...ce,readOnly:true}),refresh_token_expires_at:Nt.meta({...ce,readOnly:true}),scope:z.string().nullable().default(null).meta(ce),password:z.string().nullable().default(null).meta({...Ur,readOnly:true})}).meta({id:"AuthAccount","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.merge(J).extend({identifier:z.string().min(1).meta(Ur),value:z.string().min(1).meta({...Ur,readOnly:true}),expires_at:z.string().datetime().meta(ce)}).meta({id:"AuthVerification","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({secret:z.string().min(1).meta({...Ur,readOnly:true}),backup_codes:z.string().min(1).meta({...Ur,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),verified:z.boolean().default(false).meta({...ce,readOnly:true})}).meta({id:"AuthTwoFactor","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({name:Mt.meta(ce),slug:z.string().min(1).max(100).nullable().default(null).meta(ce),logo:z.string().url().nullable().default(null).meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),metadata:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthOrganization","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});var Kp=z.enum(["viewer","collaborator","approver","admin"]).meta({id:"Role","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});var Gp=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":br}),$p=z.enum(["read","create","update","delete","publish","approve","invite","manage_roles"]).meta({id:"PermissionAction","x-revturbine-schema-persistence":zp,"x-revturbine-schema-exposure":br});z.object({resource:Gp,action:$p}).meta({id:"Permission","x-revturbine-schema-persistence":zp,"x-revturbine-schema-exposure":br});var yw=["tenant","plans","entitlements","placements","targeting","content","experiments","audit","settings"],vw=["plans","entitlements","placements","targeting","content","experiments"],xw=["plans","entitlements","placements","targeting","content","experiments"],Sw=["tenant","users","plans","entitlements","placements","targeting","content","experiments","billing","audit","mcp","api_tokens","settings"],Iw=["read","create","update","delete","publish","approve","invite","manage_roles"];function jd(t,e){return t.flatMap(n=>e.map(r=>({resource:n,action:r})))}var Pw=jd(yw,["read"]),Tw=[...Pw,...jd(vw,["create","update"])];[...Tw,...jd(xw,["publish","approve","delete"])];jd(Sw,Iw);var Cw=Gp.options.flatMap(t=>$p.options.map(e=>`${t}:${e}`));z.enum(Cw).meta({id:"McpTokenScope","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({organization_id:z.string().min(1).meta({...ce,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),role:Kp.default("viewer").meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true})}).meta({id:"AuthMember","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});var nv=z.enum(["pending","accepted","rejected","canceled","expired"]).meta({id:"InvitationStatus","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({organization_id:z.string().min(1).meta({...ce,readOnly:true}),email:z.string().email().meta(Ur),role:Kp.nullable().default(null).meta(ce),status:nv.default("pending").meta(ce),expires_at:z.string().datetime().meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),inviter_id:z.string().min(1).meta({...ce,readOnly:true})}).meta({id:"AuthInvitation","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({name:z.string().max(200).nullable().default(null).meta(ce),public_key:z.string().min(1).meta({...Ur,readOnly:true}),user_id:z.string().min(1).meta({...ce,readOnly:true}),credential_id:z.string().min(1).meta({...ce,readOnly:true}),counter:z.number().int().default(0).meta({...ce,readOnly:true}),device_type:z.string().min(1).meta(ce),backed_up:z.boolean().default(false).meta(ce),transports:z.string().nullable().default(null).meta(ce),created_at:z.string().datetime().meta({...ce,readOnly:true}),aaguid:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthPasskey","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.merge(J).extend({config_id:z.string().min(1).meta(ce),name:z.string().max(200).nullable().default(null).meta(ce),start:z.string().nullable().default(null).meta(ce),reference_id:z.string().min(1).meta(ce),prefix:z.string().nullable().default(null).meta(ce),key:z.string().min(1).meta({...Ur,readOnly:true}),refill_interval:z.number().int().nullable().default(null).meta(ce),refill_amount:z.number().int().nullable().default(null).meta(ce),last_refill_at:Nt.meta({...ce,readOnly:true}),enabled:z.boolean().default(true).meta(ce),rate_limit_enabled:z.boolean().default(false).meta(ce),rate_limit_time_window:z.number().int().nullable().default(null).meta(ce),rate_limit_max:z.number().int().nullable().default(null).meta(ce),request_count:z.number().int().default(0).meta({...ce,readOnly:true}),remaining:z.number().int().nullable().default(null).meta({...ce,readOnly:true}),last_request:Nt.meta({...ce,readOnly:true}),expires_at:Nt.meta(ce),permissions:z.string().nullable().default(null).meta(ce),metadata:z.string().nullable().default(null).meta(ce)}).meta({id:"AuthApiKey","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});N.extend({issuer:z.string().min(1).meta(ce),oidc_config:z.string().nullable().default(null).meta(ce),saml_config:z.string().nullable().default(null).meta(ce),user_id:z.string().min(1).meta({...ce,readOnly:true}),provider_id:z.string().min(1).meta(ce),organization_id:z.string().nullable().default(null).meta(ce),domain:z.string().min(1).meta(ce)}).meta({id:"AuthSsoProvider","x-revturbine-schema-persistence":Yr,"x-revturbine-schema-exposure":br});async function sv(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 rv(t){return typeof t=="number"&&Number.isInteger(t)&&t>=0}var Vo=class extends Error{constructor(t,e){super(e),this.name="PlaybookPayloadVersionError",this.reason=t;}};function Fw(t){if(typeof t!="object"||t===null||Array.isArray(t))throw new Vo("malformed_envelope","Playbook payload: expected a top-level JSON object");let e=t,n=e.bundle_schema_version;if(!rv(n))throw new Vo("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(!rv(r)||r>n)throw new Vo("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 av(t,e){let n=Kh,r=Gh,i=Fw(t);if(i.minReadableSchemaVersion>n)throw new Vo("requires_newer_reader",`Playbook payload requires schema_version \u2265 ${i.minReadableSchemaVersion}; this reader supports ${r}..${n}`);if(i.schemaVersion>n)throw new Vo("schema_version_too_new",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);if(i.schemaVersion<r)throw new Vo("schema_version_too_old",`Playbook payload: unsupported bundle_schema_version=${i.schemaVersion} (reader supports ${r}..${n})`);return i}var ov=z.string().regex(/^[a-f0-9]{64}$/,"sha256 must be 64-char lowercase hex"),iv=z.string().datetime({offset:true}),Lw=z.string().min(1).regex(/^[A-Za-z0-9_-]+$/,"must be base64url-encoded without padding"),Zp=z.object({url:z.string().min(1),sha256:ov,byte_length:z.number().int().nonnegative(),brotli_byte_length:z.number().int().nonnegative().optional(),gzip_byte_length:z.number().int().nonnegative().optional()}).strict(),Vw=z.object({alg:z.literal("ed25519"),key_id:z.string().min(1),sig:Lw}).strict(),Uw=z.string().regex(/^\d+\.\d+\.\d+$/,"must be MAJOR.MINOR.PATCH");z.object({manifest_version:Uw,tenant_id:z.string(),config_version:z.string(),schema_version:z.number().int().nonnegative(),runtime_abi:z.number().int().nonnegative(),active:Zp,standby:Zp.optional(),previous:Zp.optional(),not_before:iv,expires_at:iv,rollback_to:ov.optional(),signature:Vw.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 Bw=new Set(["type","plan_handle","promotion_id","placement_handle","url","tour_id"]),Uo=class{constructor(){T(this,"types",new Map);T(this,"surfaceIndex",new Map);}register(e){let n=this.types.get(e.id);n&&console.warn(`[RevTurbine] Replacing existing placement slot type id ${e.id}.`,{previousSurfaceType:n.surfaceType,nextSurfaceType:e.surfaceType});let r={...e,priority:e.priority??0,accepts:e.accepts??(s=>s.surface.type===e.surfaceType)};this.types.set(r.id,r);let i=this.surfaceIndex.get(r.surfaceType)??[];i.includes(r.id)||(i.push(r.id),this.surfaceIndex.set(r.surfaceType,i));}unregister(e){let n=this.types.get(e);if(!n)return false;this.types.delete(e);let r=this.surfaceIndex.get(n.surfaceType);if(r){let i=r.filter(s=>s!==e);i.length>0?this.surfaceIndex.set(n.surfaceType,i):this.surfaceIndex.delete(n.surfaceType);}return true}get(e){return this.types.get(e)}resolve(e){if(e.surface.template){let i=this.types.get(e.surface.template);if(i)return i}let r=(this.surfaceIndex.get(e.surface.type)??[]).map(i=>this.types.get(i)).filter(i=>i!=null).sort((i,s)=>s.priority-i.priority);for(let i of r)if(i.accepts?.(e))return i;return this.types.get("custom")}listAll(){return Array.from(this.types.values())}listBySurfaceType(e){return (this.surfaceIndex.get(e)??[]).map(r=>this.types.get(r)).filter(Boolean)}has(e){return this.types.has(e)}};function lv(t,e){let n={current_usage:"usage_current",current_limit:"usage_limit",remaining_usage:"usage_remaining"},r=s=>{if(typeof s=="number"&&Number.isFinite(s))return s;if(typeof s=="string"&&s.trim().length>0){let a=Number(s);if(Number.isFinite(a))return a}},i=s=>{let a="_usage_remaining";if(s==="usage_remaining"){let y=r(e.usage_current??e.current_usage),I=r(e.usage_limit);return y!==void 0&&I!==void 0?Math.max(0,I-y):void 0}if(!s.endsWith(a))return;let o=s.slice(0,-a.length);if(!o)return;let g=r(e[`${o}_usage_current`]),v=r(e[`${o}_usage_limit`]);if(!(g===void 0||v===void 0))return Math.max(0,v-g)};return t.replace(/\{\{(\w+)\}\}/g,(s,a)=>{let o=n[a]??a,g=e[o];if(g!=null)return String(g);let v=i(o);return v!=null?String(v):`{{${a}}}`})}function qw(t,e){let n={};for(let[r,i]of Object.entries(t))typeof i=="string"?n[r]=lv(i,e):n[r]=i;return n}function Dw(t){let e=typeof t.type=="string"&&t.type.length>0?t.type:"dismiss",n={};for(let[r,i]of Object.entries(t))Bw.has(r)||(n[r]=i);return {type:e,plan_handle:typeof t.plan_handle=="string"?t.plan_handle:void 0,promotion_id:typeof t.promotion_id=="string"?t.promotion_id:void 0,placement_handle:typeof t.placement_handle=="string"?t.placement_handle:void 0,url:typeof t.url=="string"?t.url:void 0,tour_id:typeof t.tour_id=="string"?t.tour_id:void 0,...Object.keys(n).length>0?{params:n}:{}}}function Mw(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 pc=null,Yp=null;function dv(t){}function Nw(){return pc||(pc=new Uo,Yp),pc}function Hw(){pc=null;}var Jp=class{constructor(){T(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();}},Wp=null;function uv(){return Wp||(Wp=new Jp),Wp}function mv(t,e=uv()){let n=new Map;for(let[r,i]of Object.entries(t)){if(e.has(r))continue;let s=(a,o)=>{let g=o.placement.cta_path??o.placement.ui_path??{};Promise.resolve().then(()=>i(g)).catch(v=>{console.error(`[RevTurbine] uiPathResolvers.${r} failed:`,v);});};e.register(r,s),n.set(r,s);}return ()=>{for(let[r,i]of n)e.get(r)===i&&e.unregister(r);}}function pv(t,e=uv()){if(e.has("snooze"))return ()=>{};let n=(r,i)=>{let s=i.placement,a=typeof s.remind_later_minutes=="number"?s.remind_later_minutes:void 0;t(i.placement.output_id,a!==void 0?a*60:void 0);};return e.register("snooze",n),()=>{e.get("snooze")===n&&e.unregister("snooze");}}var fc={recommended_plan_handle:"",recommended_plan_name:""};function fv(t){let{strategy:e,planOverride:n,currentPlanHandle:r,plans:i}=t;if(i.length===0)return fc;if(e==="custom"){let o=n??"";if(o===""||o===r)return fc;let g=i.find(v=>v.unique_handle===o);return g?{recommended_plan_handle:g.unique_handle,recommended_plan_name:g.name}:fc}if(r==="")return fc;let s=fu(r,i);if(s===null)return fc;let a=i.find(o=>o.unique_handle===s);return {recommended_plan_handle:s,recommended_plan_name:a?.name??s}}var Xp="0123456789ABCDEFGHJKMNPQRSTVWXYZ",Ld=Xp.length,zw=Ld-1,Kw=10,Fd=16;function Gw(t){let e=t,n="";for(let r=0;r<Kw;r+=1){let i=e%Ld;n=Xp[i]+n,e=Math.floor(e/Ld);}return n}function hv(){let t=new Uint8Array(Fd);crypto.getRandomValues(t);let e=new Array(Fd);for(let n=0;n<Fd;n+=1)e[n]=t[n]%Ld;return e}function $w(t){for(let e=t.length-1;e>=0;e-=1){if(t[e]<zw)return t[e]+=1,true;t[e]=0;}return false}function gv(){let t=-1,e=[];return {next(n=Date.now()){n<=t&&e.length===Fd?$w(e)||(t+=1,e=hv()):(t=n,e=hv());let r=Gw(t);for(let i=0;i<e.length;i+=1)r+=Xp[e[i]];return r}}}var Qp=gv();var Zw=new Set([408,429,500,502,503,504]);function Yw(t){return new Promise(e=>setTimeout(e,t))}async function ef(t,e={}){let n=e.retries??2,r=e.baseDelayMs??200,i=e.sleep??Yw,s;for(let a=0;a<=n;a+=1){try{let o=await t();if(o.ok)return {delivered:!0,status:o.status,attempts:a+1};if(!Zw.has(o.status))return {delivered:!1,status:o.status,attempts:a+1};s=new Error(`ingest_status_${o.status}`);}catch(o){s=o instanceof Error?o:new Error(String(o));}a<n&&await i(r*(a+1));}return {delivered:false,error:s,attempts:n+1}}function tf(){return {created:0,dropped:0,redacted:0,sampled:0,deduped:0,queued:0,sent:0,failed:0}}function _v(){let t=typeof IntersectionObserver<"u",e=new Map;function n(i,s,a,o){a.fired||(a.fired=true,a.timer!==null&&(clearTimeout(a.timer),a.timer=null),i.io.unobserve(s),i.tracked.delete(s),a.onExposed(o));}function r(i,s){let a=`${i}|${s}`,o=e.get(a);if(o)return o;let g=new Map,y={io:new IntersectionObserver(I=>{let P=e.get(a);if(P)for(let S of I){let x=g.get(S.target);!x||x.fired||(S.isIntersecting?x.minVisibleMs<=0?n(P,S.target,x,"viewport"):x.timer===null&&(x.timer=setTimeout(()=>n(P,S.target,x,"viewport"),x.minVisibleMs)):x.timer!==null&&(clearTimeout(x.timer),x.timer=null));}},{threshold:i,rootMargin:s}),tracked:g};return e.set(a,y),y}return {supported:t,observe(i,s,a){if(!t){let I=false;return Promise.resolve().then(()=>{I||a("render_fallback");}),()=>{I=true;}}let o=s.threshold??.5,g=s.rootMargin??"0px",v=r(o,g),y={onExposed:a,minVisibleMs:s.minVisibleMs??0,timer:null,fired:false};return v.tracked.set(i,y),v.io.observe(i),()=>{y.fired||(y.timer!==null&&(clearTimeout(y.timer),y.timer=null),v.io.unobserve(i),v.tracked.delete(i));}},disconnect(){for(let i of e.values())i.io.disconnect();e.clear();}}}var nf=_v();var af=["account_id","email","plan","plan_handle","usage","entitlements","custom","personalization"],Ww=new Set(af),Jw=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Xw=Sa();function rf(t){Xw&&console.warn(t);}var Sv=new Set(sd.options),Iv=["usage","account_id","email","email_type","plan","trial","payment_failed","payment_at_risk","tiers","entitlements","instances","custom","personalization","derived_config_version","context_hash","derived_computed_at"],bv=new Set(Iv);function tN(t,e){return Dd(e,"defineUiPathResolvers(resolvers)")}function Dd(t,e){if(!t)return {};let n={};for(let[r,i]of Object.entries(t)){let s=String(r||"").trim();if(!s)throw new Error(`[RevTurbine] ${e} contains an empty action_type key.`);if(typeof i!="function")throw new Error(`[RevTurbine] ${e} contains a non-function resolver for action_type '${s}'.`);n[s]=i;}return n}var Vd={Server:"revturbine_server",CustomEndpoints:"custom_endpoints",LocalOnly:"local_only"};function Nd(t){return t?.playbook??t?.exportedConfig}function nN(t){return {...t,runtimeMode:"revturbine_server"}}function rN(t){return {...t,runtimeMode:"custom_endpoints",endpointOverrides:t.endpointOverrides}}function Qw(t){let e=Dd(t.uiPathResolvers,"createLocalRuntimeConfig(uiPathResolvers)");return {...t,runtimeMode:"local_only",localRuntime:t.localRuntime,uiPathResolvers:e}}function iN(t){return Qw(t)}function sN(t,e,n={}){return {slotId:t,surfaceType:e,entitlementHandle:n.entitlementHandle,planHandle:n.planHandle,placementHandle:n.placementHandle}}function aN(t,e={}){return {entitlementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,planHandle:e.planHandle,placementHandle:e.placementHandle}}function oN(t,e={}){return {placementHandle:t,slotId:e.slotId,surfaceType:e.surfaceType,entitlementHandle:e.entitlementHandle,planHandle:e.planHandle}}function Gs(t,e,n){return {header:t,body:e,cta_label:n,title:t,cta:n}}function lN(t,e,n,r={}){return {userId:t,placementId:e,interactionType:n,treatmentId:r.treatmentId,interactionAt:r.interactionAt,metadata:r.metadata}}function cN(t,e,n){return {eventType:t,payload:e,options:n}}var yv="revturbine:sdk-route-change",qd="sdk_validation_warning",eA="revturbine:decision-cache",tA="revturbine:interaction-state",nA="revturbine:presentation-caps",rA="/api/track",iA="/api/sdk/meta",sA="/api/events/interactions",aA="/api/placements/interactions",oA="revturbine-web-sdk",of="user_context_observed",lA=20,cA=5e3;function Pv(t,e){let n=t[e];if(typeof n=="string"&&n.trim().length>0)return n;let r=Tv(t);if(r){let i=r[e];if(typeof i=="string"&&i.trim().length>0)return i}return null}function Tv(t){return Pe(t.payload)?t.payload:null}var dA=["surface_slot_id","placement_id","payload_id","experiment_id","variant_key"];function uA(t){let e={};for(let n of dA)e[n]=Pv(t,n);return e}var mA=["placement_","gate_","slot_","engagement_"],pA=new Set(["impression","segment_enrolled","segment_unenrolled",of]);function fA(t){let e=rl(t);return e===qd?"derived":pA.has(e)||mA.some(n=>e.startsWith(n))?"automatic":"explicit"}var hA=["decision_id"];function gA(t){let e={};for(let n of hA)e[n]=Pv(t,n);return e}function _A(t){return du(t,pf(8))}async function vv(t){let e=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Uc(new Uint8Array(e))}function pf(t){let e=Math.ceil(t/2),n=new Uint8Array(e);crypto.getRandomValues(n);let r="";for(let i=0;i<n.length;i+=1){let s=n[i].toString(16).padStart(2,"0");r+=s;}return r.slice(0,t)}function yr(){return typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${pf(16)}`}function Ud(){return za()?{}:{url:window.location.href,title:document.title,referrer:document.referrer||void 0}}function xv(){return {id:void 0,custom:{},entitlements:{},usage:{},personalization:{}}}function bA(t,e){let n={};for(let[r,i]of Object.entries(e))(typeof i=="string"||typeof i=="number"||typeof i=="boolean")&&(n[r]=i);return qu(t,n)}function yA(t,e,n){if(t.length===0)return true;let r=new Map;for(let i of t){let s=n.get(i)??"__no_dim__",a=r.get(s)??[];a.push(i),r.set(s,a);}for(let i of r.values())if(!i.some(s=>e.has(s)))return false;return true}var lf=class{constructor(e){T(this,"exportedConfig");this.exportedConfig=e;}getExportedConfig(){return this.exportedConfig}},Md=class Md{constructor(e,n,r,i){T(this,"endpoint",e);T(this,"tenantId",n);T(this,"token",r);T(this,"legacyTargetDefaults",i);T(this,"cached");T(this,"etag");T(this,"lastFetchedAt",0);}getExportedConfig(){return this.cached}async refresh(){let e=Date.now();if(this.cached&&e-this.lastFetchedAt<Md.REFRESH_TTL_MS)return this.cached;try{let n=await fetch(`${this.endpoint}/api/sdk/config`,{method:"GET",headers:{accept:"application/json",authorization:`Bearer ${this.token}`,"x-tenant-id":this.tenantId,...this.etag?{"if-none-match":this.etag}:{}}});if(this.lastFetchedAt=e,n.status===304||!n.ok)return this.cached;let r=await n.text(),i=n.headers.get("x-bundle-sha256");if(i&&await sv(new TextEncoder().encode(r))!==i)return this.cached;let s=JSON.parse(r);av(s);let a=as(s,"GET /api/sdk/config",this.legacyTargetDefaults);return a&&(this.cached=a,this.etag=n.headers.get("etag")??void 0),this.cached}catch{return this.cached}}};T(Md,"REFRESH_TTL_MS",6e4);var cf=Md,df=class{constructor(e,n,r){T(this,"cached");T(this,"resolver");T(this,"legacyTargetDefaults");this.resolver=e,this.cached=r,this.legacyTargetDefaults=n;}getExportedConfig(){return this.cached}async refresh(){let e=as(await this.resolver(),"localRuntime.resolvers.resolveExportedConfig()",this.legacyTargetDefaults);return e&&(this.cached=e),this.cached}},uf=class{constructor(e,n){T(this,"source");T(this,"legacyTargetDefaults");this.source=e,this.legacyTargetDefaults=n;}getExportedConfig(){return as(this.source.getExportedConfig(),"configProvider.getExportedConfig()",this.legacyTargetDefaults)}async refresh(){let e=await this.source.refresh?.();return as(e??this.source.getExportedConfig(),"configProvider.refresh()",this.legacyTargetDefaults)}},hc=class hc{constructor(e){T(this,"tenantId");T(this,"apiKey");T(this,"ingestPublicKey");T(this,"environmentId");T(this,"testTraffic");T(this,"analyticsEnabled");T(this,"anonymousTelemetryEnabled");T(this,"previewMode");T(this,"telemetryConsent");T(this,"telemetryCounters",tf());T(this,"maxBatchSize");T(this,"flushIntervalMs");T(this,"flushTimer");T(this,"batchingTeardown",[]);T(this,"anonTelemetryNoticeShown",false);T(this,"piiRedactionWarned",false);T(this,"endpoint");T(this,"runtimeMode");T(this,"endpointOverrides");T(this,"localRuntime");T(this,"localStorageKey");T(this,"mode");T(this,"policy");T(this,"extensionEnabled");T(this,"placementBehaviorOverrides");T(this,"derivedPlacementBehaviorMemo",null);T(this,"providerFailureSlotBehavior");T(this,"uiPathResolvers");T(this,"unbridgeUiPathCtaResolvers",()=>{});T(this,"unregisterBuiltinSnoozeResolver",()=>{});T(this,"persistentStore");T(this,"sessionStore");T(this,"anonymousId");T(this,"sessionId");T(this,"decisionCache",new Map);T(this,"interactionState",new Map);T(this,"interactionQueue",[]);T(this,"defaultDecisionTtlMs",6e4);T(this,"defaultDismissCooldownMs",1440*60*1e3);T(this,"dismissCooldownDefaultMs",10080*60*1e3);T(this,"defaultRemindLaterMs",3600*1e3);T(this,"defaultUsageWarningPercent",80);T(this,"defaultTrialExpiringDays",3);T(this,"events",[]);T(this,"placements",new Map);T(this,"syncedSurfaceSlotIds",new Set);T(this,"userContext");T(this,"pageContext");T(this,"clientContextToken");T(this,"serverUserContextProvider");T(this,"lastServerContextHash");T(this,"usageBalances",{});T(this,"localDecisionsByPlacementId",new Map);T(this,"localPlacementsByLookupKey",new Map);T(this,"localEntitlementsByHandle",new Map);T(this,"localUserContextsByUserId",new Map);T(this,"localTrialStatus",{in_trial:false});T(this,"presentationCapsByKey",new Map);T(this,"usageLimitByEntitlement",new Map);T(this,"usageTokenPrefixByEntitlement",new Map);T(this,"segmentIdsByPredicateField",new Map);T(this,"configuredSegmentsById",new Map);T(this,"dirtySegmentIds",new Set);T(this,"segmentMembershipBySegmentId",new Map);T(this,"segmentMembershipUserId");T(this,"lastTrialTriggerStage","none");T(this,"configProvider");T(this,"branding");T(this,"apiBranding");T(this,"cachedPlacementResolver");T(this,"cachedPlacementResolverConfig");T(this,"sdkDisabledByProviderFailure",false);T(this,"sdkDisabledReason");T(this,"providerRegistry");T(this,"placementTypeRegistry");T(this,"impressionHistory");T(this,"emittedResolutionDiagnostics",new Set);T(this,"emittedSdkErrors",new Set);if(this.tenantId=e.tenantId,this.apiKey=e.apiKey,this.ingestPublicKey=e.ingestPublicKey,this.environmentId=e.environmentId?.trim()||"default",this.testTraffic=e.test===true,this.analyticsEnabled=e.analytics!==false,this.anonymousTelemetryEnabled=e.anonymousTelemetry!==false,this.previewMode=e.previewMode===true,this.telemetryConsent=e.telemetry?.consent??"granted",this.maxBatchSize=Math.max(1,e.eventBatching?.maxBatchSize??lA),this.flushIntervalMs=Math.max(0,e.eventBatching?.flushIntervalMs??cA),this.endpoint=e.endpoint.replace(/\/$/,""),this.runtimeMode=e.runtimeMode??Vd.Server,this.endpointOverrides=e.endpointOverrides??{},this.localRuntime=e.localRuntime,this.branding=e.branding,this.apiBranding=e.apiBranding,this.configProvider=this.resolveConfigProvider(e),this.localStorageKey=e.localRuntime?.storageKey??`revturbine:${this.tenantId}:local-runtime`,this.mode=e.mode,this.policy={inferUser:e.contextPolicy?.inferUser??true,inferPage:e.contextPolicy?.inferPage??true,routerAutoTrack:e.contextPolicy?.routerAutoTrack??true},this.extensionEnabled=!!e.extension?.enabled,this.placementBehaviorOverrides={...e.placementBehavior},this.providerFailureSlotBehavior=e.providerFailureSlotBehavior??"invisible",this.uiPathResolvers=Dd(e.uiPathResolvers,"RevTurbineInitOptions.uiPathResolvers"),this.persistentStore=ws(e.persistentStorage),this.sessionStore=um(e.sessionStorage),this.userContext={usage:{},...this.policy.inferUser?xv():{},...e.user||{}},this.pageContext={...this.policy.inferPage?Ud():{},...e.page||{},tags:nl(e.page?.tags)},this.anonymousId=this.resolveAnonymousId(),this.sessionId=yr(),this.providerRegistry=new Tl,this.placementTypeRegistry=new Uo,this.impressionHistory=new sm({store:new Xc({storage:this.persistentStore,tenantId:this.tenantId}),userId:this.userContext.id??this.anonymousId}),dv(this.placementTypeRegistry),e.domainProviders)for(let n of e.domainProviders)this.providerRegistry.register(n);this.warnOnUiPathResolverCoverageGaps(),this.unbridgeUiPathCtaResolvers=mv(this.uiPathResolvers),this.unregisterBuiltinSnoozeResolver=pv((n,r)=>{this.snooze(n,r);}),this.hydrateDecisionCache(),this.hydrateInteractionState(),this.hydratePresentationCaps(),this.hydrateLocalRuntimeState(),this.impressionHistory.hydrate(),this.rebuildSegmentPredicateFieldIndex(),this.refreshExportedConfigSnapshot(),this.recalculateDerivedUsageTraits(),wr()&&this.policy.routerAutoTrack&&this.installRouteTracking(),wr()&&this.extensionEnabled&&this.installBridge(),this.capture("page_view",{mode:this.mode,runtime_mode:this.runtimeMode,source:"sdk_init",placement_behavior_flags:this.placementBehavior}),this.startEventBatchFlushing(),this.emitSdkInitTelemetry();}isLocalOnlyMode(){return this.runtimeMode===Vd.LocalOnly}resolveConfigProvider(e){let n={tenantId:e.tenantId,environmentId:e.environmentId??"default"};if(e.configProvider)return new uf(e.configProvider,n);let r=as(Nd(e.localRuntime),"localRuntime.playbook",n),i=e.localRuntime?.resolvers?.resolveExportedConfig;if(i)return new df(i,n,r);if(r)return new lf(r);let s=e.runtimeMode??Vd.Server,a=e.ingestPublicKey??e.apiKey;if(s!==Vd.LocalOnly&&e.endpoint&&a)return new cf(e.endpoint,e.tenantId,a,n)}async refreshExportedConfigSnapshot(){try{await this.configProvider?.refresh?.(),this.rebuildSegmentPredicateFieldIndex();}catch{}}getConfiguredExportedConfig(){return this.configProvider?.getExportedConfig()}get placementBehavior(){let e=this.derivePlacementBehaviorFromPlaybook();return {enableClientCapsEnforcement:this.placementBehaviorOverrides.enableClientCapsEnforcement??e.enableClientCapsEnforcement,enableAutoGatedPlacement:this.placementBehaviorOverrides.enableAutoGatedPlacement??e.enableAutoGatedPlacement,enableTrialAutoTriggers:this.placementBehaviorOverrides.enableTrialAutoTriggers??e.enableTrialAutoTriggers}}derivePlacementBehaviorFromPlaybook(){let e=this.getConfiguredExportedConfig();if(this.derivedPlacementBehaviorMemo&&this.derivedPlacementBehaviorMemo.config===e)return this.derivedPlacementBehaviorMemo.flags;let n=e?.placements??[],s={enableClientCapsEnforcement:[...n.flatMap(a=>a.payloads??[]),...e?.placement_payloads??[]].some(a=>a.caps?.max_per_period!==void 0||a.caps?.cooldown_days!==void 0||a.remind_later_minutes!==void 0&&a.remind_later_minutes!==null),enableAutoGatedPlacement:n.some(a=>a.category==="gated"),enableTrialAutoTriggers:n.some(a=>a.category==="trials")};return this.derivedPlacementBehaviorMemo={config:e,flags:s},s}rebuildSegmentPredicateFieldIndex(){this.segmentIdsByPredicateField.clear(),this.configuredSegmentsById.clear();let n=this.getConfiguredExportedConfig()?.segments??[];for(let r of n)if(this.configuredSegmentsById.set(r.handle,r),!(!r.predicates||r.predicates.length===0))for(let i of r.predicates){let s=String(i.field||"").trim();if(!s)continue;let a=this.segmentIdsByPredicateField.get(s)??new Set;a.add(r.handle),this.segmentIdsByPredicateField.set(s,a);}this.markAllSegmentsDirty();}getOrBuildPlacementResolver(){if(this.localRuntime?.resolvers?.getPlacementDecision)return this.localRuntime.resolvers.getPlacementDecision;let e=this.getConfiguredExportedConfig();if(!e)return;if(this.cachedPlacementResolver&&this.cachedPlacementResolverConfig===e)return this.cachedPlacementResolver;let n=this.localRuntime?.placements??(Array.isArray(e.placements)?{placements:e.placements}:void 0);if(n)return this.cachedPlacementResolver=Na({placements:n,exportedConfig:e,impressionHistory:this.impressionHistory}),this.cachedPlacementResolverConfig=e,this.cachedPlacementResolver}synthesizeProviderContext(){let e=this.userContext.plan,n=this.userContext.usage,r=this.localTrialStatus,i=this.userContext.payment_failed,s=this.userContext.payment_at_risk,a=this.userContext.tiers,o=a!==void 0&&Object.keys(a).length>0,g=this.userContext.experiments,v=g!==void 0&&Object.keys(g).length>0;if(!e&&!n&&!o&&!v)return;let y={};if(n&&typeof n=="object"){let P=ls(n);for(let[S,x]of Object.entries(n)){if(!x||typeof x!="object")continue;let O=typeof x.amount=="number"?x.amount:P[S]??0,H=typeof x.limit=="number"?x.limit:0,z=H>0?Math.max(0,H-O):0;y[S]={used:O,limit:H,remaining:z,unit:typeof x.unit=="string"?x.unit:void 0,reset_date:typeof x.reset_date=="string"?x.reset_date:void 0};}}let I={...r.in_trial!==void 0?{trialActive:r.in_trial}:{},...r.trial_limit_type!==void 0?{trialLimitType:r.trial_limit_type}:{},...r.progress_percent!==void 0?{trialProgressPercent:r.progress_percent}:{},...r.days_remaining!==void 0?{trialDaysRemaining:r.days_remaining}:{},...r.day_number!==void 0&&r.days_remaining!==void 0?{trialDaysTotal:r.day_number+r.days_remaining}:{},...r.state!==void 0?{trialState:r.state}:{},...r.usage_entitlement_handle!==void 0?{trialUsageEntitlementHandle:r.usage_entitlement_handle}:{},...r.usage_consumed!==void 0?{trialUsageConsumed:r.usage_consumed}:{},...r.usage_limit!==void 0?{trialUsageLimit:r.usage_limit}:{}};return {...e?{plan:{currentPlanHandle:e.id??e.name??"",currentPlanName:e.name,...I,...i!==void 0?{paymentFailed:i}:{},...s!==void 0?{paymentAtRisk:s}:{}}}:{},...Object.keys(y).length>0||o?{entitlements:{entries:{},usage:y,...o?{tiers:a}:{}}}:{},...v?{experiments:{assignments:g}}:{}}}markAllSegmentsDirty(){this.dirtySegmentIds.clear();for(let e of this.configuredSegmentsById.keys())this.dirtySegmentIds.add(e);this.segmentMembershipBySegmentId.clear();}markSegmentsDirtyForFields(e){for(let n of e){let r=this.segmentIdsByPredicateField.get(n);if(r)for(let i of r)this.dirtySegmentIds.add(i);}}toSegmentEvaluationTraits(e,n,r){return Dc(e,n,r)}buildTargetingState(e){return Mc(e,this.getConfiguredExportedConfig(),this.usageBalances)}markSegmentsDirtyFromContextChange(e,n){if(this.configuredSegmentsById.size===0)return;let r=e.id||this.anonymousId,i=n.id||this.anonymousId;if(r!==i){this.segmentMembershipUserId=i,this.markAllSegmentsDirty();return}let s=this.buildTargetingState(e),a=this.buildTargetingState(n),o=new Set,g=new Set([...Object.keys(s.segmentTraits),...Object.keys(a.segmentTraits)]);for(let v of g)s.segmentTraits[v]!==a.segmentTraits[v]&&o.add(v);this.markSegmentsDirtyForFields(o);}currentPathname(){if(this.pageContext.url)try{return new URL(this.pageContext.url).pathname}catch{}return wr()?window.location.pathname:"/"}disableForProviderFailure(e){this.sdkDisabledByProviderFailure||(this.sdkDisabledByProviderFailure=true,this.sdkDisabledReason=e,this.decisionCache.clear(),this.persistDecisionCache(),console.warn(`[RevTurbine] SDK disabled after provider fallback chain failed: ${e}`));}isDisabledByProviderFailure(){return this.sdkDisabledByProviderFailure}disabledDecisionForPlacement(e,n){let r=this.providerFailureSlotBehavior==="placeholder",i=r?`${n??e} temporarily unavailable`:`${n??e} unavailable`,s=r?"This placement is in safe fallback mode because all configured providers failed.":"This placement is currently hidden because provider fallback resolution failed.";return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",placement_handle:e}),{placementId:e,requestId:yr(),visible:r,decisionSource:"fallback",reasonCodes:["sdk_disabled_provider_failure"],suppressionReason:r?void 0:"sdk_disabled_provider_failure",content:Gs(i,s,r?"Retry later":"Continue")}}disabledPlacementOutputForConfig(e){if(this.providerFailureSlotBehavior!=="placeholder")return null;let n=`disabled_output_${yr()}`,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 Ru(e)}localLookupMatchesConfig(e,n){if(n.slotId&&e.slotId&&e.slotId!==n.slotId||n.surfaceType&&e.surfaceType&&e.surfaceType!==n.surfaceType)return false;let r=(i,s)=>!i||!s?true:i===s;return r(n.entitlementHandle,e.entitlementHandle)&&r(n.planHandle,e.planHandle)&&r(n.placementHandle,e.placementHandle)}localOutputMatchesConfig(e,n){return pu(e,n.planHandle)}applyCategoryConflictSuppression(e){return Bc(e)}resolveLocalPlacementFromCandidates(e,n){return wu(e,true,{fixedOnly:n?.fixedOnly??false})}localPlacementForConfig(e){let n=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey(e));if(n&&!this.localOutputMatchesConfig(n,e))return null;let r=[];for(let[i,s]of this.localPlacementsByLookupKey.entries()){if(!s)continue;let a=mu(i);this.localLookupMatchesConfig(a,e)&&this.localOutputMatchesConfig(s,e)&&r.push(s);}return n&&!r.some(i=>i.output_id===n.output_id)&&r.push(n),this.resolveLocalPlacementFromCandidates(r,e)}hydrateLocalRuntimeState(){if(!this.isLocalOnlyMode())return;let e=this.localRuntime?.initialData;if(e?.placementDecisionsByPlacementId)for(let[r,i]of Object.entries(e.placementDecisionsByPlacementId))this.localDecisionsByPlacementId.set(r,i);if(e?.placementsByLookupKey)for(let[r,i]of Object.entries(e.placementsByLookupKey))this.localPlacementsByLookupKey.set(r,i);if(e?.entitlementByHandle)for(let[r,i]of Object.entries(e.entitlementByHandle))this.localEntitlementsByHandle.set(r,i);if(e?.userContextByUserId)for(let[r,i]of Object.entries(e.userContextByUserId))this.localUserContextsByUserId.set(r,i);e?.trialStatus&&(this.localTrialStatus=e.trialStatus);let n=this.persistentStore.getItem(this.localStorageKey);if(!n){this.persistLocalRuntimeState();return}try{let r=JSON.parse(n);r.userContext&&(this.userContext=this.mergeUserContext(r.userContext)),r.pageContext&&(this.pageContext=this.mergePageContext(r.pageContext)),r.usageBalances&&(this.usageBalances={...this.usageBalances,...r.usageBalances});for(let i of r.placements||[])this.placements.set(i.id,i);for(let[i,s]of Object.entries(r.decisions||{}))this.localDecisionsByPlacementId.set(i,s);for(let[i,s]of Object.entries(r.placementLookup||{}))this.localPlacementsByLookupKey.set(i,s);for(let[i,s]of Object.entries(r.entitlements||{}))this.localEntitlementsByHandle.set(i,s);for(let[i,s]of Object.entries(r.userContexts||{}))this.localUserContextsByUserId.set(i,s);r.trialStatus&&(this.localTrialStatus=r.trialStatus);}catch{this.persistentStore.removeItem(this.localStorageKey),this.persistLocalRuntimeState();}}persistLocalRuntimeState(){if(this.isLocalOnlyMode())try{let e={userContext:this.userContext,pageContext:this.pageContext,usageBalances:this.usageBalances,placements:Array.from(this.placements.values()),decisions:Object.fromEntries(this.localDecisionsByPlacementId.entries()),placementLookup:Object.fromEntries(this.localPlacementsByLookupKey.entries()),entitlements:Object.fromEntries(this.localEntitlementsByHandle.entries()),userContexts:Object.fromEntries(this.localUserContextsByUserId.entries()),trialStatus:this.localTrialStatus};this.persistentStore.setItem(this.localStorageKey,JSON.stringify(e));}catch{}}decisionCacheStorageKey(){return `${eA}:${this.tenantId}:${this.anonymousId}`}interactionStateStorageKey(){return `${tA}:${this.tenantId}:${this.anonymousId}`}presentationCapsStorageKey(){return `${nA}:${this.tenantId}:${this.anonymousId}`}hydrateDecisionCache(){let e=this.sessionStore.getItem(this.decisionCacheStorageKey());if(e)try{let n=JSON.parse(e),r=Date.now();Object.entries(n).forEach(([i,s])=>{!s||typeof s!="object"||!Number.isFinite(s.expiresAt)||s.expiresAt<=r||this.decisionCache.set(i,s);});}catch{this.sessionStore.removeItem(this.decisionCacheStorageKey());}}persistDecisionCache(){let e=Date.now(),n=Object.fromEntries(Array.from(this.decisionCache.entries()).filter(([,r])=>r.expiresAt>e));try{this.sessionStore.setItem(this.decisionCacheStorageKey(),JSON.stringify(n));}catch{}}hydrateInteractionState(){let e=this.persistentStore.getItem(this.interactionStateStorageKey());if(e)try{let n=JSON.parse(e);Object.entries(n).forEach(([r,i])=>{!i||typeof i!="object"||this.interactionState.set(r,i);});}catch{this.persistentStore.removeItem(this.interactionStateStorageKey());}}persistInteractionState(){let e=Object.fromEntries(this.interactionState.entries());try{this.persistentStore.setItem(this.interactionStateStorageKey(),JSON.stringify(e));}catch{}}hydratePresentationCaps(){let e=this.persistentStore.getItem(this.presentationCapsStorageKey());if(e)try{let n=JSON.parse(e);for(let[r,i]of Object.entries(n)){if(!i||typeof i!="object")continue;let s=Array.isArray(i.seenAt)?i.seenAt.filter(o=>Number.isFinite(o)&&o>0):[],a=Number.isFinite(i.cooldownUntil)?i.cooldownUntil:void 0;this.presentationCapsByKey.set(r,{seenAt:s,cooldownUntil:a});}}catch{this.persistentStore.removeItem(this.presentationCapsStorageKey());}}persistPresentationCaps(){try{let e=Object.fromEntries(this.presentationCapsByKey.entries());this.persistentStore.setItem(this.presentationCapsStorageKey(),JSON.stringify(e));}catch{}}resolveContextPlanRaw(){let e=this.userContext.plan;if(Pe(e)&&typeof e.id=="string"&&e.id)return e.id;let n=this.userContext.custom;return typeof n?.plan=="string"&&n.plan?n.plan:typeof n?.plan_handle=="string"&&n.plan_handle?n.plan_handle:""}activePlanIdentifiers(e){let n=this.resolveContextPlanRaw(),r=String(n||"").toLowerCase(),i=new Set;if(!r)return i;i.add(r);for(let s of e.plans??[]){let a=typeof s.unique_handle=="string"?s.unique_handle.toLowerCase():"";a===r&&i.add(a);}return i}ruleTargetsActivePlan(e,n){let i=(Array.isArray(e.targets)?e.targets:[]).filter(s=>Pe(s)&&s.kind==="plan");return i.length===0?true:i.some(s=>typeof s.id=="string"&&n.has(s.id.toLowerCase()))}hydrateUsageLimitRulesFromExportedConfig(){let e=this.getConfiguredExportedConfig();if(!e)return;this.usageLimitByEntitlement.clear();let n=this.activePlanIdentifiers(e),r=new Map,i=e.entitlements??[];for(let a of i){let o=typeof a.unique_handle=="string"?a.unique_handle:"";o&&r.set(o,o);}let s=e.entitlement_rules??[];for(let a of s){if(!Pe(a))continue;let o=typeof a.entitlement_id=="string"?a.entitlement_id:"";if(!o)continue;let g=typeof a.kind=="string"?a.kind:"";if(!(g==="usage_limit"||g==="credits"||g==="seat"))continue;let y=r.get(o)??"",I=typeof a.unit=="string"?a.unit:"",P=hu(I),S=P&&!gu(P)?P:Pa(y||o);S&&(this.usageTokenPrefixByEntitlement.set(o,S),y&&this.usageTokenPrefixByEntitlement.set(y,S));let x=Number(a.limit_value??a.allowance_value);if(!Number.isFinite(x)||x<=0||!this.ruleTargetsActivePlan(a,n))continue;let O=this.defaultUsageWarningPercent;this.usageLimitByEntitlement.set(o,{limit:x,warningPercent:O}),y&&this.usageLimitByEntitlement.set(y,{limit:x,warningPercent:O});}}recalculateDerivedUsageTraits(){let e=this.getConfiguredExportedConfig();this.hydrateUsageLimitRulesFromExportedConfig();let n=Lu({context:this.userContext,exportedConfig:e,usageBalances:this.usageBalances,usageTokenPrefixByEntitlement:this.usageTokenPrefixByEntitlement,usageThresholdLookup:i=>this.usageThresholdForEntitlement(i)}),r=this.deriveRecommendedPlanTokens(e);this.userContext={...this.userContext,personalization:{...n,...r}};}deriveRecommendedPlanTokens(e,n){let r={recommended_plan_handle:"",recommended_plan_name:""};if(!e?.plans?.length)return r;let i=this.resolveContextPlanRaw(),s=String(i||"").toLowerCase(),a=e.plans.map(o=>({source_id:o.unique_handle,unique_handle:o.unique_handle,name:o.name,tier_position:o.tier_position??0,sort_order:o.sort_order??0}));return fv({strategy:n?.strategy??"next_tier_up",planOverride:n?.planOverride,currentPlanHandle:s,plans:a})}getPersonalizationTokens(e){let n={},r=this.userContext.personalization??{};for(let[i,s]of Object.entries(r))i!=="user_id"&&(typeof s=="string"||typeof s=="number")&&(n[i]=s);if(n.plan_name===void 0){let i=Js(this.getConfiguredExportedConfig(),this.userContext.plan);i?n.plan_name=i:typeof this.userContext.plan=="object"&&this.userContext.plan?.name&&(n.plan_name=this.userContext.plan.name);}if(e?.recommendation_strategy){let i=this.deriveRecommendedPlanTokens(this.getConfiguredExportedConfig(),{strategy:e.recommendation_strategy,planOverride:e.recommendation_plan_override??void 0});n.recommended_plan_handle=i.recommended_plan_handle,n.recommended_plan_name=i.recommended_plan_name;}return n}getEntitlements(){return Object.fromEntries(this.localEntitlementsByHandle.entries())}getUsage(){let e={...ls(this.userContext.usage),...this.usageBalances},n={};for(let[r,i]of Object.entries(e)){if(!Number.isFinite(i))continue;let s=this.usageTokenPrefixByEntitlement.get(r)??Pa(r)??r,a=this.usageThresholdForEntitlement(r);n[s]={current:i,...a?.limit!==void 0?{limit:a.limit}:{}};}return n}getPolicy(){let e=this.getConfiguredExportedConfig();return {contextPolicy:this.policy,placementBehavior:this.placementBehavior,runtimeMode:this.runtimeMode,...typeof e?.format_version=="string"?{exportedConfigVersion:e.format_version}:{}}}getBranding(){return om({explicit:this.branding,legacyConfigTheme:this.getConfiguredExportedConfig()?.theme,apiBranding:this.apiBranding})}setApiBranding(e){this.apiBranding=e;}deriveLocalEntitlementFromConfiguredRules(e,n){let r=this.getConfiguredExportedConfig();if(!r)return null;let i=this.resolveContextPlanRaw(),s=String(i||"").toLowerCase(),a=this.getTargeting(),o=new Set(a.segmentIds??[]),{trialGrantedEntitlementHandles:g,effectivePlanHandle:v}=this.resolveReverseTrialGrants(r);return ol({handle:e,context:n,currentPlanHandle:s,segmentIds:o,usageBalances:this.usageBalances,userUsage:this.userContext.usage,exportedConfig:r,...g!==void 0?{trialGrantedEntitlementHandles:g}:{},...v!==void 0?{effectivePlanHandle:v}:{}})}resolveReverseTrialGrants(e){let n=this.localTrialStatus;if(!n.in_trial||n.trial_type!=="reverse")return {};let r=n.plan_handle;if(!r)return {};let s=(e.reverse_trial_rules??[]).find(a=>a.fallback_plan_id===r&&a.is_active!==false);return !s||s.entitlements_during_trial.length===0?{}:{trialGrantedEntitlementHandles:new Set(s.entitlements_during_trial),effectivePlanHandle:s.premium_plan_id}}getTargeting(){let e=this.userContext.id||this.anonymousId,n=this.localUserContextsByUserId.get(e),r=this.getConfiguredExportedConfig(),i=Js(r,this.userContext.plan),s=i??n?.plan??(this.resolveContextPlanRaw()||void 0),a=[...r?.segments??[]],o=Array.from(new Set(a.flatMap(P=>(P.predicates??[]).map(S=>S.field)))).sort((P,S)=>P.localeCompare(S)),g={...n?.traits??{},...this.userContext.custom??{}};for(let[P,S]of Object.entries(this.userContext.entitlements??{}))g[P]===void 0&&(g[P]=S);i&&g.plan_name===void 0&&(g.plan_name=i),s&&g.plan===void 0&&(g.plan=s);let v={...n?.usage??{},...ls(this.userContext.usage),...this.usageBalances};for(let[P,S]of Object.entries(v))g[P]===void 0&&(g[P]=S);let y={};for(let[P,S]of Object.entries(g))(typeof S=="string"||typeof S=="number"||typeof S=="boolean")&&(y[P]=S);if(this.segmentMembershipUserId!==e&&(this.segmentMembershipUserId=e,this.markAllSegmentsDirty()),a.length>0&&this.segmentIdsByPredicateField.size===0&&this.rebuildSegmentPredicateFieldIndex(),a.length>0&&this.dirtySegmentIds.size>0){for(let P of this.dirtySegmentIds){let S=this.configuredSegmentsById.get(P)??a.find(O=>O.handle===P);if(!S){this.segmentMembershipBySegmentId.delete(P);continue}let x=ml([S],y).length>0;this.segmentMembershipBySegmentId.set(P,x);}this.dirtySegmentIds.clear();}let I=a.length>0?a.filter(P=>this.segmentMembershipBySegmentId.get(P.handle)===true).map(P=>P.handle):[...n?.segmentIds??[]];return {userId:e,segmentIds:I,traits:g,...s?{plan:s}:{},...Object.keys(v).length>0?{usage:v}:{},configuredSegments:a,configuredTraitFields:o}}async explainPlacementDecision(e){let n=await this.getPlacementDecision(e),r=this.getTargeting(),i=this.getEntitlements(),s=this.getPolicy(),a=this.getConfiguredExportedConfig(),o=new Set(r.segmentIds),g=r.configuredSegments.map(Q=>{let Ft=Array.isArray(Q.predicates)?Q.predicates.map(sn=>bA(sn,r.traits)):[],rn=Ft.length>0?Ft.every(sn=>sn.matched):o.has(Q.handle);return {segmentId:Q.handle,...Q.name?{segmentName:Q.name}:{},matched:rn,predicates:Ft}}),v=new Map,y=new Map;if(Array.isArray(a?.entitlements))for(let Q of a.entitlements){let Ft=Nn(Q.unique_handle),rn=Ft;rn&&Ft&&v.set(rn,Ft);let sn=Nn(Q.type);rn&&sn&&y.set(rn,sn);}let I=new Map;if(Array.isArray(a?.plans))for(let Q of a.plans){let Ft=Nn(Q.unique_handle),rn=Ft;rn&&Ft&&I.set(rn,Ft);}let S=(Nn(r.plan,r.traits.plan,r.traits.plan_handle,r.traits.plan_id)??"").toLowerCase(),x=new Map;if(Array.isArray(a?.segments))for(let Q of a.segments){let Ft=Nn(Q.handle),rn=Nn(Q.dimension_id);Ft&&rn&&x.set(Ft,rn);}let O=Array.isArray(a?.entitlement_rules)?a.entitlement_rules.map((Q,Ft)=>{let rn=Nn(Q.id)??`entitlement_rule_${Ft}`,sn=Nn(Q.entitlement_id),ut=sn?v.get(sn):void 0,kn=Array.isArray(Q.targets)?Q.targets.filter(He=>He.kind==="plan").map(He=>He.id):[],Wn=kn.map(He=>I.get(He)??He),wt=Array.isArray(Q.segment_ids)?Q.segment_ids.filter(He=>typeof He=="string"):[],an=Nn(Q.kind),qn=!S||kn.some(He=>He.toLowerCase()===S),vr=yA(wt,o,x),on=qn&&vr,en=ut?i[ut]:sn?i[sn]:void 0,dr=on?en?.status??"unknown":"unknown",gn;if(on)switch(an){case "feature":gn=Q.enabled===false?"disables feature":"grants access";break;case "capability_tier":{let He=Nn(Q.tier_name);gn=He?`unlocks ${He} tier`:"unlocks capability tier";break}case "usage_limit":{let He=typeof Q.limit_value=="number"?Q.limit_value:void 0,nr=Nn(Q.unit)??"",oi=Nn(Q.period_scope)??"",vt=oi?` / ${oi.replace("per_","")}`:"";gn=He!=null?`sets limit to ${He.toLocaleString()}${nr?` ${nr}`:""}${vt}`:"sets usage limit";break}case "credits":{let He=Q.allowance_value,nr=typeof He=="number"?He:void 0,oi=Nn(Q.unit)??"credits",vt=Nn(Q.reset_period)??"",xr=vt?` / ${vt.replace("per_","")}`:"";gn=nr!=null?`grants ${nr.toLocaleString()} ${oi}${xr}`:"grants credit allowance";break}case "seat":{let He=Q.included_count,nr=typeof He=="number"?He:void 0;gn=nr!=null?`includes ${nr} seat${nr===1?"":"s"}`:"includes seats";break}default:if(sn){let He=y.get(sn);He==="feature"?gn="grants access":He&&(gn=`${He.replace(/_/g," ")} entitlement`);}break}return {ruleId:rn,...sn?{entitlementId:sn}:{},...ut?{entitlementHandle:ut}:{},...an?{kind:an}:{},planScopes:Wn,planIds:kn,...wt.length>0?{segmentIds:wt}:{},matchesPlan:qn,matchesSegment:vr,matched:on,outcome:dr,...gn?{outcomeDescription:gn}:{},...en?.reason?{reason:en.reason}:{}}}):[],H=Nn(n.output?.output_id),z=this.placements.get(e.placementId),se=Nn(z?.name)??"",Ie=Array.isArray(z?.metadata?.surface_template_ids)?z.metadata.surface_template_ids:[],K=[],M=new Set;if(Array.isArray(a?.placements))for(let Q of a.placements){if(!Q||typeof Q!="object")continue;let Ft=Nn(Q.id)??"",rn=Nn(Q.name)??"";if(M.has(Ft))continue;let sn=Nn(n.output?.rule_id);if(sn&&Ft===sn){M.add(Ft),K.push(Q);continue}if(se&&(Ft===se||rn===se||Ft===`pl_${se}`||rn===`pl_${se}`)){M.add(Ft),K.push(Q);continue}Ie.length>0&&(Q.payloads??[]).some(Wn=>(Wn.surfaces??[]).some(an=>{let qn=Nn(an.template_id);return qn?Ie.includes(qn):false}))&&(M.add(Ft),K.push(Q));}let Le=K.flatMap(Q=>(Q.payloads??[]).map(rn=>{let sn=rn.target,ut=sn?.plan_ids??[],kn=ut.map(dr=>I.get(dr)??dr),Wn=sn?.segment_chips??[],an=(rn.surfaces??[]).map(dr=>Nn(dr.template_id)).filter(dr=>typeof dr=="string"),qn=ut.length===0||!S||ut.some(dr=>dr.toLowerCase()===S),vr=Wn.length===0||Wn.some(dr=>o.has(dr)),on="active",en=on==="active"&&qn&&vr;return {payloadId:String(rn.id??""),placementId:String(Q.id??""),placementName:String(Q.name??""),status:on,planIds:ut,planScopes:kn,segmentChips:Wn,surfaceTemplateIds:an,matchesPlan:qn,matchesSegment:vr,eligible:en,selected:!!H&&H===String(rn.id??"")}})),jt=n.output?this.extractPlacementCapPolicies(n.output).flatMap(Q=>Q.rules.length===0&&Q.cooldownMs===void 0?[]:Q.rules.length===0?[{count:0,period:"session",cooldownMs:Q.cooldownMs}]:Q.rules.map(Ft=>({count:Ft.count,period:Ft.period,...Q.cooldownMs!==void 0?{cooldownMs:Q.cooldownMs}:{}}))):[],Yn={ruleId:n.output?.rule_id,decisionId:n.output?.decision_id,category:n.output?.category,suppressionReason:n.suppressionReason,reasonCodes:n.reasonCodes,capPolicies:jt};return {generatedAt:new Date().toISOString(),input:e,decision:n,targeting:r,policy:s,entitlements:i,segments:g,entitlementRules:O,eligiblePayloads:Le,placementRules:Yn}}usageThresholdForEntitlement(e){return Pu(e,this.usageLimitByEntitlement,this.localEntitlementsByHandle,this.usageBalances,this.defaultUsageWarningPercent)}evaluateUsageThresholdCrossings(e,n){return Vu(e,n,i=>this.usageThresholdForEntitlement(i)).map(i=>this.emitTrigger(i.type,{entitlement_handle:i.entitlement_handle,current_usage:i.current_usage,usage_limit:i.usage_limit,usage_percent:i.usage_percent,threshold:i.threshold}))}deriveTrialTriggerStage(e){return Uu(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=yr();return this.persistentStore.setItem(e,r),r}catch{return yr()}}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(za())return;let e=window.history;if(e.__rtPatched)return;let n=()=>{window.dispatchEvent(new CustomEvent(yv,{detail:{path:window.location.pathname,title:document.title}}));},r=e.pushState.bind(e);e.pushState=((...s)=>{r(...s),n();});let i=e.replaceState.bind(e);e.replaceState=((...s)=>{i(...s),n();}),window.addEventListener("popstate",n),window.addEventListener(yv,s=>{let a=s.detail;this.onRouteChange({path:a.path,title:a.title,tags:a.tags});}),e.__rtPatched=true;}mergeUserContext(e){return ju(this.userContext,e)}mergePageContext(e){return {...this.pageContext,...e,tags:nl(e.tags||this.pageContext.tags)}}collectPageContextIssues(){let e=[],n={...this.policy.inferPage?Ud():{},...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=Tv(e),i=typeof e.placement_id=="string"&&e.placement_id.trim()?e.placement_id:typeof r?.placement_id=="string"?r.placement_id:null;return typeof i=="string"&&i.trim()&&(this.placements.has(i)||n.push({code:"unknown_placement_id",reason:"Payload placement_id is not registered in SDK runtime.",details:{placement_id:i}})),n}buildValidationWarningEvent(e,n,r){return this.toEventEnvelope(qd,{source_event_type:e,warning_count:n.length,warning_codes:n.map(i=>i.code),warnings:n,page_context:{url:this.pageContext.url??null,title:this.pageContext.title??null},payload_snapshot:Pe(r)?r:null})}toEventEnvelope(e,n){let r={...this.policy.inferPage?Ud():{},...this.pageContext},i=r.url||(wr()?window.location.href:""),s=(()=>{try{return new URL(i).pathname}catch{return wr()?window.location.pathname:"/"}})();return {tenant_id:this.tenantId,type:e,level:"INFO",message:`${e} captured by ${this.mode} runtime`,url:i,path:s,page_title:r.title||(wr()?document.title:""),event_time:new Date().toISOString(),anonymous_id:this.anonymousId,user_id:this.userContext.id||null,session_id:this.sessionId,tags:nl(r.tags),identity:{tenant_id:this.tenantId,user_id:this.userContext.id||null,anonymous_id:this.anonymousId,traits:e===of?{}:{...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&&wr()}diagnosticTelemetryActive(){return this.anonymousTelemetryEnabled&&this.analyticsEnabled&&!this.previewMode&&wr()}emitResolutionFailure(e){if(!this.diagnosticTelemetryActive())return;let n=`${e.reason}|${e.placement_handle??e.entitlement_handle??""}`;this.emittedResolutionDiagnostics.has(n)||this.emittedResolutionDiagnostics.size>=hc.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>=hc.RESOLUTION_DIAGNOSTIC_SESSION_CAP)){this.emittedSdkErrors.add(e);try{this.postAnonMeta("sdk_error",n?{reason:e,message:n}:{reason:e});}catch{}}}async emitSdkInitTelemetry(){this.anonymousTelemetryActive()&&await this.emitAnonMeta("sdk_init",{config_shape:this.computeConfigShape()});}computeConfigShape(){let e=this.getConfiguredExportedConfig();if(!e)return;let n=e.placements??[],r=n.reduce((i,s)=>i+(s.payloads?.length??0),0);return {plans:e.plans?.length??0,entitlements:e.entitlements?.length??0,entitlement_rules:e.entitlement_rules?.length??0,segments:e.segments?.length??0,placements:n.length,placement_payloads:r,content_ui_paths:e.content_ui_paths?.length??0,surface_templates:e.surface_templates?.length??0}}async emitAnonMeta(e,n={}){this.anonymousTelemetryActive()&&(this.showAnonTelemetryNoticeOnce(),await this.postAnonMeta(e,n));}async postAnonMeta(e,n={}){try{let r=this.getConfiguredExportedConfig(),i=r?.format_version!=null?String(r.format_version):void 0,s=i?`${this.tenantId}:${i}`:this.tenantId,a=(await vv(s)).slice(0,64),g={events:[{event_type:e,occurred_at:new Date().toISOString(),request_id:yr(),config_hash_id:a,sdk_version:O_,runtime_mode:this.runtimeMode,...i?{bundle_version:i}:{},...n.config_shape?{config_shape:n.config_shape}:{},...n.message?{message:n.message.slice(0,500)}:{},...n.reason?{reason:n.reason.slice(0,64)}:{},...n.placement_handle?{placement_handle:n.placement_handle.slice(0,64)}:{},...n.slot_handle?{slot_handle:n.slot_handle.slice(0,64)}:{},...n.surface?{surface:n.surface.slice(0,64)}:{},...n.plan_handle?{plan_handle:n.plan_handle.slice(0,64)}:{},...n.entitlement_handle?{entitlement_handle:n.entitlement_handle.slice(0,64)}:{}}]};await fetch(this.endpointFor("ingestSdkMeta",iA),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(g),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(I=>{let P=Sg(I);return n+=P.redactions,P.value}),i=this.providerRegistry.has("events")||!this.isLocalOnlyMode()&&this.analyticsEnabled;if(n>0&&i&&this.warnPiiRedactedOnce(),this.telemetryCounters.redacted+=n,this.dispatchToEventConsumers(r),this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}if(!this.analyticsEnabled)return;let s=yr(),a=this.getConfiguredExportedConfig()?.playbook_version_id,o=r.map(I=>{let P=I.user_id||I.anonymous_id,S=cm(this.userContext.account_id||P),x=lm({level:I.level,message:I.message,path:I.path,url:I.url,page_title:I.page_title,session_id:I.session_id,anonymous_id:I.anonymous_id,tags:I.tags,traits:I.identity.traits??null,payload:I.properties,source:oA});return n+=x.redactions+(S.redacted?1:0),{environment_id:this.environmentId,user_id:P,account_id:S.value,event_name:rl(I.type).slice(0,120),event_ts:I.event_time,properties:JSON.stringify(x.value),...uA(I.properties),...gA(I.properties),origin:fA(I.type),playbook_version:typeof a=="string"&&a.length>0?a:null,event_id:Qp.next(),request_id:yr(),tenant_id:I.tenant_id,...this.testTraffic?{test:true}:{}}});n>0&&this.warnPiiRedactedOnce();let g=this.endpointFor("ingestEvents",rA),v={method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.ingestPublicKey??this.apiKey}`,"x-request-id":s},body:JSON.stringify({events:o}),keepalive:true};(await ef(()=>fetch(g,v))).delivered?this.telemetryCounters.sent+=o.length:this.telemetryCounters.failed+=o.length;}dispatchToEventConsumers(e){this.providerRegistry.has("events")&&this.providerRegistry.get("events").then(n=>{let r=n?.consumers;if(!(!r||r.length===0))for(let i of r)try{Promise.resolve(i.consume(e)).catch(()=>{});}catch{}}).catch(()=>{});}telemetryConsented(){return this.telemetryConsent==="granted"}setTelemetryConsent(e){this.telemetryConsent=e;}getTelemetryConsent(){return this.telemetryConsent}getTelemetryCounters(){return {...this.telemetryCounters}}async capture(e,n,r){if(!this.telemetryConsented()){this.telemetryCounters.dropped+=1;return}let i=rl(e),s=this.toEventEnvelope(i,n),a=[...this.collectPageContextIssues(),...this.collectPayloadIssues(n)],o=[s];if(a.length>0&&o.push(this.buildValidationWarningEvent(i,a,n)),this.telemetryCounters.created+=o.length,r?.immediate){await this.sendEvents(o);return}this.events.push(...o),this.telemetryCounters.queued+=o.length,this.events.length>=this.maxBatchSize&&await this.flushEvents();}async trackControlPlaneEvent(e,n={},r){let{eventName:i,properties:s}=dm(e,n);await this.capture(i,s,r);}async flushEvents(){if(this.events.length===0)return;let e=[...this.events];this.events.length=0,await this.sendEvents(e);}startEventBatchFlushing(){if(!wr()||this.isLocalOnlyMode())return;this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flushEvents();},this.flushIntervalMs),this.flushTimer.unref?.());let e=()=>{this.flushEvents();},n=()=>{document.visibilityState==="hidden"&&this.flushEvents();};window.addEventListener("pagehide",e),document.addEventListener("visibilitychange",n),this.batchingTeardown.push(()=>window.removeEventListener("pagehide",e),()=>document.removeEventListener("visibilitychange",n));}dispose(){this.unbridgeUiPathCtaResolvers(),this.unregisterBuiltinSnoozeResolver(),this.flushTimer!==void 0&&(clearInterval(this.flushTimer),this.flushTimer=void 0);for(let e of this.batchingTeardown.splice(0))try{e();}catch{}this.flushEvents();}async emitSemantic(e,n,r){let i=Pe(n)?n:{};await this.capture(e,{semantic:true,payload:i},r);}async evaluateUserSegmentsAndUsage(e,n=false){let r=await this.fetchUserContext(this.userContext.id||""),i={...this.userContext,...e,custom:{...this.userContext.custom||{},...e.custom||{}}},s=await this.fetchUserContext(i.id||""),a=new Set(r.segmentIds||[]),o=new Set(s.segmentIds||[]),g=Array.from(o).filter(y=>!a.has(y)),v=Array.from(a).filter(y=>!o.has(y));for(let y of g)await this.emitSemantic("segment_enrolled",{segment_id:y,user_id:i.id??null});for(let y of v)await this.emitSemantic("segment_unenrolled",{segment_id:y,user_id:i.id??null});if(n){let y=r.usage||{},I={...y,...this.usageBalances},P=this.evaluateUsageThresholdCrossings(y,I);await Promise.all(P);}}emitObservedContextFields(e){let n=Object.keys(e??{}).filter(r=>r.length>0).sort();n.length!==0&&this.capture(of,{context_fields:n});}setUserContext(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(e,false),this.emitObservedContextFields(e.custom);}setPageContext(e){this.pageContext=this.mergePageContext(e),this.persistLocalRuntimeState();}refreshPageContext(){this.pageContext=this.mergePageContext(Ud());}hydrate(e){if(e.version!=="1.0.0"){console.warn(`[RevTurbine] Unknown hydration payload version: ${e.version}. Skipping.`);return}let n=this.userContext;e.user&&(this.userContext=this.mergeUserContext({id:e.user.id,custom:e.user.traits,usage:{}}),this.recalculateDerivedUsageTraits());let r=(e.ttl_seconds??60)*1e3,i=Date.now()+r;for(let s of e.decisions??[]){if(!s.output)continue;let a=[this.tenantId,s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",e.user?.id??this.anonymousId].join(":"),o=Pe(s.output?.content)?s.output.content:{};this.decisionCache.set(a,{value:{placementId:s.slot_id??s.entitlement_handle??s.placement_handle??"unknown",requestId:e.request_id,visible:s.visible,decisionSource:"cache",reasonCodes:s.reason_codes??[],content:Gs(String(o.header??""),String(o.body??""),String(o.cta_label??"")),output:s.output},expiresAt:i});}if(this.persistDecisionCache(),e.entitlements)for(let[s,a]of Object.entries(e.entitlements))this.localEntitlementsByHandle.set(s,{status:a.status,allowed:a.allowed,reason:a.reason,current_tier:a.current_tier,placement:a.placement});e.trial_status&&(this.localTrialStatus={in_trial:e.trial_status.in_trial,trial_type:e.trial_status.trial_type,plan_handle:e.trial_status.plan_handle,day_number:e.trial_status.day_number,days_remaining:e.trial_status.days_remaining}),e.user_context?.usage_balances&&(this.usageBalances={...this.usageBalances,...e.user_context.usage_balances},this.recalculateDerivedUsageTraits()),this.markSegmentsDirtyFromContextChange(n,this.userContext);}async generatePlacementId(e){return ku({tenantId:this.tenantId,placementName:e.placementName,placementScopeKey:e.placementScopeKey,pageRoute:e.normalizedPageRoute||this.currentPathname()},{sha256Base64Url:vv,randomHex:pf})}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=yr(),r=this.endpointFor("surfaceSlots","/api/placements").replace(/\/+$/,""),i=_A(e.placementScopeKey||e.id||e.name),s={...Pe(e.metadata)?e.metadata:{},surface_slot_id:e.placementScopeKey||e.id,registration_source:"sdk_surface_slot",route:e.route},a={name:e.name,slug:i,description:`Surface slot ${e.placementScopeKey||e.id}`,slot_type:"custom",status:"active",targeting_rules:{},content:{},priority:0,metadata:s},o={"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},g=await fetch(`${r}/${encodeURIComponent(e.id)}`,{method:"PUT",headers:o,body:JSON.stringify(a)});if(g.ok){this.syncedSurfaceSlotIds.add(e.id);return}if(g.status!==404)throw new Error(`surface_slot_upsert_failed:${g.status}`);let v=await fetch(r,{method:"POST",headers:o,body:JSON.stringify(a)});if(!v.ok)throw new Error(`surface_slot_create_failed:${v.status}`);this.syncedSurfaceSlotIds.add(e.id);}async registerSurfaceSlot(e){let n=Ia(this.currentPathname()),r=String(e?.id||"").trim(),i=String(e?.name||r).trim(),s=[];r||s.push({code:"invalid_surface_slot_id",reason:"SurfaceSlot id is required and must be a non-empty string."}),i||s.push({code:"invalid_placement_name",reason:"SurfaceSlot name is missing or empty."}),e?.metadata!==void 0&&!Pe(e.metadata)&&s.push({code:"invalid_placement_metadata",reason:"Placement metadata must be a plain object when provided."});let a=await this.generatePlacementId({placementName:i||r||"invalid_surface_slot",placementScopeKey:r||void 0,normalizedPageRoute:n}),o={id:a,route:n,name:i||"invalid_surface_slot",placementScopeKey:r||void 0,metadata:{...Pe(e.metadata)?e.metadata:{},surface_slot_id:r||null,...Array.isArray(e.surfaceTemplateIds)&&e.surfaceTemplateIds.length>0?{surface_template_ids:e.surfaceTemplateIds}:{}}},g=this.placements.get(a),v=g?this.stableStringify(g):null,y=this.stableStringify(o);return (!g||v!==y)&&(this.placements.set(a,o),this.persistLocalRuntimeState(),this.syncedSurfaceSlotIds.delete(a)),!this.isLocalOnlyMode()&&!this.syncedSurfaceSlotIds.has(a)&&await this.upsertSurfaceSlot(o),s.length>0&&await this.sendEvents([this.buildValidationWarningEvent("placement_registered",s,{surface_slot_id:r||null,placement_id:a,route:n,placement_name:i||null})]),a}async persistPlacementTypes(e){if(this.isLocalOnlyMode())return;let n=(Array.isArray(e)?e:[]).map(s=>xA(s)).filter(s=>s!==null);if(n.length===0)return;let r=yr(),i=await fetch(this.endpointFor("placementTypes","/api/sdk/placement-types"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":r},body:JSON.stringify({request_id:r,tenant_id:this.tenantId,types:n})});if(!i.ok)throw new Error(`persist_placement_types_failed:${i.status}`)}stableStringify(e){return os(e)}decisionCacheKey(e,n){return Eu({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 mg({tenantId:this.tenantId,...e})}readDecisionCache(e){let n=this.decisionCache.get(e);return n?n.expiresAt<=Date.now()?(this.decisionCache.delete(e),this.persistDecisionCache(),null):{...n.value,decisionSource:"cache"}:null}writeDecisionCache(e,n,r){let i=Date.now()+Math.max(5e3,r??this.defaultDecisionTtlMs);this.decisionCache.set(e,{expiresAt:i,value:n}),this.persistDecisionCache();}suppressionForState(e){return pg(e)}placementCapKey(e){return [this.tenantId,this.userContext.id||this.anonymousId,e.surface.type,e.output_id].join(":")}extractPlacementCapPolicies(e){return qc(e)}applyPlacementCapsIfNeeded(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement)return {allowed:true};let r=n.tick??true,i=this.placementCapKey(e),s=this.presentationCapsByKey.get(i),a=Ou(e,i,s,Date.now());return a.updatedState&&r&&(this.presentationCapsByKey.set(i,a.updatedState),a.allowed&&this.persistPresentationCaps()),{allowed:a.allowed,reason:a.reason}}gateDecisionByCaps(e,n={}){if(!this.placementBehavior.enableClientCapsEnforcement||!e.visible||!e.output)return e;let r=this.applyPlacementCapsIfNeeded(e.output,{tick:n.tick??true});if(r.allowed)return e;let i=r.reason??"cap_exceeded";return {...e,visible:false,reasonCodes:[...e.reasonCodes??[],i],suppressionReason:i}}normalizeDecisionFromResponse(e,n,r,i){return Au(e,n,r,i)}async getPlacementDecision(e){let n=this.placements.get(e.placementId),r=yr();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:Gs("Placement not found","Register the placement before requesting a decision.","Register placement")};let i=this.interactionStateKey({placementId:e.placementId,userId:e.userId}),s=this.suppressionForState(this.interactionState.get(i));if(s.suppressed)return {placementId:e.placementId,requestId:r,visible:false,decisionSource:"cache",reasonCodes:s.reason?[s.reason]:[],suppressionReason:s.reason,content:Gs(`${n.name} suppressed`,"Suppressed due to recent interaction state.","Continue")};let a,o=await this.localRuntime?.getContext?.(),g=this.providerRegistry.size>0?await this.providerRegistry.resolveAll():this.synthesizeProviderContext();(o||g)&&(a=this.stableStringify({legacyCtx:o??{},providerCtx:g??{}}));let v=this.decisionCacheKey(e,a),y=this.readDecisionCache(v);if(y)return this.gateDecisionByCaps(y,{tick:false});{let P=this.getOrBuildPlacementResolver();if(P){let x={...o,...g?{__providers:g}:{}},O=this.gateDecisionByCaps(await P(e,n,x));return this.localDecisionsByPlacementId.set(e.placementId,O),this.writeDecisionCache(v,O,e.ttlMs),this.persistLocalRuntimeState(),O}let S=this.localDecisionsByPlacementId.get(e.placementId);if(S){let x=this.gateDecisionByCaps({...S,decisionSource:"fallback"});return this.writeDecisionCache(v,x,e.ttlMs),this.persistLocalRuntimeState(),x}}this.emitResolutionFailure({reason:"config_unavailable",placement_handle:e.placementId});let I={placementId:e.placementId,requestId:r,visible:false,decisionSource:"fallback",reasonCodes:["config_unavailable"],suppressionReason:"config_unavailable",content:Gs(`${n.name} unavailable`,"Playbook config not yet available; placement decisions resolve locally once it loads.","Continue")};return this.refreshExportedConfigSnapshot(),I}async preloadPlacementDecisions(e){let n=new Map;for(let r of e)n.set(this.decisionCacheKey(r),r);await Promise.allSettled(Array.from(n.values()).map(r=>this.getPlacementDecision(r)));}async bootstrapPlacementDecisions(e){if(this.isDisabledByProviderFailure()){await Promise.all(e.map(async r=>{let i=await this.getPlacementDecision(r),s=this.decisionCacheKey(r);this.writeDecisionCache(s,i,r.ttlMs);}));return}let n=new Map;for(let r of e){if(!this.placements.get(r.placementId)||!r.userId)continue;let s=this.stableStringify({userId:r.userId,contextMode:r.contextMode??"auto",overrides:r.overrides??{},traits:r.traits??{},ttlMs:r.ttlMs??null}),a=n.get(s);if(a){a.placementIds.push(r.placementId);continue}n.set(s,{userId:r.userId,contextMode:r.contextMode,overrides:r.overrides,traits:r.traits,ttlMs:r.ttlMs,placementIds:[r.placementId]});}for(let r of n.values()){let i=e.filter(s=>r.placementIds.includes(s.placementId)&&s.userId===r.userId);await Promise.allSettled(i.map(s=>this.getPlacementDecision(s)));}}updateInteractionState(e){let n=this.interactionStateKey({placementId:e.placementId,userId:e.userId,treatmentId:e.treatmentId}),r=Date.now(),i=e.metadata??{},a={...this.interactionState.get(n)??{updatedAt:new Date(r).toISOString()},lastInteractionType:e.interactionType,updatedAt:e.interactionAt??new Date(r).toISOString()};if(e.interactionType==="dismiss"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="remind_me_later"){let o=Number(i.remind_after_seconds);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o*1e3:this.defaultRemindLaterMs);}if(e.interactionType==="cta_clicked"){let o=Number(i.cooldown_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.dismissCooldownDefaultMs);}if(e.interactionType==="cta_completed"&&(a.suppressedUntil=r+300*1e3),e.interactionType==="suppress"){let o=Number(i.suppress_duration_ms);a.suppressedUntil=r+(Number.isFinite(o)&&o>0?o:this.defaultDismissCooldownMs);}this.interactionState.set(n,a),this.persistInteractionState();}async flushInteractionQueue(){if(this.interactionQueue.length===0)return;let e=[...this.interactionQueue];if(this.interactionQueue.length=0,this.isLocalOnlyMode()){this.persistLocalRuntimeState();return}let n=e.map(r=>({user_id:r.userId,placement_id:r.placementId,treatment_id:r.treatmentId,interaction_type:r.interactionType,interaction_at:r.interactionAt,surface_slot_id:r.surfaceSlotId,surface_template_id:r.surfaceTemplateId,payload_id:r.payloadId,...r.experimentId?{experiment_id:r.experimentId}:{},...r.variantKey?{variant_key:r.variantKey}:{},metadata:r.metadata??{},tenant_id:this.tenantId,...this.testTraffic?{test:true}:{}}));try{(await fetch(this.endpointFor("touchpointTransition",sA),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":yr()},body:JSON.stringify(n.length===1?n[0]:n)})).ok||(await fetch(this.endpointFor("legacyInteractions",aA),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":yr()},body:JSON.stringify(e.length===1?e[0]:e)})).ok||this.interactionQueue.unshift(...e);}catch{this.interactionQueue.unshift(...e);}}async trackTreatmentInteraction(e){let n={...e,interactionAt:e.interactionAt??new Date().toISOString()};this.updateInteractionState(n),this.interactionQueue.push(n),this.flushInteractionQueue();let r=n.placementId,i=n.treatmentId,s=n.metadata??{},a=Number(s.cooldown_ms),o=Number.isFinite(a)&&a>0?a:void 0;if(n.interactionType==="dismiss")this.impressionHistory.recordDismissal(r,i,void 0,void 0,o);else if(n.interactionType==="cta_completed")this.impressionHistory.recordConversion(r,i);else if(n.interactionType==="cta_clicked")this.impressionHistory.recordClickThru(r,i,void 0,void 0,o);else if(n.interactionType==="suppress"){let y=Number(s.suppress_duration_ms);this.impressionHistory.recordSuppression(r,i,void 0,s,Number.isFinite(y)&&y>0?y:void 0);}let g=n.metadata??{},v=typeof g.decision_id=="string"?g.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,...v?{decision_id:v}:{},...n.experimentId?{experiment_id:n.experimentId}:{},...n.variantKey?{variant_key:n.variantKey}:{},metadata:g},{immediate:false});}async getPlacementContent(e,n){let r=this.placements.get(e),i=yr();if(this.isDisabledByProviderFailure()){let o=this.disabledDecisionForPlacement(e,r?.name);return {placementId:e,requestId:i,decisionSource:"fallback",content:o.content}}if(this.isLocalOnlyMode()){let o=this.localPlacementsByLookupKey.get(this.localPlacementLookupKey({placementHandle:e}));return {placementId:e,requestId:i,decisionSource:o?"remote":"fallback",content:Gs(typeof o?.content?.title=="string"?String(o.content.title):`${r?.name??e} treatment`,typeof o?.content?.body=="string"?String(o.content.body):"Local runtime placement content.",typeof o?.content?.cta=="string"?String(o.content.cta):"Continue")}}if(!r)return {placementId:e,requestId:i,decisionSource:"fallback",content:Gs("Placement not found","Register the placement before requesting content.","Register placement")};let s=this.userContext.id??this.anonymousId,a=await this.getPlacementDecision({placementId:e,userId:s});return {placementId:e,requestId:i,decisionSource:a.decisionSource==="fallback"?"fallback":"remote",content:a.content??Gs(`${r.name} treatment`,"Fallback treatment active while no decision content is available.","Continue")}}normalizePlacementOutput(e){let n=Lc(e,yr);return n&&Pe(e)&&typeof e.decision_id!="string"&&this.capture(qd,{reason:"placement response missing decision_id; generated synthetic",output_id:n.output_id,synthetic_decision_id:n.decision_id}),n}validateTrialStatusShape(e){return xu(e)}async getPlacement(e){if(this.isDisabledByProviderFailure())return this.disabledPlacementOutputForConfig(e);let n=e.slotId,r=e.surfaceType;if(r&&!Sv.has(r))return this.capture(qd,{reason:`getPlacement called with unknown surfaceType: ${String(r)}`,slot_id:n??null}),null;yr();if(this.isLocalOnlyMode()&&this.localRuntime?.resolvers?.getPlacement){let o=await this.localRuntime.resolvers.getPlacement(e);return o&&this.applyPlacementCapsIfNeeded(o).allowed?o:null}if(!this.getConfiguredExportedConfig()&&!this.isLocalOnlyMode())return this.refreshExportedConfigSnapshot(),null;let s=this.localPlacementForConfig(e);return s&&this.applyPlacementCapsIfNeeded(s).allowed?s:null}async checkEntitlement(e,n){if(this.isDisabledByProviderFailure())return this.emitResolutionFailure({reason:"sdk_disabled_provider_failure",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.sdkDisabledReason??"sdk_disabled_provider_failure"};if(this.isLocalOnlyMode()){let s=this.localRuntime?.resolvers?.checkEntitlement;if(s){let a=await s(e,n);return this.localEntitlementsByHandle.set(e,a),this.persistLocalRuntimeState(),a}}else this.getConfiguredExportedConfig()||await this.refreshExportedConfigSnapshot();let r=this.deriveLocalEntitlementFromConfiguredRules(e,n);if(r)return this.localEntitlementsByHandle.set(e,r),this.persistLocalRuntimeState(),r;let i=this.localEntitlementsByHandle.get(e);return i||(this.isLocalOnlyMode()||this.emitResolutionFailure({reason:"config_unavailable",entitlement_handle:e,plan_handle:this.resolveContextPlanRaw()||void 0}),{status:"denied",allowed:false,reason:this.isLocalOnlyMode()?"local_runtime_default_allow":"config_unavailable"})}updateUsage(e){let n=this.userContext;this.usageBalances={...this.usageBalances,...e},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage({},true);}getUserContext(){let e=this.userContext.id||this.anonymousId,n=new Date().toISOString();return {id:e,tenant_id:this.tenantId,user_id:e,created_at:n,updated_at:n,account_id:this.userContext.account_id,email:this.userContext.email,plan:this.userContext.plan,usage:this.userContext.usage??{},entitlements:this.userContext.entitlements??{},custom:Object.fromEntries(Object.entries(this.userContext.custom??{}).filter(([,r])=>typeof r=="string"||typeof r=="number"||typeof r=="boolean"||r===null)),personalization:Object.fromEntries(Object.entries(this.userContext.personalization??{}).filter(([,r])=>typeof r=="string"||typeof r=="number")),derived_computed_at:null}}async fetchUserContext(e){let n=yr();if(this.isLocalOnlyMode()){let r=this.localRuntime?.resolvers?.fetchUserContext;if(r){let s=await r(e);return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}let i=this.localUserContextsByUserId.get(e);return i||{userId:e,segmentIds:[],traits:{},plan:void 0,usage:this.usageBalances}}try{let r=await fetch(this.endpointFor("userContext","/api/sdk/user-context"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":n},body:JSON.stringify({request_id:n,tenant_id:this.tenantId,user_id:e,context:{user:this.userContext,page:this.pageContext}})});if(!r.ok)return {userId:e,segmentIds:[],traits:{}};let i=await r.json(),s={userId:e,segmentIds:Array.isArray(i.segment_ids)?i.segment_ids.filter(a=>typeof a=="string"):[],traits:Pe(i.traits)?i.traits:{},plan:typeof i.plan=="string"?i.plan:void 0,usage:Pe(i.usage)?Object.fromEntries(Object.entries(i.usage).filter(([,a])=>typeof a=="number")):void 0};return this.localUserContextsByUserId.set(e,s),this.persistLocalRuntimeState(),s}catch{return {userId:e,segmentIds:[],traits:{}}}}ensureServerUserContextProvider(){return this.serverUserContextProvider||(this.serverUserContextProvider=new Cl,this.providerRegistry.register(this.serverUserContextProvider)),this.serverUserContextProvider}async fetchClientContext(e){typeof e=="string"&&e.length>0&&(this.clientContextToken=e);let n=this.clientContextToken;if(n)try{let r=await fetch(this.endpointFor("clientContext","/api/sdk/client-context"),{method:"GET",headers:{authorization:`Bearer ${n}`}});if(!r.ok){r.status===401&&(this.clientContextToken=void 0);return}let i=await r.json(),s=this.mapClientSafeContext(i);if(Object.keys(s).length===0)return;this.ensureServerUserContextProvider().setSnapshot({trial:s.trial?{in_trial:s.trial.in_trial,state:s.trial.state,days_remaining:s.trial.days_remaining}:void 0,payment_at_risk:s.payment_at_risk});let a=JSON.parse(JSON.stringify({trial:s.trial??null,plan:s.plan??null})),o=await Fu(a)+`:${s.payment_at_risk===!0?1:0}`;if(o===this.lastServerContextHash)return;this.lastServerContextHash=o,this.applyServerContextPatch(s);}catch{}}mapClientSafeContext(e){let n={},i=["active","running_out","expired","converted","none"].find(a=>a===e.trial?.status);i&&(n.trial={in_trial:i==="active"||i==="running_out",state:i,...typeof e.trial?.days_remaining=="number"?{days_remaining:e.trial.days_remaining}:{}}),e.billing?.health==="attention_required"&&(n.payment_at_risk=true);let s=e.plan?.handle;return typeof s=="string"&&s.length>0&&(n.plan={id:s,name:typeof e.plan?.name=="string"&&e.plan.name.length>0?e.plan.name:s}),n}applyServerContextPatch(e){let n=this.userContext;this.userContext=this.mergeUserContext(e),this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.persistLocalRuntimeState(),this.evaluateUserSegmentsAndUsage(this.userContext,false);}async recordImpression(e,n,r,i){await this.impressionHistory.recordImpression(e,n,r,i);}async recordDismissal(e,n,r,i,s){await this.impressionHistory.recordDismissal(e,n,r,i,s);}async recordClickThru(e,n,r,i,s){await this.impressionHistory.recordClickThru(e,n,r,i,s);}async recordConversion(e,n,r,i){await this.impressionHistory.recordConversion(e,n,r,i);}async getTrialStatus(){let e=yr();if(this.isLocalOnlyMode()){let n=this.localRuntime?.resolvers?.getTrialStatus;if(n){let r=await n();return this.localTrialStatus=r,await this.evaluateTrialLifecycleTriggers(r),this.persistLocalRuntimeState(),r}return await this.evaluateTrialLifecycleTriggers(this.localTrialStatus),this.localTrialStatus}try{let n=await fetch(this.endpointFor("trialStatus","/api/sdk/trial-status"),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify({request_id:e,tenant_id:this.tenantId,user_id:this.userContext.id})});if(!n.ok)return {in_trial:!1};let r=await n.json(),i=this.validateTrialStatusShape(r);return this.localTrialStatus=i,await this.evaluateTrialLifecycleTriggers(i),this.persistLocalRuntimeState(),i}catch{return {in_trial:false}}}async setTrialInstances(e,n){let r=this.getConfiguredExportedConfig(),i=n?.nowIso??new Date().toISOString(),{trial:s}=Ec({...r?.free_trial_rules!==void 0?{freeTrialRules:r.free_trial_rules}:{},...r?.reverse_trial_rules!==void 0?{reverseTrialRules:r.reverse_trial_rules}:{},instances:e,nowIso:i,usageBalances:this.usageBalances,...n?.basePlanHandle!==void 0?{basePlanHandle:n.basePlanHandle}:{}}),a=s??{in_trial:false};return this.localTrialStatus=a,await this.evaluateTrialLifecycleTriggers(a),this.persistLocalRuntimeState(),a}getExportedConfig(){return this.getConfiguredExportedConfig()}async validateUiPathResolvers(e={}){await this.refreshExportedConfigSnapshot();let n=this.getConfiguredExportedConfig(),r=Array.isArray(e.uiPaths)?e.uiPaths:Pe(n)&&Array.isArray(n.content_ui_paths)?n.content_ui_paths:[],i=e.includeProviderHandlers??true,s=Dd(e.resolvers,"validateUiPathResolvers(options.resolvers)"),a={...this.uiPathResolvers,...s};if(i&&this.providerRegistry.has("cta"))try{let y=await this.providerRegistry.resolveAll();Pe(y.cta)&&Pe(y.cta.handlers)&&Object.assign(a,y.cta.handlers);}catch{}let o=[],g=0;for(let y of r){let I=Pe(y)?y:{},P=typeof I.action_type=="string"?I.action_type.trim():"";if(!P){o.push({actionType:"unknown",reason:"missing_action_type",...typeof I.id=="string"?{uiPathId:I.id}:{},...typeof I.name=="string"?{name:I.name}:{}});continue}if(typeof a[P]=="function"){g+=1;continue}o.push({actionType:P,reason:"missing_resolver",...typeof I.id=="string"?{uiPathId:I.id}:{},...typeof I.name=="string"?{name:I.name}:{}});}let v={valid:o.length===0,totalUiPaths:r.length,resolvedUiPaths:g,issues:o};if(!v.valid&&e.throwOnMissing){let y=v.issues.filter(P=>P.reason==="missing_resolver").map(P=>P.actionType),I=y.length>0?` Missing resolver(s) for action_type: ${Array.from(new Set(y)).join(", ")}.`:"";throw new Error(`[RevTurbine] UI path resolver validation failed with ${v.issues.length} issue(s).${I}`)}return v}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=[],i=0;for(let o of n){let v=(Pe(o)?o:{}).action_type,y=typeof v=="string"?v.trim():"";if(!y){i+=1;continue}typeof this.uiPathResolvers[y]!="function"&&r.push(y);}if(i===0&&r.length===0)return;let s=Array.from(new Set(r)),a=[];s.length>0&&a.push(`missing resolvers for action_type: ${s.join(", ")}`),i>0&&a.push(`content_ui_paths with missing action_type: ${i}`),console.warn(`[RevTurbine] uiPathResolvers coverage gap: ${a.join("; ")}. Affected CTAs will track the click and fall back to onCtaClick until a resolver is supplied.`);}async dismiss(e){await this.emitSemantic("placement_interaction",{interaction_type:"dismiss",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async snooze(e,n=3600){await this.emitSemantic("placement_interaction",{interaction_type:"remind_me_later",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString(),remind_after_seconds:n},{immediate:false});}async convert(e){await this.emitSemantic("placement_interaction",{interaction_type:"cta_completed",payload_id:e,user_id:this.userContext.id??null,interaction_at:new Date().toISOString()},{immediate:false});}async emitTrigger(e,n,r){await this.emitSemantic(e,{...n,user_id:this.userContext.id??null,plan_handle:this.userContext.personalization?.plan_name??null,triggered_at:new Date().toISOString(),source:"sdk"},r);}async trackEvent(e,n){await this.capture(e,n??{});}identify(e,n){if(typeof e!="string"||e.trim()===""){console.error("[RevTurbine] identify() requires a non-empty user id; call ignored. Pass your stable internal user id.");return}Jw.test(e)&&rf(`[RevTurbine] identify() received an email-shaped user id ("${e}"). Use an opaque stable id and pass the email as { email } instead.`);let r=this.userContext,i=n!=null&&typeof n=="object"&&!Array.isArray(n)&&("account_id"in n||"email"in n||"plan"in n||"plan_handle"in n||"usage"in n||"entitlements"in n||"custom"in n);if(n!=null&&typeof n=="object"&&!Array.isArray(n)){let s=Object.keys(n).filter(a=>!Ww.has(a));s.length>0&&rf(i?`[RevTurbine] identify() ignoring unrecognized user-context key(s): ${s.join(", ")}. Recognized keys: ${af.join(", ")}.`:`[RevTurbine] identify() found no recognized user-context key \u2014 treating the object as legacy traits (stored under custom). Keys seen: ${s.join(", ")}; recognized keys: ${af.join(", ")}. For plan-scoped rules use { plan: { id, name } } or { plan_handle }.`);}if(i){let s=n;s.usage&&(this.usageBalances={...this.usageBalances,...ls(s.usage)});let a=!s.plan&&typeof s.plan_handle=="string"&&s.plan_handle.trim()!==""?{id:s.plan_handle,name:s.plan_handle}:void 0;this.userContext=this.mergeUserContext({id:e,account_id:s.account_id,email:s.email,plan:s.plan??a,usage:s.usage,entitlements:s.entitlements,custom:a?{plan_handle:a.id,...s.custom??{}}:s.custom,personalization:s.personalization});}else this.userContext=this.mergeUserContext({id:e,custom:n,usage:{}});this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(r,this.userContext),this.decisionCache.clear(),this.persistDecisionCache(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(e),this.impressionHistory.hydrate(),this.emitObservedContextFields(i?n.custom:n);}resetIdentity(){this.clearAllUserState({reinfer:true});}resetUserContext(){this.clearAllUserState({reinfer:false});}clearAllUserState({reinfer:e}){let n=this.userContext;this.userContext={usage:{},...e&&this.policy.inferUser?xv():{},id:void 0,custom:{},entitlements:{},personalization:{}},this.usageBalances={},this.recalculateDerivedUsageTraits(),this.markSegmentsDirtyFromContextChange(n,this.userContext),this.decisionCache.clear(),this.interactionState.clear(),this.persistDecisionCache(),this.persistInteractionState(),this.persistLocalRuntimeState(),this.impressionHistory.setUserId(this.anonymousId),this.impressionHistory.hydrate();}can(e,n){return this.checkEntitlement(e,n)}async gate(e,n,r){this.emitSemantic("gate_attempted",{entitlement_handle:e},{immediate:false});let i=await this.checkEntitlement(e,r);return i.allowed?(this.emitSemantic("gate_allowed",{entitlement_handle:e},{immediate:false}),{ran:true,result:await n(),entitlement:i}):(this.emitSemantic("gate_denied",{entitlement_handle:e,reason:i.reason??null},{immediate:false}),{ran:false,entitlement:i})}track(e,n){return this.trackEvent(e,n)}update(e){let{usage:n,...r}=e??{},i=Object.entries(r).filter(([a])=>bv.has(a)),s=Object.keys(r).filter(a=>!bv.has(a));s.length>0&&rf(`[RevTurbine] update() ignored unrecognized key(s): ${s.join(", ")}. Patchable fields: ${Iv.join(", ")}. A bare entitlement handle is not a usage report \u2014 use update({ usage: { <unit>: n } }); to (re)establish identity use identify().`),i.length>0&&this.setUserContext(Object.fromEntries(i)),n&&this.updateUsage(n);}reset(){this.resetIdentity();}onRouteChange(e){this.setPageContext({url:`${wr()?window.location.origin:""}${e.path}`,title:e.title,tags:e.tags}),this.capture("page_view",{source:"router_auto_track",path:e.path});}};T(hc,"RESOLUTION_DIAGNOSTIC_SESSION_CAP",20);var mf=hc;function ff(t){let e=vA(t),n=new mf(e);if(!e.provider)return n;let r=(y,I)=>{try{return typeof y=="function"?y(e):y}catch(P){return console.warn(`[RevTurbine] Provider factory failed at chain index ${I}.`,P),null}},i=[r(e.provider,0),...(e.providerFallbacks??[]).map((y,I)=>r(y,I+1))].filter(y=>y!==null);if(i.length===0)return n.disableForProviderFailure("provider_factory_chain_failed"),n;let s=async(y,I,P)=>{let S=[];for(let x=0;x<i.length;x+=1){let H=i[x][y];if(H){S.push(x);try{return await H(...I)}catch(z){let se=i.slice(x+1).some(Ie=>typeof Ie[y]=="function");console.warn(x===0&&se?`[RevTurbine] Primary provider ${y} failed; trying configured fallbacks.`:`[RevTurbine] Provider ${y} failed at chain index ${x}.`,z);}}}return S.length===0||n.disableForProviderFailure(`provider_${y}_chain_failed`),P()},a=n.getPlacement.bind(n),o=n.checkEntitlement.bind(n),g=n.persistPlacementTypes.bind(n),v=n.identify.bind(n);return n.getPlacement=async y=>s("getPlacement",[y],()=>a(y)),n.checkEntitlement=async(y,I)=>s("checkEntitlement",[y,I],()=>o(y,I)),n.persistPlacementTypes=async y=>s("persistPlacementTypes",[y],()=>g(y)),n.identify=(y,I)=>{let P=0;for(let S=0;S<i.length;S+=1){let x=i[S];if(x.identify){P+=1;try{x.identify(y,I);return}catch(O){let H=i.slice(S+1).some(z=>typeof z.identify=="function");console.warn(S===0&&H?"[RevTurbine] Primary provider identify failed; trying configured fallbacks.":`[RevTurbine] Provider identify failed at chain index ${S}.`,O);}}}if(P>0){n.disableForProviderFailure("provider_identify_chain_failed"),v(y,I);return}v(y,I);},n}var Bd={tenantId:"local",apiKey:"local-only",endpoint:"https://api.revturbine.local",mode:"react"};function sf(t){return typeof t=="string"&&t.trim().length>0}function vA(t){return Nd(t.localRuntime)!==void 0?{...t,tenantId:sf(t.tenantId)?t.tenantId:Bd.tenantId,apiKey:sf(t.apiKey)?t.apiKey:Bd.apiKey,endpoint:sf(t.endpoint)?t.endpoint:Bd.endpoint,mode:t.mode??Bd.mode,runtimeMode:t.runtimeMode??"local_only"}:t}function xA(t){if(!Pe(t))return null;let e=(g,v)=>String(g??"").trim().slice(0,v),n=e(t.id,256),r=e(t.label,256),i=e(t.description,1024),s=e(t.surfaceType,64);if(!n||!r||!i||!Sv.has(s))return null;let a=Number(t.priority),o=Number.isFinite(a)?Math.max(0,Math.floor(a)):0;return {id:n,label:r,description:i,surfaceType:s,priority:o}}typeof window<"u"&&(window.RevTurbine={init:ff});var Fi=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 Bo(t){return t?{id:t.id??Fi.id,name:t.name??Fi.name,version:t.version??Fi.version,colors:{...Fi.colors,...t.colors},typography:{...Fi.typography,...t.typography},shape:{...Fi.shape,...t.shape},shadows:{...Fi.shadows,...t.shadows}}:{...Fi}}var SA="revturbine:theme";function hf(t){return `${SA}:${t}`}function IA(t,e){try{let n=e.getItem(hf(t));if(!n)return null;let r=JSON.parse(n);return typeof r!="object"||r===null?null:r}catch{return null}}function PA(t,e,n){try{n.setItem(hf(t),JSON.stringify(e));}catch{}}function TA(t,e){let n=e??ws();try{n.removeItem(hf(t));}catch{}}async function gf(t,e){let{tenantId:n,endpoint:r,apiKey:i,base:s}=t,a=t.storage??ws(),o=IA(n,a),g=Bo({...s,...o});return t.onOverride?.(o),CA(r,n,i).then(v=>{v&&(o?.version&&v.version===o.version||(PA(n,v,a),t.onOverride?.(v),e?.(Bo({...s,...v}))));}).catch(()=>{}),g}async function CA(t,e,n){let r=t.replace(/\/$/,""),i=typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(16).slice(2)}`,s=await fetch(`${r}/api/sdk/theme`,{method:"GET",headers:{authorization:`Bearer ${n}`,"x-tenant-id":e,"x-request-id":i}});if(!s.ok)return null;let a=await s.json();return typeof a!="object"||a===null?null:a}var Hd=class{constructor(e,n){T(this,"sdk");T(this,"options");T(this,"listeners",new Set);T(this,"_placementId","");T(this,"_decision",null);T(this,"_isLoading",false);T(this,"_error","");T(this,"_impressionTracked",false);T(this,"_loadSeq",0);T(this,"_rendered",false);T(this,"_exposed",false);T(this,"_exposureBasis",null);T(this,"_lastSlotKey",null);this.sdk=e,this.options=n;}get state(){return {isLoading:this._isLoading,error:this._error,placementId:this._placementId,visible:!!this._decision?.visible,decision:this._decision,content:this._decision?.content??null,exposureBasis:this._exposureBasis}}get exposureMode(){return this.options.placementExposure??"legacy_resolution"}markRendered(){this._rendered||(this._rendered=true,this.emitPlacementLifecycle("placement_rendered",null),this.exposureMode==="render"&&this.fireImpression("render"),this.notify());}markVisible(e="viewport"){this._exposed||(this._exposed=true,this._exposureBasis=e,this.emitPlacementLifecycle("placement_exposed",e),this.exposureMode==="viewport"&&e==="viewport"&&this.fireImpression("viewport"),this.notify());}fireImpression(e){let n=this._decision;if(!n?.visible||this._impressionTracked||this.options.autoTrackImpression===false)return;let r=this.options.userId||this.sdk.getUserContext().user_id;r&&(this._impressionTracked=true,this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,interactionType:"impression",surfaceSlotId:n.output?.surface?.slot_id,surfaceTemplateId:n.output?.surface?.template,payloadId:n.output?.output_id,experimentId:n.output?.experiment_id,variantKey:n.output?.variant_key,metadata:{decision_source:n.decisionSource,exposure_basis:e,decision_id:n.output?.decision_id??null}}));}emitPlacementLifecycle(e,n){let r=this._decision;try{this.sdk.emitSemantic(e,{placement_id:this._placementId,surface_slot_id:r?.output?.surface?.slot_id??null,payload_id:r?.output?.output_id??null,decision_id:r?.output?.decision_id??null,decision_source:r?.decisionSource??null,...n?{exposure_basis:n}:{}},{immediate:!1});}catch{}}slotContext(){let e=this._decision,n=this.options.surfaceSlot;return {surface_slot_id:e?.output?.surface?.slot_id??n?.id??null,slot_name:n?.name??null,template_ids:n?.surfaceTemplateIds??null,template_id:e?.output?.surface?.template??null,surface_type:e?.output?.surface?.type??null,category:e?.output?.category??null,decision_source:e?.decisionSource??null,reason_codes:e?.reasonCodes??[],decision_id:e?.output?.decision_id??null}}emitSlotResolution(){let e=this._decision,n=e?.visible?"slot_filled":e?.suppressionReason?"slot_suppressed":"slot_empty",r=`${this._placementId}|${e?.output?.decision_id??e?.requestId??""}|${n}`;if(this._lastSlotKey===r)return;this._lastSlotKey=r;let i=this.slotContext();this.emitSlotEvent("slot_evaluated",i),this.emitSlotEvent(n,i);}emitSlotError(e){let n=`${this._placementId}|slot_error`;this._lastSlotKey!==n&&(this._lastSlotKey=n,this.emitSlotEvent("slot_error",{...this.slotContext(),error:e}));}emitSlotEvent(e,n){try{this.sdk.emitSemantic(e,n,{immediate:!1});}catch{}}emitPlacementOutcome(e){let n=this._decision;try{this.sdk.emitSemantic("placement_outcome",{placement_id:this._placementId,surface_slot_id:n?.output?.surface?.slot_id??null,payload_id:n?.output?.output_id??null,decision_id:n?.output?.decision_id??null,decision_source:n?.decisionSource??null,outcome:"cta_completed",cta_target:e},{immediate:!1});}catch{}}get visible(){return !!this._decision?.visible}get content(){return this._decision?.content??null}get decision(){return this._decision}get placementId(){return this._placementId}async load(){let e=this.options,n=e.userId||this.sdk.getUserContext().user_id;if(!n)return this._error="Cannot load placement: no userId available.",this.notify(),null;let r=++this._loadSeq;this._isLoading=true,this._error="",this.notify();try{if(!this._placementId)if(e.surfaceSlot)this._placementId=await this.sdk.registerSurfaceSlot(e.surfaceSlot);else if(e.placement)this._placementId=await this.sdk.registerPlacement(e.placement);else return this._error="Either placement or surfaceSlot must be provided.",this._isLoading=!1,this.notify(),null;if(r!==this._loadSeq)return this._decision;let i=await this.sdk.getPlacementDecision({placementId:this._placementId,userId:n,contextMode:e.contextMode,overrides:e.overrides,traits:e.traits,ttlMs:e.ttlMs});if(r!==this._loadSeq)return this._decision;this._decision=i,this.emitPlacementLifecycle("placement_resolved",null),this.emitSlotResolution();let s=this.exposureMode;return s==="legacy_resolution"?this.fireImpression("legacy_resolution"):s==="viewport"&&!nf.supported&&this.fireImpression("render_fallback"),i}catch(i){return r===this._loadSeq&&(this._error=i instanceof Error?i.message:"Failed to load placement decision.",this.emitSlotError(this._error)),null}finally{r===this._loadSeq&&(this._isLoading=false,this.notify());}}async refresh(){return this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this.load()}async dismiss(e=1440*60*1e3){await this.trackInteraction("dismiss",{cooldown_ms:e});}async snooze(e=3600){await this.trackInteraction("remind_me_later",{remind_after_seconds:e});}async remindMeLater(e=3600){await this.snooze(e);}async ctaClick(e){await this.trackInteraction("cta_clicked",{cta_target:e||null});}async ctaComplete(e){await this.trackInteraction("cta_completed",{cta_target:e||null}),this.emitPlacementOutcome(e||null);}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}reset(){this._placementId="",this._decision=null,this._isLoading=false,this._error="",this._impressionTracked=false,this._rendered=false,this._exposed=false,this._exposureBasis=null,this._lastSlotKey=null,this._loadSeq++,this.notify();}async trackInteraction(e,n){let r=this.options.userId||this.sdk.getUserContext().user_id;if(!this._placementId||!r)return;let i=this._decision?.output?.decision_id??null;await this.sdk.trackTreatmentInteraction({userId:r,placementId:this._placementId,treatmentId:this._decision?.placementId,interactionType:e,surfaceSlotId:this._decision?.output?.surface?.slot_id,surfaceTemplateId:this._decision?.output?.surface?.template,payloadId:this._decision?.output?.output_id,experimentId:this._decision?.output?.experiment_id,variantKey:this._decision?.output?.variant_key,metadata:i?{...n,decision_id:i}:n}),(e==="dismiss"||e==="remind_me_later"||e==="cta_completed")&&this._decision&&(this._decision={...this._decision,visible:false},this.notify());}notify(){for(let e of this.listeners)e();}};function gc(t){return t!==null&&(t.status==="denied"||t.allowed===false)}var zd=class{constructor(e,n){T(this,"sdk");T(this,"options");T(this,"listeners",new Set);T(this,"_isLoading",false);T(this,"_error",null);T(this,"_result",null);T(this,"_gatedPlacement",null);T(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:gc(this._result),gatedPlacement:this._gatedPlacement}}get allowed(){return this._result?.status==="allowed"}get limited(){return this._result?.status==="limited"}get denied(){return gc(this._result)}get result(){return this._result}get gatedPlacement(){return this._gatedPlacement}async check(){let{handle:e,context:n,autoGate:r,gatePlacementRequest:i}=this.options;this._isLoading=true,this._error=null,this.notify();try{let s=await this.sdk.checkEntitlement(e,n);if(this._result=s,this.emitGateEvaluated(e,s),!r||!gc(s))this._gatedPlacement=null;else if(s.placement)this._gatedPlacement=s.placement;else {let a=await this.sdk.getPlacement({...i,entitlementHandle:e});this._gatedPlacement=a;}return s}catch(s){return this._error=s instanceof Error?s.message:String(s),this._gatedPlacement=null,null}finally{this._isLoading=false,this.notify();}}async recheck(){return this.check()}emitGateEvaluated(e,n){let r=`${e}|${n.status}`;if(this._lastEvaluatedKey!==r){this._lastEvaluatedKey=r;try{this.sdk.emitSemantic("gate_evaluated",{entitlement_handle:e,outcome:n.status,gated:gc(n),reason:n.reason??null,limit:n.limit??null,used:n.used??null,remaining:n.remaining??null},{immediate:!1});}catch{}}}onChange(e){return this.listeners.add(e),()=>{this.listeners.delete(e);}}notify(){for(let e of this.listeners)e();}},Kd=class{constructor(e,n){T(this,"sdk");T(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 Hd(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 zd(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 kA(t){let{bootstrapPlacements:e,...n}=t,r=n,i=ff(r),s=r.user;s&&typeof s=="object"&&s.id&&i.identify(s.id,s);let a=Fi,g=Nd(r.localRuntime)?.theme;if(g&&typeof g=="object"?a=Bo(g):a=await gf({tenantId:r.tenantId??"local",endpoint:r.endpoint??"https://api.revturbine.local",apiKey:r.apiKey??"local-only"}),e&&e.length>0){let v=i.getUserContext().user_id,y=[];for(let I of e){let P=await i.registerPlacement(I.placement),S=I.userId||v;S&&y.push({placementId:P,userId:S,contextMode:I.contextMode,overrides:I.overrides,traits:I.traits,ttlMs:I.ttlMs});}y.length>0&&await i.bootstrapPlacementDecisions(y);}return new Kd(i,a)}var RA=/\{[^{}]+\}/g,EA=()=>typeof process=="object"&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function wA(){return Math.random().toString(36).slice(2,11)}function Ev(t){let{baseUrl:e="",Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:s,pathSerializer:a,headers:o,requestInitExt:g=void 0,...v}={...t};g=EA()?g:void 0,e=Rv(e);let y=[];async function I(P,S){let{baseUrl:x,fetch:O=r,Request:H=n,headers:z,params:se={},parseAs:Ie="json",querySerializer:K,bodySerializer:M=s??OA,pathSerializer:Le,body:jt,middleware:Yn=[],...Q}=S||{},Ft=e;x&&(Ft=Rv(x)??e);let rn=typeof i=="function"?i:Cv(i);K&&(rn=typeof K=="function"?K:Cv({...typeof i=="object"?i:{},...K}));let sn=Le||a||AA,ut=jt===void 0?void 0:M(jt,kv(o,z,se.header)),kn=kv(ut===void 0||ut instanceof FormData?{}:{"Content-Type":"application/json"},o,z,se.header),Wn=[...y,...Yn],wt={redirect:"follow",...v,...Q,body:ut,headers:kn},an,qn,vr=new H(jA(P,{baseUrl:Ft,params:se,querySerializer:rn,pathSerializer:sn}),wt),on;for(let gn in Q)gn in vr||(vr[gn]=Q[gn]);if(Wn.length){an=wA(),qn=Object.freeze({baseUrl:Ft,fetch:O,parseAs:Ie,querySerializer:rn,bodySerializer:M,pathSerializer:sn});for(let gn of Wn)if(gn&&typeof gn=="object"&&typeof gn.onRequest=="function"){let He=await gn.onRequest({request:vr,schemaPath:P,params:se,options:qn,id:an});if(He)if(He instanceof H)vr=He;else if(He instanceof Response){on=He;break}else throw new Error("onRequest: must return new Request() or Response() when modifying the request")}}if(!on){try{on=await O(vr,g);}catch(gn){let He=gn;if(Wn.length)for(let nr=Wn.length-1;nr>=0;nr--){let oi=Wn[nr];if(oi&&typeof oi=="object"&&typeof oi.onError=="function"){let vt=await oi.onError({request:vr,error:He,schemaPath:P,params:se,options:qn,id:an});if(vt){if(vt instanceof Response){He=void 0,on=vt;break}if(vt instanceof Error){He=vt;continue}throw new Error("onError: must return new Response() or instance of Error")}}}if(He)throw He}if(Wn.length)for(let gn=Wn.length-1;gn>=0;gn--){let He=Wn[gn];if(He&&typeof He=="object"&&typeof He.onResponse=="function"){let nr=await He.onResponse({request:vr,response:on,schemaPath:P,params:se,options:qn,id:an});if(nr){if(!(nr instanceof Response))throw new Error("onResponse: must return new Response() when modifying the response");on=nr;}}}}let en=on.headers.get("Content-Length");if(on.status===204||vr.method==="HEAD"||en==="0"&&!on.headers.get("Transfer-Encoding")?.includes("chunked"))return on.ok?{data:void 0,response:on}:{error:void 0,response:on};if(on.ok)return {data:await(async()=>{if(Ie==="stream")return on.body;if(Ie==="json"&&!en){let He=await on.text();return He?JSON.parse(He):void 0}return await on[Ie]()})(),response:on};let dr=await on.text();try{dr=JSON.parse(dr);}catch{}return {error:dr,response:on}}return {request(P,S,x){return I(S,{...x,method:P.toUpperCase()})},GET(P,S){return I(P,{...S,method:"GET"})},PUT(P,S){return I(P,{...S,method:"PUT"})},POST(P,S){return I(P,{...S,method:"POST"})},DELETE(P,S){return I(P,{...S,method:"DELETE"})},OPTIONS(P,S){return I(P,{...S,method:"OPTIONS"})},HEAD(P,S){return I(P,{...S,method:"HEAD"})},PATCH(P,S){return I(P,{...S,method:"PATCH"})},TRACE(P,S){return I(P,{...S,method:"TRACE"})},use(...P){for(let S of P)if(S){if(typeof S!="object"||!("onRequest"in S||"onResponse"in S||"onError"in S))throw new Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");y.push(S);}},eject(...P){for(let S of P){let x=y.indexOf(S);x!==-1&&y.splice(x,1);}}}}function Gd(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 wv(t,e,n){if(!e||typeof e!="object")return "";let r=[],i={simple:",",label:".",matrix:";"}[n.style]||"&";if(n.style!=="deepObject"&&n.explode===false){for(let o in e)r.push(o,n.allowReserved===true?e[o]:encodeURIComponent(e[o]));let a=r.join(",");switch(n.style){case "form":return `${t}=${a}`;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return a}}for(let a in e){let o=n.style==="deepObject"?`${t}[${a}]`:a;r.push(Gd(o,e[a],n));}let s=r.join(i);return n.style==="label"||n.style==="matrix"?`${i}${s}`:s}function Av(t,e,n){if(!Array.isArray(e))return "";if(n.explode===false){let s={form:",",spaceDelimited:"%20",pipeDelimited:"|"}[n.style]||",",a=(n.allowReserved===true?e:e.map(o=>encodeURIComponent(o))).join(s);switch(n.style){case "simple":return a;case "label":return `.${a}`;case "matrix":return `;${t}=${a}`;default:return `${t}=${a}`}}let r={simple:",",label:".",matrix:";"}[n.style]||"&",i=[];for(let s of e)n.style==="simple"||n.style==="label"?i.push(n.allowReserved===true?s:encodeURIComponent(s)):i.push(Gd(t,s,n));return n.style==="label"||n.style==="matrix"?`${r}${i.join(r)}`:i.join(r)}function Cv(t){return function(n){let r=[];if(n&&typeof n=="object")for(let i in n){let s=n[i];if(s!=null){if(Array.isArray(s)){if(s.length===0)continue;r.push(Av(i,s,{style:"form",explode:true,...t?.array,allowReserved:t?.allowReserved||false}));continue}if(typeof s=="object"){r.push(wv(i,s,{style:"deepObject",explode:true,...t?.object,allowReserved:t?.allowReserved||false}));continue}r.push(Gd(i,s,t));}}return r.join("&")}}function AA(t,e){let n=t;for(let r of t.match(RA)??[]){let i=r.substring(1,r.length-1),s=false,a="simple";if(i.endsWith("*")&&(s=true,i=i.substring(0,i.length-1)),i.startsWith(".")?(a="label",i=i.substring(1)):i.startsWith(";")&&(a="matrix",i=i.substring(1)),!e||e[i]===void 0||e[i]===null)continue;let o=e[i];if(Array.isArray(o)){n=n.replace(r,Av(i,o,{style:a,explode:s}));continue}if(typeof o=="object"){n=n.replace(r,wv(i,o,{style:a,explode:s}));continue}if(a==="matrix"){n=n.replace(r,`;${Gd(i,o)}`);continue}n=n.replace(r,a==="label"?`.${encodeURIComponent(o)}`:encodeURIComponent(o));}return n}function OA(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 jA(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 kv(...t){let e=new Headers;for(let n of t){if(!n||typeof n!="object")continue;let r=n instanceof Headers?n.entries():Object.entries(n);for(let[i,s]of r)if(s===null)e.delete(i);else if(Array.isArray(s))for(let a of s)e.append(i,a);else s!==void 0&&e.set(i,s);}return e}function Rv(t){return t.endsWith("/")?t.substring(0,t.length-1):t}function FA(t){let e={...t.headers};return t.tenantId&&(e["x-rt-tenant-id"]=t.tenantId),t.token&&(e.Authorization=`Bearer ${t.token}`),Ev({baseUrl:t.baseUrl,headers:e})}var _f=class extends Error{constructor(n,r){super(r);T(this,"status",n);this.name="ApiError";}};var bf=class extends _g{constructor(n){let{exportedConfig:r,environmentId:i,...s}=n,a=as(r,"BrowserRuntime.exportedConfig",{tenantId:n.tenantId,environmentId:i??"default"});if(!a)throw new Error("BrowserRuntime requires exportedConfig");let o=ws(n.storage),g=new Xc({storage:o,tenantId:n.tenantId,maxRecords:n.maxImpressionRecords});super({...s,exportedConfig:a,storage:o,impressionStore:g});T(this,"_hydratePromise");let v=n.autoHydrate??true;this._hydratePromise=v?this.hydrate():null;}async ready(){this._hydratePromise&&await this._hydratePromise;}};function LA(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 Ov(t){return LA(t)/4294967296}function VA(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 jv(t,e,n){if(!t)return;let r=VA(n.variants);if(r.length===0)return;let{exposure:i}=n;if(i!==void 0&&(!(i>0)||i<1&&Ov(`${t}:${e}:exposure`)>=i))return;let s=r.reduce((o,[,g])=>o+g,0),a=Ov(`${t}:${e}:variant`)*s;for(let[o,g]of r)if(a-=g,a<0)return o;return r[r.length-1][0]}function UA(t){let{experiments:e,subject:n}=t;return {domain:"experiments",resolve(){let r=typeof n=="function"?n():n;if(!r)return {assignments:{}};let i={};for(let[s,a]of Object.entries(e)){let o=jv(r,s,a);o!==void 0&&(i[s]=o);}return {assignments:i}}}}var BA=new Set(["tenant_id","user_id","anonymous_id","session_id","url","path","page_title","event_time"]);function qA(t){let e={};for(let[n,r]of Object.entries(t.properties))e[BA.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 yf=class{constructor(e){T(this,"name");T(this,"handler");T(this,"transform");T(this,"filterSet");this.name=e.name??"analytics",this.handler=e.handler,this.transform=e.transform,this.filterSet=e.filter?new Set(e.filter):void 0;}consume(e){for(let n of e){if(this.filterSet&&!this.filterSet.has(n.type))continue;let r=n.type,i=qA(n);if(this.transform){let s=this.transform(r,i);if(s===null)continue;r=s.eventName,i=s.properties;}try{this.handler(r,i);}catch{}}}};function Fv(t){let e=new yf(t);return {domain:"events",resolve:()=>({consumers:[e]})}}function Lv(t){let{posthog:e,filter:n,transform:r,name:i}=t;return Fv({name:i??"posthog",filter:n,transform:r,handler:(s,a)=>{e.capture(s,a);}})}function DA(t){let{posthog:e,filter:n,transform:r,name:i,syncIdentity:s=false,syncAccountGroup:a=false,mirrorNavigation:o=false}=t,g=i??"posthog",v=Lv({posthog:e,filter:n,transform:r,name:g}),y=null,I=null,P=S=>{try{if(s){let x=S.user_id;x&&x!==y?(e.identify?.(x,S.identity.traits),y=x):!x&&y!==null&&(e.reset?.(),y=null);}if(a){let x=S.identity.traits.account_id;typeof x=="string"&&x&&x!==I&&(e.group?.("account",x),I=x);}o&&S.type==="page_view"&&e.capture("$pageview",{$current_url:S.url});}catch{}};return {domain:"events",async resolve(){let x=(await v.resolve())?.consumers??[];return {consumers:[{name:g,consume(H){for(let z of H)P(z);for(let z of x)z.consume(H);}}]}}}}var MA=["banner_placement"],NA=["banner_placement","in_page_card"],HA=["toast_message"],zA=["modal_overlay"];var KA=["banner_placement","in_page_card","usage_counter","button"],GA=["modal_overlay","inline_gate_message"],$A=["toast_message","modal_overlay","banner_placement"];function qo(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var $d=class extends Error{constructor(n,r){super(`RevTurbine client-session mint failed (status ${n})`);T(this,"status",n);T(this,"requestId",r);this.name="RevTurbineClientSessionError";}},Zd=class{constructor(e){T(this,"tenantId");T(this,"apiKey");T(this,"endpoint");T(this,"defaultTtlSeconds");T(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=qo(),r=e.anonymousId??qo(),[i,s,a,o,g]=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)]),v={version:"1.0.0",request_id:n,tenant_id:this.tenantId,evaluated_at:new Date().toISOString(),ttl_seconds:this.defaultTtlSeconds,user:{id:e.userId,anonymous_id:r,traits:e.traits},decisions:i};return s&&Object.keys(s).length>0&&(v.entitlements=s),a&&(v.trial_status=a),o&&(v.user_context=o),g&&(v.theme=g),v}async getPlacement(e,n,r){let i=qo(),s={request_id:i,user_id:e,traits:r??{},slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle};try{let a=await this.apiCall(i,"/api/decision-api/v1/decide-context",s);if(!a.ok)return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:!1,reason_codes:["api_error"]};let o=await a.json(),g=o.decision,v=g?.visible??!1,y={slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:v};return v&&g&&(y.output=g),o.reason_codes&&(y.reason_codes=o.reason_codes),y}catch{return {slot_id:n.slotId,entitlement_handle:n.entitlementHandle,plan_handle:n.planHandle,placement_handle:n.placementHandle,visible:false,reason_codes:["network_error"]}}}async checkEntitlement(e,n,r){let i=qo(),s={request_id:i,user_id:e,entitlement_handle:n,...r??{}};try{let a=await this.apiCall(i,"/api/decision-api/v1/check-entitlement",s);if(!a.ok)return {status:"denied",allowed:!1,reason:"api_error"};let o=await a.json();return {status:o.status??"denied",allowed:o.allowed??!1,reason:o.reason,current_tier:o.current_tier}}catch{return {status:"denied",allowed:false,reason:"network_error"}}}can(e,n,r){return this.checkEntitlement(e,n,r)}async getTrialStatus(e){let n=qo();return this.fetchTrialStatus(n,e)}async createClientSession(e){let n=qo(),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 $d(r.status,n);let i=await r.json();return {client_token:i.client_token,expires_at:i.expires_at}}async apiCall(e,n,r){return this.fetchFn(`${this.endpoint}${n}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e},body:JSON.stringify(r)})}async apiGet(e,n){return this.fetchFn(`${this.endpoint}${n}`,{method:"GET",headers:{authorization:`Bearer ${this.apiKey}`,"x-tenant-id":this.tenantId,"x-request-id":e}})}async evaluatePlacements(e,n){let r=n.placements??[];return r.length===0?[]:r.length>1?this.evaluatePlacementsBatch(e,n,r):[await this.getPlacement(n.userId,r[0],n.traits)]}async evaluatePlacementsBatch(e,n,r){let i={request_id:e,user_id:n.userId,traits:n.traits??{},usage_balances:n.usageBalances??{},page:n.page??{},placements:r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle}))};try{let s=await this.apiCall(e,"/api/decision-api/v1/bootstrap-context",i);return s.ok?(await s.json()).decisions.map((o,g)=>{let v=r[g]??{},y=o.result.decision?.visible??!1,I={slot_id:v.slotId,entitlement_handle:v.entitlementHandle,plan_handle:v.planHandle,placement_handle:v.placementHandle,visible:y};return y&&o.result.decision&&(I.output=o.result.decision),o.result.reason_codes&&(I.reason_codes=o.result.reason_codes),I}):r.map(o=>({slot_id:o.slotId,entitlement_handle:o.entitlementHandle,plan_handle:o.planHandle,placement_handle:o.placementHandle,visible:!1,reason_codes:["api_error"]}))}catch{return r.map(s=>({slot_id:s.slotId,entitlement_handle:s.entitlementHandle,plan_handle:s.planHandle,placement_handle:s.placementHandle,visible:false,reason_codes:["network_error"]}))}}async evaluateEntitlements(e,n){let r=n.entitlementHandles??[];if(r.length===0)return;let i={},s=await Promise.allSettled(r.map(async a=>{let o=await this.checkEntitlement(n.userId,a);return {handle:a,result:o}}));for(let a of s)a.status==="fulfilled"&&(i[a.value.handle]=a.value.result);return i}async fetchTrialStatus(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/trial-status",{request_id:e,user_id:n});if(!r.ok)return {in_trial:!1};let i=await r.json();return {in_trial:i.in_trial??!1,...i.trial_type!==void 0?{trial_type:i.trial_type}:{},...i.plan_handle!==void 0?{plan_handle:i.plan_handle}:{},...i.trial_limit_type!==void 0?{trial_limit_type:i.trial_limit_type}:{},...i.progress_percent!==void 0?{progress_percent:i.progress_percent}:{},...i.day_number!==void 0?{day_number:i.day_number}:{},...i.days_remaining!==void 0?{days_remaining:i.days_remaining}:{},...i.usage_entitlement_handle!==void 0?{usage_entitlement_handle:i.usage_entitlement_handle}:{},...i.usage_consumed!==void 0?{usage_consumed:i.usage_consumed}:{},...i.usage_remaining!==void 0?{usage_remaining:i.usage_remaining}:{},...i.usage_limit!==void 0?{usage_limit:i.usage_limit}:{}}}catch{return {in_trial:false}}}async fetchUserContext(e,n){try{let r=await this.apiCall(e,"/api/decision-api/v1/user-context",{request_id:e,user_id:n});if(!r.ok)return;let i=await r.json();return {segments:i.segments,traits:i.traits,usage_balances:i.usage_balances}}catch{return}}async fetchTheme(e){try{let n=await this.apiGet(e,"/api/sdk/theme");if(!n.ok)return;let r=await n.json();return typeof r!="object"||r===null?void 0:r}catch{return}}};var YA=/^[a-z0-9._]{1,100}$/,$s={Persisted:"persisted",Transient:"transient"},ts={Internal:"internal",External:"external"},Li={Financial:{"x-revturbine-data-classification":"financial"},Unrestricted:{"x-revturbine-data-classification":"unrestricted"},Operational:{"x-revturbine-data-classification":"operational"}},WA="readOnly";function si(t){let e={};for(let[n,r]of Object.entries(t.shape)){if(typeof r!="object"||r===null)continue;r.meta()?.[WA]===true||(e[n]=r);}return z.object(e)}function Br(t){let e=si(t),n=e.shape.handle;return n&&typeof n.regex=="function"?e.extend({handle:n.regex(YA)}):e}var {Unrestricted:Wr}=Li,{Transient:Jr,Persisted:XA}=$s,{Internal:ya,External:Ss}=ts;z.object({page:z.coerce.number().int().min(1).default(1).meta(Wr),per_page:z.coerce.number().int().min(1).max(100).default(25).meta(Wr)}).meta({id:"PaginationParams","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss});var Un=z.object({created_at:z.string().datetime().meta({...Wr,readOnly:true}),updated_at:z.string().datetime().meta({...Wr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss}),Cn=z.object({id:z.string().min(1).meta({...Wr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss}),Bn=z.object({tenant_id:z.string().min(1,"tenant_id is required").meta({...Wr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":ya});z.enum(["monthly","annual","quarterly","one_time","usage_based"]).meta({id:"BillingCadence","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss});var xf=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":Jr,"x-revturbine-schema-exposure":Ss}),Uv=["allowed","limited","denied"];z.enum(["presented","clicked","converted","dismissed","reminded","suppressed"]).meta({id:"PresentationOutcome","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss});var Yd=z.enum(["feature","capability_tier","usage_limit","price_per_unit","rate_limit","credits","seat"]).meta({id:"EntitlementType","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss}),Bv=z.enum(["usd","eur","gbp"]).default("usd").meta({id:"Currency","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":Ss});z.union([z.boolean(),z.number(),z.string()]).meta({id:"FeatureFlagValue","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":ya});var Is=z.string().min(1).max(200),lr=z.string().min(1).max(100),Wd=z.string().max(500).optional(),ci=z.record(z.string(),z.unknown()).default({}),va=z.number().int().min(10).max(100).multipleOf(10),Jd=z.string().datetime().nullable().default(null),tr=z.object({environment_id:z.string().min(1).default("production").meta({...Wr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":ya}),cr=z.object({playbook_version_id:z.string().nullable().default(null).meta(Wr),is_current:z.boolean().default(true).meta({...Wr,readOnly:true}),is_deleted:z.boolean().default(false).meta({...Wr,readOnly:true}),delete_date:z.string().datetime().nullable().default(null).meta({...Wr,readOnly:true}),sequence:z.number().int().min(1).default(1).meta({...Wr,readOnly:true}),base_sequence:z.number().int().nullable().default(null).meta({...Wr,readOnly:true})}).meta({id:"null","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":ya}),QA=Cn.merge(Un).merge(Bn).merge(tr).extend({handle:lr.meta({...Wr,readOnly:true}),active:z.boolean().default(true).meta({...Wr,readOnly:true})});function qr(t){return QA.meta({id:t,"x-revturbine-schema-persistence":XA,"x-revturbine-schema-exposure":ya})}z.enum(["info","warning","critical"]).meta({id:"Severity","x-revturbine-schema-persistence":Jr,"x-revturbine-schema-exposure":ya});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":Jr,"x-revturbine-schema-exposure":ya});var qv=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":Jr,"x-revturbine-schema-exposure":Ss});new Set(xf.options);var Dv=z.enum(["session","day","week","month"]),Mv=z.object({kind:z.enum(["template","slot"]),id:z.string(),label:z.string().optional()});z.object({id:z.string(),group:z.array(Mv),cap:z.object({count:z.number().int().min(1),period:Dv})});var _O="__self__",bO={steps:[{kind:"segment",table:"segments",by:"handle"},{kind:"plan",table:"plans",by:"unique_handle"},{kind:"literal"}]},Kv={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:_O,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:bO},caps:{},created_at:{},updated_at:{},source_mode:{},surfaces:{},content_link:{},surface_slot_ids:{},remind_later_minutes:{}}},content_ui_paths:{sortKey:"name",fields:{name:{},action_type:{},plan_handle:{reference:{table:"plans",by:"unique_handle",kind:"optional",onDelete:"detach"}},promotion_id:{reference:{table:"content_promotions",by:"id",kind:"optional",onDelete:"detach"}},placement_handle:{reference:{table:"placement_slots",by:"placement_handle",kind:"optional",onDelete:"detach"}},url:{},tour_id:{},target_billing_period:{},description:{}}},content_promotions:{sortKey:"id",indexBy:["id"],fields:{id:{},name:{},discount:{},type:{},status:{}}},personalization_tokens:{sortKey:"token",indexBy:["token"],fields:{token:{},label:{},description:{},category:{},data_source:{},example_value:{},value_map:{},format:{}}},message_blocks:{sortKey:"block_id",indexBy:["block_id"],fields:{block_id:{},tenant_id:{},name:{},surface_template_id:{reference:{table:"surface_templates",by:"id",kind:"optional",onDelete:"detach"}},default_content:{},segment_overrides:{},child_blocks:{},tokens_used:{},status:{},created_at:{},updated_at:{}}}};z.object({target_plan_ids:z.array(z.string()).default([]),target_billing_periods:z.array(z.string()).default([]),category:z.string().optional()});var Zv={Named:"named",Minted:"minted"},Yv="x-revturbine-schema-identity";function rs(t="handle"){return {[Yv]:{kind:Zv.Named,handleField:t}}}function is(t="handle"){return {[Yv]:{kind:Zv.Minted,handleField:t}}}var hn={Playbook:"playbook",Branding:"branding",Billing:"billing",Metering:"metering",CustomerOperations:"customer_operations",EventIngestion:"event_ingestion"},Vi={Customer:"customer",Stripe:"stripe",CodeConstant:"code-constant",Runtime:"runtime"},xO="x-revturbine-context",SO="x-revturbine-in-config",IO="x-revturbine-sdk-input",PO="x-revturbine-source",TO="x-revturbine-deprecation",CO={[hn.Playbook]:Vi.Customer,[hn.Branding]:Vi.Customer,[hn.Billing]:Vi.Stripe,[hn.Metering]:Vi.Customer,[hn.CustomerOperations]:Vi.Runtime,[hn.EventIngestion]:Vi.Runtime};function Zn(t,e){return {[xO]:t,[SO]:e.inConfig??t===hn.Playbook,[IO]:e.sdkInput,[PO]:e.source??CO[t]}}function Sf(t){return {deprecated:true,[TO]:{since:t.since,replacement:t.replacement,remove_after:t.removeAfter,reason:t.reason}}}var Xt=t=>z.object({items:z.array(t)}),Xn=z.object({error:z.string(),code:z.string(),request_id:z.string()}),E=t=>t,Qt=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:xe}=Li,{Persisted:wf,Transient:ai}=$s,{Internal:Wv,External:Xr}=ts,Jv=Zn(hn.Playbook,{sdkInput:true}),kO=Zn(hn.Playbook,{inConfig:false,sdkInput:false}),Xv=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":ai,"x-revturbine-schema-exposure":Xr}),eu=z.enum(["account_pool","per_instance","per_user","per_user_pooled"]).meta({id:"UsageAllocation","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),RO=z.enum(Uv).meta({id:"EntitlementGrantStatus","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),EO=z.enum(["rule","user_context","override"]).meta({id:"EntitlementGrantSource","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),Qv=z.enum(["hard_block","soft_block","degrade","allow_overage"]).meta({id:"EnforcementMode","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),If=z.object({entitlement_id:z.string().min(1).meta(xe),entitlement_handle:z.string().min(1).meta(xe),status:RO.meta(xe),limit:z.number().optional().meta(xe),used:z.number().optional().meta(xe),allocation:eu.optional().meta(xe),enforcement:Qv.optional().meta(xe),source:EO.optional().meta(xe),plan_id:z.string().optional().meta(xe),segment_id:z.string().optional().meta(xe),seat_type_id:z.string().optional().meta(xe),rule_id:z.string().optional().meta(xe)}).meta({id:"EntitlementGrant","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr,...Li.Operational});z.object({account:z.record(z.string(),If).optional().meta(xe),instance:z.record(z.string(),If).optional().meta(xe),user:z.record(z.string(),If).optional().meta(xe)}).meta({id:"EntitlementGrantSet","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr,...Li.Operational});var wO=z.enum(["public","non_public"]).meta({id:"RuleVisibility","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),AO=z.enum(["plan","plan_variation","addon","addon_variation"]).meta({id:"EntitlementRuleTargetKind","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),ex=z.object({kind:AO.meta(xe),id:z.string().min(1).meta(xe)}).meta({id:"EntitlementRuleTarget","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),OO=z.enum(["month","day","week","quarter","year","billing_period","hour","six_hours"]).meta({id:"EntitlementRulePeriodUnit","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),Go=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...xe,readOnly:true}),name:Is.meta(xe),handle:lr.meta(xe),customer_facing_description:z.string().max(500).optional().meta(xe),type:Yd.meta(xe),unit:z.string().max(100).optional().meta(xe),period_scope:Xv.optional().meta(xe),allocation:eu.optional().meta(xe),tier_definitions:z.array(z.object({name:z.string(),handle:z.string(),description:z.string().optional()})).optional().meta(xe),sort_order:z.number().int().default(0).meta(xe),metadata:ci.meta(xe)}).meta({id:"Entitlement","x-revturbine-schema-persistence":wf,"x-revturbine-schema-exposure":Xr,...Jv,...rs()}),jO=qr("EntitlementAnchor"),Qo=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...xe,readOnly:true}),handle:lr.meta({...xe,readOnly:true}),entitlement_id:z.string().min(1).meta(xe),targets:z.array(ex).min(1).meta(xe),segment_ids:z.array(z.string()).default([]).meta(xe),visibility:wO.default("public").meta(xe),period_scope:Xv.optional().meta(xe),instance:z.string().max(100).optional().meta(xe),reset_period:OO.optional().meta(xe),limit_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(xe),enforcement:Qv.optional().meta(xe),warning_threshold_percent:va.optional().meta(xe),overage_price_ref:z.string().optional().meta(xe),grace_period_hours:z.number().int().min(0).optional().meta(xe),tier_value:z.string().optional().meta(xe),rate_value:z.number().optional().meta(xe),initial_grant:z.number().optional().meta(xe),allowance_value:z.union([z.number(),z.literal("unlimited")]).optional().meta(xe),rollover_enabled:z.boolean().optional().meta(xe),max_balance:z.union([z.number(),z.literal("unlimited")]).nullable().default(null).meta(xe),seat_type_id:z.string().optional().meta(xe),included_count:z.union([z.number().int(),z.literal("unlimited")]).optional().meta(xe),at_limit_behavior:z.enum(["hard_cap","auto_upgrade_at_renewal"]).optional().meta(xe),stripe_metered_price_id:z.string().optional().meta(xe),enabled:z.boolean().optional().meta(xe),allocation:eu.optional().meta(xe),max_seats:z.union([z.number(),z.literal("unlimited")]).nullable().optional().meta(xe),amount_cents:z.number().int().optional().meta(xe),currency:z.string().optional().meta(xe)}).meta({id:"EntitlementRule","x-revturbine-schema-persistence":wf,"x-revturbine-schema-exposure":Wv,...Jv,...is()}),FO=qr("EntitlementRuleAnchor");Qo.superRefine((t,e)=>{t.reset_period==="billing_period"&&t.targets.findIndex(s=>s.kind!=="plan_variation"&&s.kind!=="addon_variation")!==-1&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"billing_period_target_mismatch"},message:"reset_period='billing_period' requires all targets to be plan_variation or addon_variation"});let n=t.allowance_value;(n==="unlimited"||typeof n=="number"&&n>0)&&t.reset_period==null&&e.addIssue({code:"custom",path:["reset_period"],params:{code:"allowance_requires_reset_period"},message:"a non-zero credits allowance_value requires a reset_period (the per-period refill cadence)"});});var LO=z.enum(["one_time_period_mismatch"]).meta({id:"EntitlementRuleWarningCode","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),VO=z.object({code:LO.meta(xe),message:z.string().min(1).meta(xe),path:z.array(z.union([z.string(),z.number().int()])).optional().meta(xe)}).meta({id:"EntitlementRuleWarning","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),Pf=Qo.extend({warnings:z.array(VO).optional().meta(xe)}).meta({id:"EntitlementRuleWriteResponse","x-revturbine-schema-persistence":ai,"x-revturbine-schema-exposure":Xr}),Tf=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({handle:lr.meta({...xe,readOnly:true}),rule_id:z.string().min(1).meta(xe),experiment_id:z.string().min(1).meta(xe),variant_name:z.string().min(1).max(200).meta(xe),is_control:z.boolean().default(false).meta(xe),override_fields:z.record(z.string(),z.unknown()).default({}).meta(xe)}).meta({id:"EntitlementRuleVariant","x-revturbine-schema-persistence":wf,"x-revturbine-schema-exposure":Wv,...kO,...is()}),UO=si(Go),BO=si(Qo);({"/api/entitlement-anchors":{get:E({operationId:"listEntitlementAnchors",requestParams:{query:Qt},summary:"List entitlement anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement anchor list",content:{"application/json":{schema:Xt(jO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-anchors",persistence:{table:"entitlements",mode:"list"}}})},"/api/entitlement-rule-anchors":{get:E({operationId:"listEntitlementRuleAnchors",requestParams:{query:Qt},summary:"List entitlement rule anchors (identity registry)",tags:["entitlements"],responses:{200:{description:"Entitlement rule anchor list",content:{"application/json":{schema:Xt(FO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"entitlement-rule-anchors",persistence:{table:"entitlementRules",mode:"list"}}})},"/api/entitlements":{get:E({operationId:"listEntitlements",requestParams:{query:Qt},summary:"List entitlements",tags:["entitlements"],responses:{200:{description:"Entitlement list",content:{"application/json":{schema:Xt(Go)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"list"}}}),post:E({operationId:"createEntitlement",summary:"Create entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(Go)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"create"}}})},"/api/entitlements/{entitlementId}":{get:E({operationId:"getEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Get entitlement",tags:["entitlements"],responses:{200:{description:"Entitlement detail",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"get"}}}),patch:E({operationId:"updateEntitlement",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Update entitlement",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:UO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Go}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"update"}}}),delete:E({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:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlements",persistence:{table:"entitlementVersions",mode:"delete"}}})},"/api/entitlements/{entitlementId}/rules":{get:E({operationId:"listEntitlementRules",requestParams:{path:z.object({entitlementId:z.string()}),query:Qt},summary:"List rules for entitlement",tags:["entitlements"],responses:{200:{description:"Rule list",content:{"application/json":{schema:Xt(Qo)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"list"}}}),post:E({operationId:"createEntitlementRule",requestParams:{path:z.object({entitlementId:z.string()})},summary:"Create entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(Qo)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Pf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"create"}}})},"/api/entitlement-rules/{ruleId}":{patch:E({operationId:"updateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update entitlement rule",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:BO}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Pf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"update"}}}),delete:E({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:E({operationId:"duplicateEntitlementRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Duplicate entitlement rule",tags:["entitlements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:Pf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rules",persistence:{table:"entitlementRuleVersions",mode:"duplicate"}}})},"/api/entitlement-rules/{ruleId}/variants":{get:E({operationId:"listEntitlementRuleVariants",requestParams:{path:z.object({ruleId:z.string()}),query:Qt},summary:"List A/B variants for rule",tags:["entitlements"],responses:{200:{description:"Variant list",content:{"application/json":{schema:Xt(Tf)}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"list"}}}),post:E({operationId:"createEntitlementRuleVariant",requestParams:{path:z.object({ruleId:z.string()})},summary:"Create rule A/B variant",tags:["entitlements"],requestBody:{required:true,content:{"application/json":{schema:Br(Tf)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tf}}}},"x-revturbine-operation":{exposure:"external",resource:"entitlement-rule-variants",persistence:{table:"entitlementRuleVariants",mode:"create"}}})}});var {Unrestricted:We}=Li,{Persisted:xc,Transient:Sc}=$s,{Internal:ss}=ts,tx=Zn(hn.Playbook,{sdkInput:true}),nx=Zn(hn.Playbook,{inConfig:false,sdkInput:true}),qO=z.enum(["not_started","active","expired","converted","cancelled"]).meta({id:"TrialStatus","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":ss}),Af=z.enum(["time","usage"]).meta({id:"TrialLimitType","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":ss}),rx=z.object({name:Is.meta(We),handle:lr.meta(We),plan_id:z.string().nullable().optional().meta(We),segment_id:z.string().nullable().optional().meta(We),trial_limit_type:Af.default("time").meta(We),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(We),grace_period_days:z.number().int().min(0).default(0).meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),require_payment_method:z.boolean().default(false).meta(We),auto_convert:z.boolean().default(true).meta(We),convert_to_plan_id:z.string().optional().meta(We),fallback_plan_id:z.string().optional().meta(We),limit_per_customer:z.number().int().min(1).default(1).meta(We),is_active:z.boolean().default(true).meta(We),metadata:ci.meta(We)}),Mo=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true})}).merge(rx).meta({id:"FreeTrialRule","x-revturbine-schema-persistence":xc,"x-revturbine-schema-exposure":ss,...tx,...rs()}),DO=qr("FreeTrialRuleAnchor"),MO=z.enum(["signup","first_premium_access","manual"]).meta({id:"ReverseTrialStartPolicy","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":ss}),ix=z.object({name:Is.meta(We),handle:lr.meta(We),premium_plan_id:z.string().min(1).meta(We),fallback_plan_id:z.string().min(1).meta(We),segment_id:z.string().nullable().optional().meta(We),trial_limit_type:Af.default("time").meta(We),duration_days:z.number().int().min(1).max(365).nullable().optional().meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),start_policy:MO.default("signup").meta(We),show_upgrade_prompt_at_day:z.number().int().min(0).optional().meta(We),entitlements_during_trial:z.array(z.string()).default([]).meta(We),is_active:z.boolean().default(true).meta(We),metadata:ci.meta(We)}),No=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...We,readOnly:true})}).merge(ix).meta({id:"ReverseTrialRule","x-revturbine-schema-persistence":xc,"x-revturbine-schema-exposure":ss,...tx,...rs()}),NO=qr("ReverseTrialRuleAnchor"),sx=z.enum(["1_per_lifetime","1_per_plan","1_per_year","unlimited"]).meta({id:"TrialLimitPolicy","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":ss}),ax=z.enum(["per_customer","per_email_domain"]).meta({id:"TrialEligibilityScope","x-revturbine-schema-persistence":Sc,"x-revturbine-schema-exposure":ss}),Ho=Cn.merge(Un).merge(Bn).extend({trial_limit_policy:sx.default("1_per_lifetime").meta(We),eligibility_scope:ax.default("per_customer").meta(We)}).meta({id:"FreeTrialSettings","x-revturbine-schema-persistence":xc,"x-revturbine-schema-exposure":ss,...nx}),zo=Cn.merge(Un).merge(Bn).extend({trial_limit_policy:sx.default("1_per_lifetime").meta(We),eligibility_scope:ax.default("per_customer").meta(We)}).meta({id:"ReverseTrialSettings","x-revturbine-schema-persistence":xc,"x-revturbine-schema-exposure":ss,...nx}),Xd=Cn.merge(Un).merge(Bn).extend({customer_id:z.string().min(1).meta(We),rule_id:z.string().min(1).meta(We),rule_type:z.enum(["free_trial","reverse_trial"]).meta(We),plan_id:z.string().min(1).meta(We),status:qO.default("active").meta(We),started_at:z.string().datetime().meta({...We,readOnly:true}),expires_at:z.string().datetime().nullable().optional().meta(We),trial_limit_type:Af.default("time").meta(We),usage_entitlement_handle:z.string().min(1).optional().meta(We),usage_limit_value:z.number().int().min(1).optional().meta(We),converted_at:Jd.meta(We),cancelled_at:Jd.meta(We),metadata:ci.meta(We)}).meta({id:"TrialInstance","x-revturbine-schema-persistence":xc,"x-revturbine-schema-exposure":ss});({"/api/free-trial-rule-anchors":{get:E({operationId:"listFreeTrialRuleAnchors",requestParams:{query:Qt},summary:"List free trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Free trial rule anchor list",content:{"application/json":{schema:Xt(DO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-rule-anchors",persistence:{table:"freeTrialRules",mode:"list"}}})},"/api/trials/free-rules":{get:E({operationId:"listFreeTrialRules",requestParams:{query:Qt},summary:"List free trial rules",tags:["trials"],responses:{200:{description:"Free trial rule list",content:{"application/json":{schema:Xt(Mo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"list"}}})},"/api/trials/free-rules/{ruleId}":{get:E({operationId:"getFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get free trial rule",tags:["trials"],responses:{200:{description:"Free trial rule",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"get"}}}),patch:E({operationId:"updateFreeTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update free trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Mo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Mo}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-rules",persistence:{table:"freeTrialRuleVersions",mode:"update"}}}),delete:E({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:E({operationId:"listReverseTrialRuleAnchors",requestParams:{query:Qt},summary:"List reverse trial rule anchors (identity registry)",tags:["trials"],responses:{200:{description:"Reverse trial rule anchor list",content:{"application/json":{schema:Xt(NO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rule-anchors",persistence:{table:"reverseTrialRules",mode:"list"}}})},"/api/trials/reverse-rules":{get:E({operationId:"listReverseTrialRules",requestParams:{query:Qt},summary:"List reverse trial rules",tags:["trials"],responses:{200:{description:"Reverse trial rule list",content:{"application/json":{schema:Xt(No)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"list"}}})},"/api/trials/reverse-rules/{ruleId}":{get:E({operationId:"getReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Get reverse trial rule",tags:["trials"],responses:{200:{description:"Reverse trial rule",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"get"}}}),patch:E({operationId:"updateReverseTrialRule",requestParams:{path:z.object({ruleId:z.string()})},summary:"Update reverse trial rule",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:No.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:No}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-rules",persistence:{table:"reverseTrialRuleVersions",mode:"update"}}}),delete:E({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:E({operationId:"listFreeTrialSettings",requestParams:{query:Qt},summary:"List free trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Free trial settings list",content:{"application/json":{schema:Xt(Ho)}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"list"}}})},"/api/trials/free-settings/{settingsId}":{get:E({operationId:"getFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Get free trial settings",tags:["trials"],responses:{200:{description:"Free trial settings",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"get"}}}),patch:E({operationId:"updateFreeTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update free trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:Ho.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Ho}}}},"x-revturbine-operation":{exposure:"internal",resource:"free-trial-settings",persistence:{table:"freeTrialSettings",mode:"update"}}})},"/api/trials/reverse-settings":{get:E({operationId:"listReverseTrialSettings",requestParams:{query:Qt},summary:"List reverse trial settings (one row per tenant)",tags:["trials"],responses:{200:{description:"Reverse trial settings list",content:{"application/json":{schema:Xt(zo)}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"list"}}})},"/api/trials/reverse-settings/{settingsId}":{get:E({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:zo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"get"}}}),patch:E({operationId:"updateReverseTrialSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update reverse trial settings",tags:["trials"],requestBody:{required:true,content:{"application/json":{schema:zo.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:zo}}}},"x-revturbine-operation":{exposure:"internal",resource:"reverse-trial-settings",persistence:{table:"reverseTrialSettings",mode:"update"}}})},"/api/trials/instances":{get:E({operationId:"listTrialInstances",requestParams:{query:Qt},summary:"List trial instances",tags:["trials"],responses:{200:{description:"Trial instance list",content:{"application/json":{schema:Xt(Xd)}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"list"}}})},"/api/trials/instances/{instanceId}":{get:E({operationId:"getTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Get trial instance",tags:["trials"],responses:{200:{description:"Trial instance",content:{"application/json":{schema:Xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"get"}}})},"/api/trials/instances/{instanceId}/cancel":{post:E({operationId:"cancelTrialInstance",requestParams:{path:z.object({instanceId:z.string()})},summary:"Cancel an active trial",tags:["trials"],responses:{200:{description:"Cancelled",content:{"application/json":{schema:Xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})},"/api/trials/instances/{instanceId}/convert":{post:E({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:Xd}}}},"x-revturbine-operation":{exposure:"internal",resource:"trial-instances",persistence:{table:"trialInstances",mode:"update"}}})}});var {Unrestricted:$t,Financial:Qd}=Li,{Persisted:Ic,Transient:tu}=$s,{External:Ps}=ts,HO=Zn(hn.Playbook,{sdkInput:true}),zO=Zn(hn.Playbook,{sdkInput:false}),Of=Zn(hn.Billing,{sdkInput:false}),Ys=z.enum(["public","unlisted","legacy"]).meta({id:"PlanVisibility","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ps}),Pc=z.enum(["flat","per_unit","tiered","metered"]).meta({id:"PricingModel","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ps}),nu=z.enum(["stripe","static"]).meta({id:"PriceSource","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ps}),$o=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:Is.meta($t),handle:lr.meta($t),tier_position:z.number().int().min(0).default(0).meta($t),sort_order:z.number().int().default(0).meta($t),visibility:Ys.default("public").meta($t),metadata:ci.meta($t)}).meta({id:"Plan","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Ps,...HO,...rs()}),KO=qr("PlanAnchor"),Zo=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:lr.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(Qd),pricing_model:Pc.meta($t),visibility:Ys.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:nu.default("static").meta($t)}).meta({id:"PlanVariation","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Ps,...Of,...is()}),GO=qr("PlanVariationAnchor"),Yo=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),name:Is.meta($t),handle:lr.meta($t),sort_order:z.number().int().default(0).meta($t),visibility:Ys.default("public").meta($t),metadata:ci.meta($t)}).meta({id:"AddOn","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Ps,...zO,...rs()}),$O=qr("AddOnAnchor"),Wo=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...$t,readOnly:true}),handle:lr.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(Qd),pricing_model:Pc.meta($t),visibility:Ys.default("public").meta($t),stripe_price_id:z.string().optional().meta($t),price_source:nu.default("static").meta($t)}).meta({id:"AddOnVariation","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Ps,...Of,...is()}),ZO=qr("AddOnVariationAnchor"),YO=z.enum(["monthly","annual","one_time","custom"]).meta({id:"StripePriceBillingPeriod","x-revturbine-schema-persistence":tu,"x-revturbine-schema-exposure":Ps}),Jo=Cn.merge(Un).merge(Bn).extend({stripe_price_id:z.string().min(1).meta($t),stripe_product_id:z.string().min(1).meta($t),billing_period:YO.meta($t),unit_amount_cents:z.number().int().min(0).nullable().default(null).meta(Qd),currency:Bv.meta(Qd),pricing_model:Pc.meta($t),nickname:z.string().nullable().default(null).meta($t),is_mock:z.boolean().default(false).meta($t),last_updated_from_stripe:Jd.meta($t)}).meta({id:"StripePrice","x-revturbine-schema-persistence":Ic,"x-revturbine-schema-exposure":Ps,...Of}),WO=si($o),JO=si(Zo),XO=si(Yo),QO=si(Wo),e1=si(Jo);({"/api/plan-anchors":{get:E({operationId:"listPlanAnchors",requestParams:{query:Qt},summary:"List plan anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan anchor list",content:{"application/json":{schema:Xt(KO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-anchors",persistence:{table:"plans",mode:"list"}}})},"/api/plans":{get:E({operationId:"listPlans",requestParams:{query:Qt},summary:"List plans",tags:["plans"],responses:{200:{description:"Plan list response",content:{"application/json":{schema:Xt($o)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"list"}}}),post:E({operationId:"createPlan",summary:"Create plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br($o)}}},responses:{201:{description:"Created plan",content:{"application/json":{schema:$o}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"create"}}})},"/api/plans/{planId}":{get:E({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:$o}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"get"}}}),patch:E({operationId:"updatePlan",requestParams:{path:z.object({planId:z.string()})},summary:"Update plan",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:WO}}},responses:{200:{description:"Updated plan",content:{"application/json":{schema:$o}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"update"}}}),delete:E({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:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"plans",persistence:{table:"planVersions",mode:"delete"}}})},"/api/plans/reorder":{post:E({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:E({operationId:"listPlanVariationAnchors",requestParams:{query:Qt},summary:"List plan variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Plan variation anchor list",content:{"application/json":{schema:Xt(GO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"plan-variation-anchors",persistence:{table:"planVariations",mode:"list"}}})},"/api/plans/{planId}/variations":{get:E({operationId:"listPlanVariations",requestParams:{path:z.object({planId:z.string()}),query:Qt},summary:"List plan variations",tags:["plans"],responses:{200:{description:"Plan variations",content:{"application/json":{schema:Xt(Zo)}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"list"}}}),post:E({operationId:"createPlanVariation",requestParams:{path:z.object({planId:z.string()})},summary:"Create plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Zo)}}},responses:{201:{description:"Created plan variation",content:{"application/json":{schema:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"create"}}})},"/api/plan-variations/{variationId}":{get:E({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:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"get"}}}),patch:E({operationId:"updatePlanVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update plan variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:JO}}},responses:{200:{description:"Updated plan variation",content:{"application/json":{schema:Zo}}}},"x-revturbine-operation":{exposure:"external",resource:"plan-variations",persistence:{table:"planVariationVersions",mode:"update"}}}),delete:E({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:E({operationId:"listAddOnAnchors",requestParams:{query:Qt},summary:"List add-on anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on anchor list",content:{"application/json":{schema:Xt($O)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-anchors",persistence:{table:"addons",mode:"list"}}})},"/api/addons":{get:E({operationId:"listAddOns",requestParams:{query:Qt},summary:"List add-ons",tags:["plans"],responses:{200:{description:"Add-on list",content:{"application/json":{schema:Xt(Yo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"list"}}}),post:E({operationId:"createAddOn",summary:"Create add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Yo)}}},responses:{201:{description:"Created add-on",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"create"}}})},"/api/addons/{addonId}":{get:E({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:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"get"}}}),patch:E({operationId:"updateAddOn",requestParams:{path:z.object({addonId:z.string()})},summary:"Update add-on",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:XO}}},responses:{200:{description:"Updated add-on",content:{"application/json":{schema:Yo}}}},"x-revturbine-operation":{exposure:"external",resource:"addons",persistence:{table:"addonVersions",mode:"update"}}}),delete:E({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:E({operationId:"listAddOnVariationAnchors",requestParams:{query:Qt},summary:"List add-on variation anchors (identity registry)",tags:["plans"],responses:{200:{description:"Add-on variation anchor list",content:{"application/json":{schema:Xt(ZO)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"addon-variation-anchors",persistence:{table:"addonVariations",mode:"list"}}})},"/api/addons/{addonId}/variations":{get:E({operationId:"listAddOnVariations",requestParams:{path:z.object({addonId:z.string()}),query:Qt},summary:"List add-on variations",tags:["plans"],responses:{200:{description:"Add-on variations",content:{"application/json":{schema:Xt(Wo)}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"list"}}}),post:E({operationId:"createAddOnVariation",requestParams:{path:z.object({addonId:z.string()})},summary:"Create add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Wo)}}},responses:{201:{description:"Created variation",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"create"}}})},"/api/addon-variations/{variationId}":{get:E({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:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"get"}}}),patch:E({operationId:"updateAddOnVariation",requestParams:{path:z.object({variationId:z.string()})},summary:"Update add-on variation",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:QO}}},responses:{200:{description:"Updated variation",content:{"application/json":{schema:Wo}}}},"x-revturbine-operation":{exposure:"external",resource:"addon-variations",persistence:{table:"addonVariationVersions",mode:"update"}}}),delete:E({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:E({operationId:"listStripePrices",requestParams:{query:Qt},summary:"List Stripe prices",tags:["plans"],responses:{200:{description:"Stripe price list",content:{"application/json":{schema:Xt(Jo)}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"list"}}}),post:E({operationId:"createStripePrice",summary:"Create Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:Br(Jo)}}},responses:{201:{description:"Created Stripe price",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"create"}}})},"/api/stripe-prices/{id}":{get:E({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:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"get"}}}),patch:E({operationId:"updateStripePrice",requestParams:{path:z.object({id:z.string()})},summary:"Update Stripe price",tags:["plans"],requestBody:{required:true,content:{"application/json":{schema:e1}}},responses:{200:{description:"Updated Stripe price",content:{"application/json":{schema:Jo}}}},"x-revturbine-operation":{exposure:"external",resource:"stripe-prices",persistence:{table:"stripePrices",mode:"update"}}}),delete:E({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}=Li,{Persisted:el,Transient:et}=$s,{Internal:Ii,External:Et}=ts,yt=Zn(hn.Playbook,{sdkInput:true}),Xo=Zn(hn.Playbook,{sdkInput:false}),Zs=Zn(hn.Playbook,{inConfig:false,sdkInput:false}),ox=Zn(hn.Playbook,{inConfig:false,sdkInput:true}),Ko=Zn(hn.Playbook,{inConfig:false,sdkInput:true,source:Vi.CodeConstant}),Cf=Zn(hn.Playbook,{inConfig:false,sdkInput:true,source:Vi.Runtime}),kf=Zn(hn.Playbook,{inConfig:false,sdkInput:false,source:Vi.Runtime}),t1=Zn(hn.Billing,{sdkInput:false}),n1=Zn(hn.Metering,{sdkInput:false}),r1=Zn(hn.Branding,{inConfig:true,sdkInput:true}),i1=Zn(hn.Branding,{sdkInput:false}),s1="1.0.0",_c=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),name:Is.meta(h),handle:lr.meta(h),description:Wd.meta(h),is_default:z.boolean().default(false).meta(h),entitlement_ids:z.array(z.string()).default([]).meta(h),metadata:ci.meta(h)}).meta({id:"SeatType","x-revturbine-schema-persistence":el,"x-revturbine-schema-exposure":Ii,...Zs,...rs()}),a1=qr("SeatTypeAnchor"),bc=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:lr.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:ci.meta(h)}).meta({id:"PersonalizationToken","x-revturbine-schema-persistence":el,"x-revturbine-schema-exposure":Ii,...Zs,...rs()}),o1=qr("PersonalizationTokenAnchor"),l1=z.enum(["not_started","started","details_submitted","charges_enabled","activated","deauthorized"]).meta({id:"OnboardingState","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ii}),Rf=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({handle:lr.meta({...h,readOnly:true}),stripe_account_id:z.string().min(1).meta(h),live_mode:z.boolean().default(false).meta(h),onboarding_state:l1.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:ci.meta(h)}).meta({id:"StripeIntegrationConfig","x-revturbine-schema-persistence":el,"x-revturbine-schema-exposure":Ii,...t1,...is()});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":et,"x-revturbine-schema-exposure":Et,...i1});var yc=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({handle:lr.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:ci.meta(h)}).meta({id:"MeteringConfig","x-revturbine-schema-persistence":el,"x-revturbine-schema-exposure":Ii,...n1,...is()}),Gv=z.enum(["block","warn","downgrade","throttle","notify_admin","custom"]).meta({id:"EnforcementAction","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ii}),vc=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:lr.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:Gv.default("warn").meta(h),hard_limit_action:Gv.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":el,"x-revturbine-schema-exposure":Ii,...ox,...is()}),c1=qr("UsageEnforcementSettingsAnchor"),d1=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":et,"x-revturbine-schema-exposure":Ii}),u1=z.object({id:z.string().min(1).meta(h),group:z.array(d1).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":et,"x-revturbine-schema-exposure":Ii}),m1=z.enum(["off","test_users","all_traffic"]).meta({id:"PlacementTestMode","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ii}),lx=z.object({capRules:z.array(u1).default([]).meta(h),sessionCooldownMinutes:z.number().int().min(0).default(30).meta(h),remindLaterMinutes:z.number().int().min(0).default(60).meta(h),testMode:m1.default("off").meta(h)}).meta({id:"PlacementSettingsCapState","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Ii}),Ef=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...h,readOnly:true}),handle:lr.meta({...h,readOnly:true}),global_frequency_cap:lx.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":el,"x-revturbine-schema-exposure":Ii,...ox,...is()}),p1=qr("PlacementSettingsAnchor"),f1=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":et,"x-revturbine-schema-exposure":Et}),h1=z.object({name:z.string().min(1).meta(h),handle:z.string().min(1).meta(h),predicates:z.array(f1).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":et,"x-revturbine-schema-exposure":Et,...yt}),g1=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:Ys.default("public").meta(h)}).meta({id:"RevTurbineConfigPlansItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt}),_1=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:Ys.default("public").meta(h)}).meta({id:"RevTurbineConfigAddonsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Xo}),b1=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:Pc.meta(h),visibility:Ys.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:nu.meta(h)}).meta({id:"RevTurbineConfigPlanVariationsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Zs}),y1=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:Pc.meta(h),visibility:Ys.default("public").meta(h),stripe_price_id:z.string().nullable().default(null).meta(h),price_source:nu.meta(h)}).meta({id:"RevTurbineConfigAddonVariationsItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Zs}),v1=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":et,"x-revturbine-schema-exposure":Et,...yt}),x1=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":et,"x-revturbine-schema-exposure":Et,...yt}),S1=z.object({handle:z.string().min(1).meta(h),global_frequency_cap:lx.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":et,"x-revturbine-schema-exposure":Et,...yt}),I1=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":et,"x-revturbine-schema-exposure":Et,...yt}),P1=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":et,"x-revturbine-schema-exposure":Et,...yt}),T1=z.object({unique_handle:z.string().min(1).meta(h),name:z.string().min(1).meta(h),type:Yd.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":et,"x-revturbine-schema-exposure":Et,...yt}),cx=z.object({id:z.string().min(1).meta(h),entitlement_id:z.string().min(1).meta(h),targets:z.array(ex).min(1).meta(h),segment_ids:z.array(z.string()).default([]).meta(h),kind:Yd.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}),...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(h),allocation:eu.optional().meta(h)}).meta({id:"RevTurbineConfigEntitlementRulesItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt}),C1=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":et,"x-revturbine-schema-exposure":Et,...yt}),k1=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":et,"x-revturbine-schema-exposure":Et,...yt}),R1=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":et,"x-revturbine-schema-exposure":Et}),E1=z.object({id:z.string().min(1).meta(h),surface_type:z.string().meta(h),fields:z.array(R1).optional().meta(h)}).meta({id:"RevTurbineConfigSurfaceTemplatesItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt}),w1=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":et,"x-revturbine-schema-exposure":Et}),A1=z.object({name:z.string().min(1).meta(h),action_type:w1.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":et,"x-revturbine-schema-exposure":Et,...yt}),O1=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":et,"x-revturbine-schema-exposure":Et,...yt}),j1=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":et,"x-revturbine-schema-exposure":Et,...yt}),$v=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":et,"x-revturbine-schema-exposure":Et}),F1=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:$v.meta(h),segment_overrides:z.array(z.object({segment_value_id:z.string(),content:$v})).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":et,"x-revturbine-schema-exposure":Et,...yt}),L1=z.object({label:z.string().meta(h),path:qv.meta(h),config:z.record(z.string(),z.string()).optional().meta(h)}).meta({id:"RevTurbineConfigStudioCtaConfig","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et}),dx=z.object({template_id:z.string().min(1).meta(h),fields:z.record(z.string(),z.string()).meta(h),ctas:z.array(L1).meta(h)}).meta({id:"RevTurbineConfigStudioPayloadSurface","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et}),ux=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":et,"x-revturbine-schema-exposure":Et}),V1=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":et,"x-revturbine-schema-exposure":Et}),mx=z.object({max_per_period:V1.optional().meta(h),cooldown_days:z.number().int().min(0).optional().meta(h)}).meta({id:"RevTurbineConfigStudioPayloadCaps","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et}),U1=z.object({id:z.string().min(1).meta(h),target:ux.meta(h),surfaces:z.array(dx).meta(h),caps:mx.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":et,"x-revturbine-schema-exposure":Et}),B1=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:va}),z.object({type:z.literal("credit_threshold"),entitlement_handle:z.string().min(1),threshold_percent:va}),z.object({type:z.literal("seat_threshold"),entitlement_handle:z.string().min(1),threshold_percent:va}),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":et,"x-revturbine-schema-exposure":Et}),q1=z.enum(["fixed","gated","usage_credit_seat","trials","other_conversion","retention"]).meta({id:"RevTurbineConfigPlacementCategory","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et}),D1=z.object({id:z.string().min(1).meta(h),name:z.string().min(1).meta(h),category:q1.meta(h),trigger:B1.meta(h),payloads:z.array(U1).meta(h),order:z.number().int().min(0).meta(h)}).meta({id:"RevTurbineConfigPlacementItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt}),M1=z.object({payload_id:z.string().min(1).meta(h),placement_id:z.string().min(1).meta(h),target:ux.meta(h),caps:mx.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(dx).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":et,"x-revturbine-schema-exposure":Et,...yt}),N1=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":et,"x-revturbine-schema-exposure":Et,...yt}),H1=Cn.merge(rx).meta({id:"RevTurbineConfigFreeTrialRuleItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Zs}),z1=Cn.merge(ix).meta({id:"RevTurbineConfigReverseTrialRuleItem","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Zs}),K1=z.object({plans:z.array(g1).meta({...h,...yt}),addons:z.array(_1).optional().meta({...h,...Xo}),entitlements:z.array(T1).meta({...h,...yt}),entitlement_rules:z.array(cx).meta({...h,...yt}),segments:z.array(h1).meta({...h,...yt}),content_ui_paths:z.array(A1).meta({...h,...yt}),slot_configs:z.array(C1).optional().meta({...h,...yt,...Sf({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,...yt,...Sf({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,...r1,...Sf({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(k1).optional().meta({...h,...yt}),message_blocks:z.array(F1).optional().meta({...h,...yt}),placement_payloads:z.array(M1).optional().meta({...h,...yt}),placements:z.array(D1).optional().meta({...h,...yt}),content_promotions:z.array(O1).optional().meta({...h,...yt}),personalization_tokens:z.array(j1).optional().meta({...h,...yt}),surface_templates:z.array(E1).optional().meta({...h,...yt}),free_trial_rules:z.array(H1).optional().meta({...h,...Xo}),reverse_trial_rules:z.array(z1).optional().meta({...h,...Xo}),plan_variations:z.array(b1).optional().meta({...h,...Xo}),addon_variations:z.array(y1).optional().meta({...h,...Xo}),extension_rules:z.array(N1).optional().meta({...h,...yt}),seat_types:z.array(v1).optional().meta({...h,...yt}),enforcement_defaults:z.array(x1).optional().meta({...h,...yt}),placement_settings:z.array(S1).optional().meta({...h,...yt}),segment_dimensions:z.array(I1).optional().meta({...h,...yt}),meter_bindings:z.array(P1).optional().meta({...h,...yt}),experiments:z.array(z.unknown()).max(0).optional().meta({...h,...Zs}),signal_catalog:z.object({}).strict().optional().meta({...h,...Zs})}).meta({id:"PlaybookBody","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt}),G1=z.object({artifact_type:z.literal("playbook").meta({...h,...Ko,readOnly:true}),format_version:z.literal(s1).meta({...h,...Ko,readOnly:true}),playbook_handle:z.string().min(1).default("default").meta({...h,...Ko}),playbook_version_id:z.string().nullable().default(null).meta({...h,...Cf,readOnly:true}),tenant_id:z.string().min(1).optional().meta({...h,...kf,readOnly:true}),environment_id:z.string().min(1).optional().meta({...h,...kf,readOnly:true}),project_id:z.string().min(1).optional().meta({...h,...kf,readOnly:true}),exported_at:z.string().datetime().optional().meta({...h,...Cf,readOnly:true}),schema_version:z.string().min(1).optional().meta({...h,...Ko,readOnly:true}),bundle_schema_version:z.number().int().nonnegative().optional().meta({...h,...Ko,readOnly:true}),bundle_min_readable_schema_version:z.number().int().nonnegative().optional().meta({...h,...Ko,readOnly:true})}).meta({id:"PlaybookHeader","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...Cf}),px=G1.extend(K1.shape).meta({"x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt});function $1(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function fx(t){if(!$1(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,px).meta({id:"Playbook","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt});z.preprocess(fx,px.strict()).meta({id:"PlaybookStrict","x-revturbine-schema-persistence":et,"x-revturbine-schema-exposure":Et,...yt});({"/api/seat-type-anchors":{get:E({operationId:"listSeatTypeAnchors",requestParams:{query:Qt},summary:"List seat type anchors (identity registry)",tags:["config"],responses:{200:{description:"Seat type anchor list",content:{"application/json":{schema:Xt(a1)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-type-anchors",persistence:{table:"seatTypes",mode:"list"}}})},"/api/config/seat-types":{get:E({operationId:"listSeatTypes",requestParams:{query:Qt},summary:"List seat types",tags:["config"],responses:{200:{description:"Seat type list",content:{"application/json":{schema:Xt(_c)}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"list"}}}),post:E({operationId:"createSeatType",summary:"Create seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(_c)}}},responses:{201:{description:"Created",content:{"application/json":{schema:_c}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"create"}}})},"/api/config/seat-types/{id}":{patch:E({operationId:"updateSeatType",requestParams:{path:z.object({id:z.string()})},summary:"Update seat type",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:_c.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:_c}}}},"x-revturbine-operation":{exposure:"internal",resource:"seat-types",persistence:{table:"seatTypeVersions",mode:"update"}}}),delete:E({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:E({operationId:"listPersonalizationTokenAnchors",requestParams:{query:Qt},summary:"List personalization token anchors (identity registry)",tags:["config"],responses:{200:{description:"Personalization token anchor list",content:{"application/json":{schema:Xt(o1)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-token-anchors",persistence:{table:"personalizationTokens",mode:"list"}}})},"/api/config/personalization-tokens":{get:E({operationId:"listPersonalizationTokens",requestParams:{query:Qt},summary:"List personalization tokens",tags:["config"],responses:{200:{description:"Personalization token list",content:{"application/json":{schema:Xt(bc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"list"}}}),post:E({operationId:"createPersonalizationToken",summary:"Create personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(bc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:bc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"create"}}})},"/api/config/personalization-tokens/{id}":{patch:E({operationId:"updatePersonalizationToken",requestParams:{path:z.object({id:z.string()})},summary:"Update personalization token",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:bc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:bc}}}},"x-revturbine-operation":{exposure:"internal",resource:"personalization-tokens",persistence:{table:"personalizationTokenVersions",mode:"update"}}}),delete:E({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:E({operationId:"upsertStripeIntegrationConfig",summary:"Create or update Stripe integration config",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:si(Rf)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Rf}}}},"x-revturbine-operation":{exposure:"internal",resource:"stripe-config",persistence:{table:"stripeIntegrationConfig",mode:"upsert"}}})},"/api/config/metering":{get:E({operationId:"listMeteringConfigs",requestParams:{query:Qt},summary:"List metering configurations",tags:["config"],responses:{200:{description:"Metering config list",content:{"application/json":{schema:Xt(yc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"list"}}}),post:E({operationId:"createMeteringConfig",summary:"Create metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(yc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:yc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"create"}}})},"/api/config/metering/{meteringId}":{patch:E({operationId:"updateMeteringConfig",requestParams:{path:z.object({meteringId:z.string()})},summary:"Update metering configuration",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:yc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:yc}}}},"x-revturbine-operation":{exposure:"internal",resource:"metering-config",persistence:{table:"meteringConfigs",mode:"update"}}}),delete:E({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:E({operationId:"listUsageEnforcementSettingsAnchors",requestParams:{query:Qt},summary:"List usage enforcement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Usage enforcement setting anchor list",content:{"application/json":{schema:Xt(c1)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement-setting-anchors",persistence:{table:"usageEnforcementSettings",mode:"list"}}})},"/api/config/usage-enforcement":{get:E({operationId:"listUsageEnforcementSettings",requestParams:{query:Qt},summary:"List usage enforcement settings",tags:["config"],responses:{200:{description:"Enforcement settings",content:{"application/json":{schema:Xt(vc)}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"list"}}}),post:E({operationId:"createUsageEnforcementSettings",summary:"Create usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:Br(vc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:vc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"create"}}})},"/api/config/usage-enforcement/{settingsId}":{patch:E({operationId:"updateUsageEnforcementSettings",requestParams:{path:z.object({settingsId:z.string()})},summary:"Update usage enforcement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:vc.partial()}}},responses:{200:{description:"Updated",content:{"application/json":{schema:vc}}}},"x-revturbine-operation":{exposure:"internal",resource:"usage-enforcement",persistence:{table:"usageEnforcementSettingVersions",mode:"update"}}}),delete:E({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:E({operationId:"listPlacementSettingsAnchors",requestParams:{query:Qt},summary:"List placement setting anchors (identity registry)",tags:["config"],responses:{200:{description:"Placement setting anchor list",content:{"application/json":{schema:Xt(p1)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-setting-anchors",persistence:{table:"placementSettings",mode:"list"}}})},"/api/config/placement-settings":{put:E({operationId:"upsertPlacementSettings",summary:"Create or update global placement settings",tags:["config"],requestBody:{required:true,content:{"application/json":{schema:si(Ef)}}},responses:{200:{description:"Saved",content:{"application/json":{schema:Ef}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-settings",persistence:{table:"placementSettingVersions",mode:"upsert"}}})}});var ru=new Int32Array(2);new Float32Array(ru.buffer);new Float64Array(ru.buffer);new Uint16Array(new Uint8Array([1,0]).buffer)[0]===1;var iu;(function(t){t[t.UTF8_BYTES=1]="UTF8_BYTES",t[t.UTF16_STRING=2]="UTF16_STRING";})(iu||(iu={}));var {Unrestricted:Fe}=Li,{Persisted:au,Transient:Ws}=$s,{External:Pi}=ts,Sx=Zn(hn.Playbook,{sdkInput:true});Zn(hn.Playbook,{inConfig:false,sdkInput:false});var X1=Zn(hn.Playbook,{inConfig:false,sdkInput:true}),Q1=Zn(hn.Playbook,{inConfig:false,sdkInput:false,source:Vi.Runtime}),ej=z.enum(["none_always_on","overage_vs_upgrade","time_bound","payment_failed","payment_at_risk"]);var Ix=z.enum(["fixed","gated_feature","usage_limit","trial","other_conversion","retention"]).meta({id:"PlacementCategory","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi}),Px=z.enum(["session","day","week","month","lifetime"]).meta({id:"CapPeriod","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi}),tj=z.object({count:z.number().int().positive().meta(Fe),period:Px.meta(Fe)}).meta({id:"PlacementCapRule","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi});z.object({surface_type:z.string().min(1).meta(Fe),rules:z.array(tj).meta(Fe),cooldown_ms:z.number().int().nonnegative().optional().meta(Fe)}).meta({id:"SurfaceTypeCapRule","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Pi,...Li.Operational,...X1});var nj=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":Ws,"x-revturbine-schema-exposure":Pi}),tl=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Fe,readOnly:true}),name:Is.meta(Fe),handle:lr.meta(Fe),description:Wd.meta(Fe),category:Ix.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:va.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:ej.optional().meta(Fe),activation_window_start:z.string().datetime().optional().meta(Fe),activation_window_end:z.string().datetime().optional().meta(Fe),metadata:ci.meta(Fe)}).meta({id:"Placement","x-revturbine-schema-persistence":au,"x-revturbine-schema-exposure":Pi,...Sx,...rs()}),rj=qr("PlacementAnchor"),ij=z.enum(["threshold_not_emitted"]).meta({id:"PlacementWarningCode","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi}),sj=z.object({code:ij.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":Ws,"x-revturbine-schema-exposure":Pi}),xx=tl.extend({warnings:z.array(sj).optional().meta(Fe)}).meta({id:"PlacementWriteResponse","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi}),aj=z.object({label:z.string().min(1).max(200).meta(Fe),cta_path_type:nj.meta(Fe),config_fields:z.record(z.string(),z.unknown()).default({}).meta(Fe)}).meta({id:"CtaObject","x-revturbine-schema-persistence":Ws,"x-revturbine-schema-exposure":Pi}),Tc=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({anchor_id:z.string().min(1).meta({...Fe,readOnly:true}),handle:lr.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(aj).default([]).meta(Fe),max_per_period:z.number().int().min(0).nullable().default(null).meta(Fe),max_period_unit:Px.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":au,"x-revturbine-schema-exposure":Pi,...Sx,...is()}),oj=qr("PlacementPayloadAnchor"),lj=Cn.merge(Un).merge(Bn).merge(tr).merge(cr).extend({surface_slot_handle:z.string().min(1).max(200).meta(Fe),surface_type:xf.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":au,"x-revturbine-schema-exposure":Pi,...Q1,...rs("surface_slot_handle")}),cj=si(tl),dj=si(Tc);({"/api/placement-anchors":{get:E({operationId:"listPlacementAnchors",requestParams:{query:Qt},summary:"List placement anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement anchor list",content:{"application/json":{schema:Xt(rj)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-anchors",persistence:{table:"placements",mode:"list"}}})},"/api/placements":{get:E({operationId:"listPlacements",requestParams:{query:Qt},summary:"List placements",tags:["placements"],responses:{200:{description:"Placement list",content:{"application/json":{schema:Xt(tl)}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"list"}}}),post:E({operationId:"createPlacement",summary:"Create placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(tl)}}},responses:{201:{description:"Created",content:{"application/json":{schema:xx}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"create"}}})},"/api/placements/{placementId}":{get:E({operationId:"getPlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Get placement",tags:["placements"],responses:{200:{description:"Placement detail",content:{"application/json":{schema:tl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"get"}}}),patch:E({operationId:"updatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Update placement",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:cj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:xx}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"update"}}}),delete:E({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:Xn}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"delete"}}})},"/api/placements/{placementId}/duplicate":{post:E({operationId:"duplicatePlacement",requestParams:{path:z.object({placementId:z.string()})},summary:"Duplicate placement",tags:["placements"],responses:{201:{description:"Duplicated",content:{"application/json":{schema:tl}}}},"x-revturbine-operation":{exposure:"external",resource:"placements",persistence:{table:"placementVersions",mode:"duplicate"}}})},"/api/placements/reorder":{post:E({operationId:"reorderPlacements",summary:"Reorder placements within category",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:z.object({category:Ix,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:E({operationId:"listPlacementPayloadAnchors",requestParams:{query:Qt},summary:"List placement payload anchors (identity registry)",tags:["placements"],responses:{200:{description:"Placement payload anchor list",content:{"application/json":{schema:Xt(oj)}}},default:{description:"Error response",content:{"application/json":{schema:Xn}}}},"x-revturbine-operation":{exposure:"internal",resource:"placement-payload-anchors",persistence:{table:"placementPayloads",mode:"list"}}})},"/api/placements/{placementId}/payloads":{get:E({operationId:"listPlacementPayloads",requestParams:{path:z.object({placementId:z.string()}),query:Qt},summary:"List placement payloads",tags:["placements"],responses:{200:{description:"Payload list",content:{"application/json":{schema:Xt(Tc)}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"list"}}}),post:E({operationId:"createPlacementPayload",requestParams:{path:z.object({placementId:z.string()})},summary:"Create placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:Br(Tc)}}},responses:{201:{description:"Created",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"create"}}})},"/api/placement-payloads/{payloadId}":{patch:E({operationId:"updatePlacementPayload",requestParams:{path:z.object({payloadId:z.string()})},summary:"Update placement payload",tags:["placements"],requestBody:{required:true,content:{"application/json":{schema:dj}}},responses:{200:{description:"Updated",content:{"application/json":{schema:Tc}}}},"x-revturbine-operation":{exposure:"external",resource:"placement-payloads",persistence:{table:"placementPayloadVersions",mode:"update"}}}),delete:E({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:E({operationId:"listSurfaceSlots",requestParams:{query:Qt},summary:"List auto-discovered surface slots",tags:["placements"],responses:{200:{description:"Surface slot list",content:{"application/json":{schema:Xt(lj)}}}},"x-revturbine-operation":{exposure:"external",resource:"surface-slots",persistence:{table:"surfaceSlots",mode:"list"}}})}});var Tx=z.enum(["trial_started","trial_ending","trial_ended","trial_converted"]);z.object({stages:z.array(Tx).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 hj=["web-client","server"],gj=z.enum(hj),_j=["method","meta","component"],bj=z.enum(_j),yj=["ts","python","java","csharp","rust"];z.enum(yj);var vj=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(),xj=z.object({canonical:z.string().min(1),aliases:z.array(z.string().min(1)),kind:bj,appliesTo:z.array(gj).min(1),composes:z.string().min(1).optional(),perLanguage:vj.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"]}),Sj=z.object({version:z.number().int().positive(),functions:z.array(xj).min(1)}).strict().superRefine((t,e)=>{let n=new Map;for(let r of t.functions)for(let i of [r.canonical,...r.aliases]){let s=n.get(i);s!==void 0&&e.addIssue({code:"custom",message:`duplicate SDK name "${i}" (also on "${s}")`,path:["functions"]}),n.set(i,r.canonical);}});Sj.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 Ij=[{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 Pj(){let t=[];for(let[e,n]of Object.entries(Kv))for(let[r,i]of Object.entries(n.fields)){let s=i.reference;if(s){if(!s.onDelete)throw new Error(`cascade-graph: bundle reference ${e}.${r} \u2192 ${s.table} has no onDelete policy`);t.push({from:e,field:r,to:s.table,by:s.by,kind:s.kind,onDelete:s.onDelete,resolution:"playbook"});}}return t}function Tj(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(Tj([...Pj(),...Ij]));
|
|
2
|
+
export{bf as BrowserRuntime,kl as BrowserStorage,Ig as CONTROL_PLANE_EVENT_SOURCE,Pg as CONTROL_PLANE_SOURCE_KEY,ug as CapEnforcer,am as DEFAULT_BRANDING,Fi as DEFAULT_THEME,Tu as DecisionEngine,Tl as DomainProviderRegistry,zd as EntitlementGate,MA as FIXED_BANNER_TEMPLATE_IDS,KA as FIXED_SURFACE_TEMPLATE_IDS,GA as GATED_SURFACE_TEMPLATE_IDS,NA as GENERAL_BANNER_TEMPLATE_IDS,zA as GENERAL_MODAL_TEMPLATE_IDS,HA as GENERAL_TOAST_TEMPLATE_IDS,Ka as InMemoryStorage,dg as InteractionTracker,$A as MESSAGE_SURFACE_TEMPLATE_IDS,Hd as PlacementController,Uo as PlacementTypeRegistry,Iv as RECOGNIZED_UPDATE_KEYS,_f as RevTurbineApiError,mf as RevTurbineCustomerSdk,Zd as RevTurbineServer,Vd as RuntimeMode,bg as SERVER_TRAITS_DOMAIN,Kd as SdkSession,Cl as ServerUserContextProvider,Il as applyValueMaps,jv as bucketSubject,dm as buildControlPlaneEvent,TA as clearPersistedTheme,Fv as createAnalyticsProvider,UA as createBasicExperimentProvider,oN as createChainedPlacementRequest,rN as createCustomEndpointRuntimeConfig,aN as createEntitlementPlacementRequest,FP as createHydrationProviders,Qw as createLocalRuntimeConfig,Lv as createPostHogAnalyticsProvider,DA as createPostHogIntegration,FA as createRevTurbineApiClient,cN as createSemanticEvent,nN as createServerRuntimeConfig,sN as createSlotPlacementRequest,Sl as createStaticPlacementContentLookupProvider,Na as createStaticPlacementResolver,jP as createStaticProviders,iN as createStrictLocalRuntimeConfig,lN as createTreatmentInteraction,tN as defineUiPathResolvers,Rc as deriveLocalTrialStatusFromInstance,lu as deriveReverseTrialGrants,gc as entitlementResultDenies,ml as evaluateSegments,Ec as evaluateTrialStatus,Bf as findActiveTrialInstance,cu as findLatestStartedTrialInstance,Nw as getDefaultRegistry,kA as initRevTurbine,wr as isBrowser,za as isServer,gf as loadTheme,Bo as mergeTheme,Vf as normalizeConfigArtifactOrThrow,Mw as parsePromotion,Dw as parseUiPath,Hw as resetDefaultRegistry,om as resolveBranding,qw as resolveContent,Nd as resolveLocalPlaybook,rm as resolvePayloadForUser,Wc as resolvePayloadForUserWithProvider,ws as resolvePersistentStorage,um as resolveSessionStorage,lv as resolveTokens};//# sourceMappingURL=headless.js.map
|
|
3
3
|
//# sourceMappingURL=headless.js.map
|