@farthershore/cli 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ Expecting one of '${o.join("', '")}'`);let e=`${r}Help`;return this.on(e,i=>{let
30
30
  `:`
31
31
  `)+n,e=o+1,o=t.indexOf(`
32
32
  `,e)}while(o!==-1);return i+=t.slice(e),i}var{stdout:gd,stderr:hd}=md,uo=Symbol("GENERATOR"),et=Symbol("STYLER"),Vt=Symbol("IS_EMPTY"),vd=["ansi","ansi","ansi256","ansi16m"],tt=Object.create(null),Fh=(t,r={})=>{if(r.level&&!(Number.isInteger(r.level)&&r.level>=0&&r.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let n=gd?gd.level:0;t.level=r.level===void 0?n:r.level};var Mh=t=>{let r=(...n)=>n.join(" ");return Fh(r,t),Object.setPrototypeOf(r,Bt.prototype),r};function Bt(t){return Mh(t)}Object.setPrototypeOf(Bt.prototype,Function.prototype);for(let[t,r]of Object.entries(se))tt[t]={get(){let n=Vr(this,mo(r.open,r.close,this[et]),this[Vt]);return Object.defineProperty(this,t,{value:n}),n}};tt.visible={get(){let t=Vr(this,this[et],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var lo=(t,r,n,...o)=>t==="rgb"?r==="ansi16m"?se[n].ansi16m(...o):r==="ansi256"?se[n].ansi256(se.rgbToAnsi256(...o)):se[n].ansi(se.rgbToAnsi(...o)):t==="hex"?lo("rgb",r,n,...se.hexToRgb(...o)):se[n][t](...o),Vh=["rgb","hex","ansi256"];for(let t of Vh){tt[t]={get(){let{level:n}=this;return function(...o){let e=mo(lo(t,vd[n],"color",...o),se.color.close,this[et]);return Vr(this,e,this[Vt])}}};let r="bg"+t[0].toUpperCase()+t.slice(1);tt[r]={get(){let{level:n}=this;return function(...o){let e=mo(lo(t,vd[n],"bgColor",...o),se.bgColor.close,this[et]);return Vr(this,e,this[Vt])}}}}var Bh=Object.defineProperties(()=>{},{...tt,level:{enumerable:!0,get(){return this[uo].level},set(t){this[uo].level=t}}}),mo=(t,r,n)=>{let o,e;return n===void 0?(o=t,e=r):(o=n.openAll+t,e=r+n.closeAll),{open:t,close:r,openAll:o,closeAll:e,parent:n}},Vr=(t,r,n)=>{let o=(...e)=>Gh(o,e.length===1?""+e[0]:e.join(" "));return Object.setPrototypeOf(o,Bh),o[uo]=t,o[et]=r,o[Vt]=n,o},Gh=(t,r)=>{if(t.level<=0||!r)return t[Vt]?"":r;let n=t[et];if(n===void 0)return r;let{openAll:o,closeAll:e}=n;if(r.includes("\x1B"))for(;n!==void 0;)r=pd(r,n.close,n.open),n=n.parent;let i=r.indexOf(`
33
- `);return i!==-1&&(r=fd(r,e,o,i)),o+r+e};Object.defineProperties(Bt.prototype,tt);var Wh=Bt(),nk=Bt({level:hd?hd.level:0});var N=Wh;function ce(t){return JSON.stringify(t,null,2)}function Oe(t){console.log(N.green(`\u2713 ${t}`))}function Gt(t){console.error(N.red(`\u2717 ${t}`))}function Wt(t){console.log(N.dim(t))}function po(){return process.stdout.isTTY===!0}function Ee(t){return t==="json"||t==="table"?t:po()?"table":"json"}function Hh(t){return Ee(t.opts().format)}function z(t,r,n){if(Hh(t)==="json"){console.log(ce(n));return}Oe(r)}async function R(t,r){if(r){if(r.length===36)return r;let o=(await t.listProducts()).find(e=>e.id===r||e.name.toLowerCase()===r.toLowerCase());if(o)return o.id}throw new Error("No product selected. Pass --product <id-or-name> or run `farthershore product create` first.")}async function Br(t,r,n){let e=await t.listEnvironments(r),a=(Array.isArray(e.data)?e.data:Array.isArray(e.environments)?e.environments:[]).find(s=>s.name.toLowerCase()===n.toLowerCase()||s.id===n);if(!a)throw new Error(`Environment "${n}" not found on product ${r}.`);return a.id}async function qh(t){if(!po())throw new k("No token provided. Pass --token, set FARTHERSHORE_TOKEN, or run interactively.",void 0,{code:"AUTH_NO_TOKEN"});let r=Jh({input:process.stdin,output:process.stdout,terminal:!0});return new Promise(n=>{r.question(t,o=>{r.close(),n(o.trim())})})}function _d(t,r){let n=t.command("auth").description("Manage CLI auth credentials");n.command("login").description("Store a maker token in ~/.farthershore/credentials.json").option("--token <token>","Maker token (mk_...). Falls back to FARTHERSHORE_TOKEN env, then prompt.").action(async o=>{let e=o.token??process.env.FARTHERSHORE_TOKEN??await qh("Maker token: ");if(!e||e.length<10)throw new k("Token looks malformed.",void 0,{code:"AUTH_INVALID_TOKEN"});let i=Fr();id({...i??{},token:e}),z(t,"Token stored.",{ok:!0})}),n.command("whoami").description("Show current auth identity (org, role, scopes)").action(async()=>{let e=await r().bootstrap(),i=e.memberships.find(a=>a.organization.id===e.activeOrganization.id);z(t,`Authenticated as ${e.user.id}`,{ok:!0,userId:e.user.id,clerkUserId:e.user.clerkUserId,organizationId:e.activeOrganization.id,organizationName:e.activeOrganization.name??null,organizationSlug:e.activeOrganization.slug??null,role:i?.role??null,memberships:e.memberships.map(a=>({organizationId:a.organization.id,organizationName:a.organization.name??null,role:a.role}))})}),n.command("logout").description("Clear stored credentials").action(()=>{od(),z(t,"Logged out.",{ok:!0})})}var Gr=[{id:"requests",label:"API requests",description:"Count every call \u2014 the right default for most APIs.",meters:[{key:"requests",display:"Requests",unit:"request"}]},{id:"ai-tokens",label:"AI tokens",description:"LLM-style token metering alongside calls. The gateway can estimate tokens per request and settle actuals from @farthershore/metering reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"tokens",display:"Tokens",unit:"token"}]},{id:"credits",label:"Credits",description:"Price work in abstract credits (e.g. one image = 5 credits). Report each call's dynamic credit cost through @farthershore/metering.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"credits",display:"Credits",unit:"credit"}]},{id:"spend",label:"Metered spend",description:"Pass-through spend in cents (OpenRouter-style) reported through @farthershore/metering. Pairs with prepaid credit wallets.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"dollars",display:"Spend",unit:"cent"}]},{id:"compute",label:"Compute time",description:"Bill milliseconds of compute, settled from @farthershore/metering reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"compute_ms",display:"Compute Time",unit:"ms"}]}];function yd(t){let r=t.trim().toLowerCase();return Gr.find(n=>n.id===r)}function bd(){return Gr.map(t=>t.id)}var rt=["frontend","api","docs","widget","dashboard","webhook","worker","agent"],Kh=["frontend","api"];function $d(t){let r=t.trim().toLowerCase();if(!rt.includes(r))throw new k(`Unknown product surface "${t}". Available: ${rt.join(", ")}.`,void 0,{code:"UNKNOWN_PRODUCT_SURFACE"});return r}function Jt(t){let r=(t.surface??[]).map($d);if(r.length===0)return;if(new Set(r).size!==r.length)throw new k("Duplicate product surfaces in --surface flags.",void 0,{code:"INVALID_PRODUCT_SURFACES"});return r}function fo(t){return t&&t.length>0?t:[...Kh]}function Yh(t){return t.split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}function Xh(t){let[r="",n,o]=t.split(":");if(!/^[a-z0-9_]+$/.test(r))throw new k(`Invalid meter key in "--meter ${t}" \u2014 keys are lowercase letters, digits, and underscores (e.g. input_tokens).`,void 0,{code:"INVALID_METER_SPEC"});return{key:r,display:n?.trim()||Yh(r),unit:o?.trim()||void 0}}function Qh(t){let r=t.meter??[];if(r.length>0&&t.meters)throw new k("Pass either --meters <template> or repeated --meter entries, not both.",void 0,{code:"CONFLICTING_METER_FLAGS"});if(r.length>0){let n=r.map(Xh);if(new Set(n.map(e=>e.key)).size!==n.length)throw new k("Duplicate meter keys in --meter flags.",void 0,{code:"INVALID_METER_SPEC"});return n}if(t.meters){let n=yd(t.meters);if(!n)throw new k(`Unknown meter template "${t.meters}". Available: ${bd().join(", ")}.`,void 0,{code:"UNKNOWN_METER_TEMPLATE"});return n.meters.map(o=>({...o}))}}function ev(t){return{...t,product:t.product}}function xd(t,r){let n=t.command("product").description("Product lifecycle: list, show, create, update, delete");n.command("list").description("List products in the current org").action(async()=>{let e=await r().listProducts();z(t,`${e.length} product(s)`,{ok:!0,count:e.length,products:e.map(i=>({...i,displayName:i.displayName??null,status:i.status??null}))})}),n.command("show <productIdOrName>").description("Show a product").option("--env <env>","Environment scope (preview branch name)").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await i.getProduct(a,{env:e.env});z(t,`Product ${a}`,{ok:!0,product:s})}),n.command("create").description("Create a new product and provision the frontend starter repo").requiredOption("--name <name>","Product slug (becomes the subdomain)").option("--display-name <displayName>","Human-friendly product name").option("--description <description>").requiredOption("--origin <url>","Business logic base URL Farther Shore calls for customer-facing actions").requiredOption("--repo-owner <owner>","Connected GitHub account that will own the product repo").requiredOption("--repo-name <name>","GitHub repository name to create").option("--meters <template>",`Meter template: ${Gr.map(o=>`${o.id} (${o.label})`).join(", ")}. Default: requests.`).option("--meter <key[:display[:unit]]>","Custom meter, repeatable (e.g. --meter input_tokens:'Input Tokens':token). Overrides --meters.",(o,e)=>[...e,o],[]).option("--surface <surface>",`Initial Product SDK surface, repeatable. Available: ${rt.join(", ")}.`,(o,e)=>[...e,o],[]).action(async o=>{let e=Qh(o),i=Jt(o),s=await r().initProduct({name:o.name,origin:o.origin,repoTarget:{owner:o.repoOwner,name:o.repoName},description:o.description,displayName:o.displayName,meters:e,surfaces:i});z(t,`Product created: ${o.name}`,{ok:!0,result:ev(s)})}),n.command("update <productIdOrName>").description("Update product metadata (name, origin, description, etc.)").option("--display-name <displayName>").option("--description <description>").option("--origin <url>").option("--env <env>","Environment scope").action(async(o,e)=>{let i=r(),a=await R(i,o),s={};if(e.displayName!==void 0&&(s.displayName=e.displayName),e.description!==void 0&&(s.description=e.description),e.origin!==void 0&&(s.origin=e.origin),Object.keys(s).length===0)throw new k("No fields to update. Pass --display-name / --origin / --description.",void 0,{code:"PRODUCT_UPDATE_NO_FIELDS"});let u=await i.updateProduct(a,s,{env:e.env});z(t,`Product ${a} updated`,{ok:!0,product:u})}),n.command("publish <productIdOrName>").description("Publish a draft product (make it live). Requires at least one plan, an origin, and a verified Stripe connection.").action(async o=>{let e=r(),i=await R(e,o),a=await e.publishProduct(i);z(t,`Product ${i} published`,{ok:!0,product:a})}),n.command("delete <productIdOrName>").description("Permanently delete a product. Requires --yes.").option("--yes","Skip confirmation; required for delete").action(async(o,e)=>{if(!e.yes)throw new k("Pass --yes to confirm product deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let i=r(),a=await R(i,o);await i.deleteProduct(a),z(t,`Product ${a} deleted`,{ok:!0,deleted:a})})}function tv(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.environments)?r.environments:[]}function kd(t,r){let n=t.command("env").description("Manage product environments (preview branches, prod)");n.command("list <productIdOrName>").description("List environments for a product").action(async o=>{let e=r(),i=await R(e,o),a=tv(await e.listEnvironments(i));z(t,`${a.length} environment(s)`,{ok:!0,productId:i,count:a.length,environments:a.map(s=>({id:s.id,name:s.name,branch:s.branch??null,portalHostname:s.portalHostname??null,runtimeHostname:s.runtimeHostname??null,status:s.status??null}))})}),n.command("create <productIdOrName>").description("Create a preview environment bound to a git branch").requiredOption("--name <name>","Environment name (e.g. preview, staging)").requiredOption("--branch <branch>","Git branch to track (e.g. env/preview)").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await i.createEnvironment(a,{name:e.name,branch:e.branch});z(t,`Environment ${e.name} created`,{ok:!0,productId:a,environment:s})}),n.command("delete <productIdOrName> <envName>").description("Delete an environment by name. Requires --yes.").option("--yes","Skip confirmation; required for delete").action(async(o,e,i)=>{if(!i.yes)throw new k("Pass --yes to confirm environment deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let a=r(),s=await R(a,o);await a.deleteEnvironment(s,e),z(t,`Environment ${e} deleted`,{ok:!0,productId:s,deleted:e})})}var c={};ke(c,{$brand:()=>ho,$input:()=>Us,$output:()=>Ds,NEVER:()=>go,TimePrecision:()=>Fs,ZodAny:()=>Pu,ZodArray:()=>Nu,ZodBase64:()=>yi,ZodBase64URL:()=>bi,ZodBigInt:()=>At,ZodBigIntFormat:()=>ki,ZodBoolean:()=>jt,ZodCIDRv4:()=>vi,ZodCIDRv6:()=>_i,ZodCUID:()=>li,ZodCUID2:()=>di,ZodCatch:()=>rl,ZodCodec:()=>Ir,ZodCustom:()=>zr,ZodCustomStringFormat:()=>Pt,ZodDate:()=>$r,ZodDefault:()=>Ku,ZodDiscriminatedUnion:()=>Du,ZodE164:()=>$i,ZodEmail:()=>si,ZodEmoji:()=>ci,ZodEnum:()=>Ot,ZodError:()=>jy,ZodExactOptional:()=>Hu,ZodFile:()=>Gu,ZodFirstPartyTypeKind:()=>gl,ZodFunction:()=>ml,ZodGUID:()=>hr,ZodIPv4:()=>gi,ZodIPv6:()=>hi,ZodISODate:()=>ti,ZodISODateTime:()=>ei,ZodISODuration:()=>ni,ZodISOTime:()=>ri,ZodIntersection:()=>Uu,ZodIssueCode:()=>Ny,ZodJWT:()=>xi,ZodKSUID:()=>fi,ZodLazy:()=>ul,ZodLiteral:()=>Bu,ZodMAC:()=>ku,ZodMap:()=>Mu,ZodNaN:()=>il,ZodNanoID:()=>ui,ZodNever:()=>ju,ZodNonOptional:()=>Ei,ZodNull:()=>Ou,ZodNullable:()=>qu,ZodNumber:()=>Tt,ZodNumberFormat:()=>Ye,ZodObject:()=>kr,ZodOptional:()=>Oi,ZodPipe:()=>wr,ZodPrefault:()=>Xu,ZodPreprocess:()=>ol,ZodPromise:()=>dl,ZodReadonly:()=>al,ZodRealError:()=>Q,ZodRecord:()=>zt,ZodSet:()=>Vu,ZodString:()=>Et,ZodStringFormat:()=>j,ZodSuccess:()=>tl,ZodSymbol:()=>Iu,ZodTemplateLiteral:()=>cl,ZodTransform:()=>Wu,ZodTuple:()=>Zu,ZodType:()=>w,ZodULID:()=>mi,ZodURL:()=>br,ZodUUID:()=>ye,ZodUndefined:()=>zu,ZodUnion:()=>Sr,ZodUnknown:()=>Tu,ZodVoid:()=>Au,ZodXID:()=>pi,ZodXor:()=>Cu,_ZodString:()=>ai,_default:()=>Yu,_function:()=>mf,any:()=>Mp,array:()=>xr,base64:()=>wp,base64url:()=>Ip,bigint:()=>Up,boolean:()=>wu,catch:()=>nl,check:()=>pf,cidrv4:()=>kp,cidrv6:()=>Sp,clone:()=>W,codec:()=>cf,coerce:()=>hl,config:()=>Z,core:()=>ze,cuid:()=>gp,cuid2:()=>hp,custom:()=>ff,date:()=>Bp,decode:()=>hu,decodeAsync:()=>_u,describe:()=>gf,discriminatedUnion:()=>Kp,e164:()=>zp,email:()=>op,emoji:()=>pp,encode:()=>gu,encodeAsync:()=>vu,endsWith:()=>vt,enum:()=>Ii,exactOptional:()=>Ju,file:()=>nf,flattenError:()=>rr,float32:()=>Ap,float64:()=>Np,formatError:()=>nr,fromJSONSchema:()=>xf,function:()=>mf,getErrorMap:()=>Dy,globalRegistry:()=>V,gt:()=>ve,gte:()=>J,guid:()=>ap,hash:()=>jp,hex:()=>Tp,hostname:()=>Pp,httpUrl:()=>mp,includes:()=>gt,instanceof:()=>vf,int:()=>ii,int32:()=>Cp,int64:()=>Rp,intersection:()=>Ru,invertCodec:()=>uf,ipv4:()=>bp,ipv6:()=>xp,iso:()=>It,json:()=>yf,jwt:()=>Op,keyof:()=>Gp,ksuid:()=>yp,lazy:()=>ll,length:()=>qe,literal:()=>rf,locales:()=>dr,looseObject:()=>Jp,looseRecord:()=>Xp,lowercase:()=>pt,lt:()=>he,lte:()=>te,mac:()=>$p,map:()=>Qp,maxLength:()=>Je,maxSize:()=>De,meta:()=>hf,mime:()=>_t,minLength:()=>Ie,minSize:()=>_e,multipleOf:()=>Ce,nan:()=>sf,nanoid:()=>fp,nativeEnum:()=>tf,negative:()=>Bn,never:()=>Si,nonnegative:()=>Wn,nonoptional:()=>el,nonpositive:()=>Gn,normalize:()=>yt,null:()=>Eu,nullable:()=>_r,nullish:()=>of,number:()=>Su,object:()=>Wp,optional:()=>vr,overwrite:()=>le,parse:()=>du,parseAsync:()=>mu,partialRecord:()=>Yp,pipe:()=>oi,positive:()=>Vn,prefault:()=>Qu,preprocess:()=>bf,prettifyError:()=>Eo,promise:()=>df,property:()=>Hn,readonly:()=>sl,record:()=>Fu,refine:()=>pl,regex:()=>mt,regexes:()=>ee,registry:()=>xn,safeDecode:()=>bu,safeDecodeAsync:()=>xu,safeEncode:()=>yu,safeEncodeAsync:()=>$u,safeParse:()=>pu,safeParseAsync:()=>fu,set:()=>ef,setErrorMap:()=>Cy,size:()=>He,slugify:()=>kt,startsWith:()=>ht,strictObject:()=>Hp,string:()=>gr,stringFormat:()=>Ep,stringbool:()=>_f,success:()=>af,superRefine:()=>fl,symbol:()=>Lp,templateLiteral:()=>lf,toJSONSchema:()=>Yn,toLowerCase:()=>$t,toUpperCase:()=>xt,transform:()=>zi,treeifyError:()=>Oo,trim:()=>bt,tuple:()=>Lu,uint32:()=>Dp,uint64:()=>Zp,ulid:()=>vp,undefined:()=>Fp,union:()=>wi,unknown:()=>Ke,uppercase:()=>ft,url:()=>dp,util:()=>y,uuid:()=>sp,uuidv4:()=>cp,uuidv6:()=>up,uuidv7:()=>lp,void:()=>Vp,xid:()=>_p,xor:()=>qp});var ze={};ke(ze,{$ZodAny:()=>is,$ZodArray:()=>us,$ZodAsyncError:()=>ue,$ZodBase64:()=>Ja,$ZodBase64URL:()=>qa,$ZodBigInt:()=>fn,$ZodBigIntFormat:()=>es,$ZodBoolean:()=>sr,$ZodCIDRv4:()=>Ga,$ZodCIDRv6:()=>Wa,$ZodCUID:()=>Aa,$ZodCUID2:()=>Na,$ZodCatch:()=>zs,$ZodCheck:()=>A,$ZodCheckBigIntFormat:()=>ua,$ZodCheckEndsWith:()=>$a,$ZodCheckGreaterThan:()=>cn,$ZodCheckIncludes:()=>ya,$ZodCheckLengthEquals:()=>ga,$ZodCheckLessThan:()=>sn,$ZodCheckLowerCase:()=>va,$ZodCheckMaxLength:()=>pa,$ZodCheckMaxSize:()=>la,$ZodCheckMimeType:()=>ka,$ZodCheckMinLength:()=>fa,$ZodCheckMinSize:()=>da,$ZodCheckMultipleOf:()=>sa,$ZodCheckNumberFormat:()=>ca,$ZodCheckOverwrite:()=>Sa,$ZodCheckProperty:()=>xa,$ZodCheckRegex:()=>ha,$ZodCheckSizeEquals:()=>ma,$ZodCheckStartsWith:()=>ba,$ZodCheckStringFormat:()=>lt,$ZodCheckUpperCase:()=>_a,$ZodCodec:()=>ur,$ZodCustom:()=>Cs,$ZodCustomStringFormat:()=>Xa,$ZodDate:()=>cs,$ZodDefault:()=>ks,$ZodDiscriminatedUnion:()=>ms,$ZodE164:()=>Ka,$ZodEmail:()=>Ea,$ZodEmoji:()=>Ta,$ZodEncodeError:()=>Pe,$ZodEnum:()=>vs,$ZodError:()=>tr,$ZodExactOptional:()=>$s,$ZodFile:()=>ys,$ZodFunction:()=>js,$ZodGUID:()=>za,$ZodIPv4:()=>Ma,$ZodIPv6:()=>Va,$ZodISODate:()=>Za,$ZodISODateTime:()=>Ra,$ZodISODuration:()=>Fa,$ZodISOTime:()=>La,$ZodIntersection:()=>ps,$ZodJWT:()=>Ya,$ZodKSUID:()=>Ua,$ZodLazy:()=>Ns,$ZodLiteral:()=>_s,$ZodMAC:()=>Ba,$ZodMap:()=>gs,$ZodNaN:()=>Os,$ZodNanoID:()=>ja,$ZodNever:()=>as,$ZodNonOptional:()=>ws,$ZodNull:()=>ns,$ZodNullable:()=>xs,$ZodNumber:()=>pn,$ZodNumberFormat:()=>Qa,$ZodObject:()=>em,$ZodObjectJIT:()=>ls,$ZodOptional:()=>hn,$ZodPipe:()=>vn,$ZodPrefault:()=>Ss,$ZodPreprocess:()=>Es,$ZodPromise:()=>As,$ZodReadonly:()=>Ps,$ZodRealError:()=>X,$ZodRecord:()=>fs,$ZodRegistry:()=>$n,$ZodSet:()=>hs,$ZodString:()=>We,$ZodStringFormat:()=>T,$ZodSuccess:()=>Is,$ZodSymbol:()=>ts,$ZodTemplateLiteral:()=>Ts,$ZodTransform:()=>bs,$ZodTuple:()=>gn,$ZodType:()=>S,$ZodULID:()=>Ca,$ZodURL:()=>Pa,$ZodUUID:()=>Oa,$ZodUndefined:()=>rs,$ZodUnion:()=>cr,$ZodUnknown:()=>os,$ZodVoid:()=>ss,$ZodXID:()=>Da,$ZodXor:()=>ds,$brand:()=>ho,$constructor:()=>m,$input:()=>Us,$output:()=>Ds,Doc:()=>ar,JSONSchema:()=>rp,JSONSchemaGenerator:()=>Xn,NEVER:()=>go,TimePrecision:()=>Fs,_any:()=>cc,_array:()=>gc,_base64:()=>Zn,_base64url:()=>Ln,_bigint:()=>tc,_boolean:()=>Qs,_catch:()=>Sy,_check:()=>tp,_cidrv4:()=>Un,_cidrv6:()=>Rn,_coercedBigint:()=>rc,_coercedBoolean:()=>ec,_coercedDate:()=>pc,_coercedNumber:()=>Hs,_coercedString:()=>Zs,_cuid:()=>Pn,_cuid2:()=>Tn,_custom:()=>vc,_date:()=>mc,_decode:()=>Yr,_decodeAsync:()=>Qr,_default:()=>$y,_discriminatedUnion:()=>uy,_e164:()=>Fn,_email:()=>kn,_emoji:()=>On,_encode:()=>Kr,_encodeAsync:()=>Xr,_endsWith:()=>vt,_enum:()=>gy,_file:()=>hc,_float32:()=>qs,_float64:()=>Ks,_gt:()=>ve,_gte:()=>J,_guid:()=>mr,_includes:()=>gt,_int:()=>Js,_int32:()=>Ys,_int64:()=>nc,_intersection:()=>ly,_ipv4:()=>Cn,_ipv6:()=>Dn,_isoDate:()=>Vs,_isoDateTime:()=>Ms,_isoDuration:()=>Gs,_isoTime:()=>Bs,_jwt:()=>Mn,_ksuid:()=>Nn,_lazy:()=>Oy,_length:()=>qe,_literal:()=>vy,_lowercase:()=>pt,_lt:()=>he,_lte:()=>te,_mac:()=>Ls,_map:()=>py,_max:()=>te,_maxLength:()=>Je,_maxSize:()=>De,_mime:()=>_t,_min:()=>J,_minLength:()=>Ie,_minSize:()=>_e,_multipleOf:()=>Ce,_nan:()=>fc,_nanoid:()=>En,_nativeEnum:()=>hy,_negative:()=>Bn,_never:()=>lc,_nonnegative:()=>Wn,_nonoptional:()=>xy,_nonpositive:()=>Gn,_normalize:()=>yt,_null:()=>sc,_nullable:()=>by,_number:()=>Ws,_optional:()=>yy,_overwrite:()=>le,_parse:()=>at,_parseAsync:()=>st,_pipe:()=>wy,_positive:()=>Vn,_promise:()=>Ey,_property:()=>Hn,_readonly:()=>Iy,_record:()=>my,_refine:()=>_c,_regex:()=>mt,_safeDecode:()=>tn,_safeDecodeAsync:()=>nn,_safeEncode:()=>en,_safeEncodeAsync:()=>rn,_safeParse:()=>ct,_safeParseAsync:()=>ut,_set:()=>fy,_size:()=>He,_slugify:()=>kt,_startsWith:()=>ht,_string:()=>Rs,_stringFormat:()=>St,_stringbool:()=>xc,_success:()=>ky,_superRefine:()=>yc,_symbol:()=>oc,_templateLiteral:()=>zy,_toLowerCase:()=>$t,_toUpperCase:()=>xt,_transform:()=>_y,_trim:()=>bt,_tuple:()=>dy,_uint32:()=>Xs,_uint64:()=>ic,_ulid:()=>jn,_undefined:()=>ac,_union:()=>sy,_unknown:()=>uc,_uppercase:()=>ft,_url:()=>pr,_uuid:()=>Sn,_uuidv4:()=>wn,_uuidv6:()=>In,_uuidv7:()=>zn,_void:()=>dc,_xid:()=>An,_xor:()=>cy,clone:()=>W,config:()=>Z,createStandardJSONSchemaMethod:()=>wt,createToJSONSchemaMethod:()=>kc,decode:()=>Ev,decodeAsync:()=>Tv,describe:()=>bc,encode:()=>Ov,encodeAsync:()=>Pv,extractDefs:()=>Re,finalize:()=>Ze,flattenError:()=>rr,formatError:()=>nr,globalConfig:()=>Ve,globalRegistry:()=>V,initializeContext:()=>Ue,isValidBase64:()=>Ha,isValidBase64URL:()=>Kd,isValidJWT:()=>Yd,locales:()=>dr,meta:()=>$c,parse:()=>Jr,parseAsync:()=>qr,prettifyError:()=>Eo,process:()=>P,regexes:()=>ee,registry:()=>xn,safeDecode:()=>Av,safeDecodeAsync:()=>Cv,safeEncode:()=>jv,safeEncodeAsync:()=>Nv,safeParse:()=>Po,safeParseAsync:()=>To,toDotPath:()=>Ed,toJSONSchema:()=>Yn,treeifyError:()=>Oo,util:()=>y,version:()=>wa});var Sd,go=Object.freeze({status:"aborted"});function m(t,r,n){function o(s,u){if(s._zod||Object.defineProperty(s,"_zod",{value:{def:u,constr:a,traits:new Set},enumerable:!1}),s._zod.traits.has(t))return;s._zod.traits.add(t),r(s,u);let l=a.prototype,d=Object.keys(l);for(let p=0;p<d.length;p++){let g=d[p];g in s||(s[g]=l[g].bind(s))}}let e=n?.Parent??Object;class i extends e{}Object.defineProperty(i,"name",{value:t});function a(s){var u;let l=n?.Parent?new i:this;o(l,s),(u=l._zod).deferred??(u.deferred=[]);for(let d of l._zod.deferred)d();return l}return Object.defineProperty(a,"init",{value:o}),Object.defineProperty(a,Symbol.hasInstance,{value:s=>n?.Parent&&s instanceof n.Parent?!0:s?._zod?.traits?.has(t)}),Object.defineProperty(a,"name",{value:t}),a}var ho=Symbol("zod_brand"),ue=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},Pe=class extends Error{constructor(r){super(`Encountered unidirectional transform during encode: ${r}`),this.name="ZodEncodeError"}};(Sd=globalThis).__zod_globalConfig??(Sd.__zod_globalConfig={});var Ve=globalThis.__zod_globalConfig;function Z(t){return t&&Object.assign(Ve,t),Ve}var y={};ke(y,{BIGINT_FORMAT_RANGES:()=>Io,Class:()=>_o,NUMBER_FORMAT_RANGES:()=>wo,aborted:()=>Ne,allowsEval:()=>$o,assert:()=>av,assertEqual:()=>rv,assertIs:()=>iv,assertNever:()=>ov,assertNotEqual:()=>nv,assignProp:()=>je,base64ToUint8Array:()=>Id,base64urlToUint8Array:()=>kv,cached:()=>it,captureStackTrace:()=>Hr,cleanEnum:()=>xv,cleanRegex:()=>Yt,clone:()=>W,cloneDef:()=>cv,createTransparentProxy:()=>fv,defineLazy:()=>I,esc:()=>Wr,escapeRegex:()=>ae,explicitlyAborted:()=>zo,extend:()=>vv,finalizeIssue:()=>H,floatSafeRemainder:()=>yo,getElementAtPath:()=>uv,getEnumValues:()=>Kt,getLengthableOrigin:()=>er,getParsedType:()=>pv,getSizableOrigin:()=>Qt,hexToUint8Array:()=>wv,isObject:()=>Be,isPlainObject:()=>Ae,issue:()=>ot,joinValues:()=>f,jsonStringifyReplacer:()=>nt,merge:()=>yv,mergeDefs:()=>we,normalizeParams:()=>b,nullish:()=>Te,numKeys:()=>mv,objectClone:()=>sv,omit:()=>hv,optionalKeys:()=>So,parsedType:()=>_,partial:()=>bv,pick:()=>gv,prefixIssues:()=>Y,primitiveTypes:()=>ko,promiseAllObject:()=>lv,propertyKeyTypes:()=>Xt,randomString:()=>dv,required:()=>$v,safeExtend:()=>_v,shallowClone:()=>xo,slugify:()=>bo,stringifyPrimitive:()=>v,uint8ArrayToBase64:()=>zd,uint8ArrayToBase64url:()=>Sv,uint8ArrayToHex:()=>Iv,unwrapMessage:()=>qt});function rv(t){return t}function nv(t){return t}function iv(t){}function ov(t){throw new Error("Unexpected value in exhaustive check")}function av(t){}function Kt(t){let r=Object.values(t).filter(o=>typeof o=="number");return Object.entries(t).filter(([o,e])=>r.indexOf(+o)===-1).map(([o,e])=>e)}function f(t,r="|"){return t.map(n=>v(n)).join(r)}function nt(t,r){return typeof r=="bigint"?r.toString():r}function it(t){return{get value(){{let n=t();return Object.defineProperty(this,"value",{value:n}),n}throw new Error("cached value already set")}}}function Te(t){return t==null}function Yt(t){let r=t.startsWith("^")?1:0,n=t.endsWith("$")?t.length-1:t.length;return t.slice(r,n)}function yo(t,r){let n=t/r,o=Math.round(n),e=Number.EPSILON*Math.max(Math.abs(n),1);return Math.abs(n-o)<e?0:n-o}var wd=Symbol("evaluating");function I(t,r,n){let o;Object.defineProperty(t,r,{get(){if(o!==wd)return o===void 0&&(o=wd,o=n()),o},set(e){Object.defineProperty(t,r,{value:e})},configurable:!0})}function sv(t){return Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t))}function je(t,r,n){Object.defineProperty(t,r,{value:n,writable:!0,enumerable:!0,configurable:!0})}function we(...t){let r={};for(let n of t){let o=Object.getOwnPropertyDescriptors(n);Object.assign(r,o)}return Object.defineProperties({},r)}function cv(t){return we(t._zod.def)}function uv(t,r){return r?r.reduce((n,o)=>n?.[o],t):t}function lv(t){let r=Object.keys(t),n=r.map(o=>t[o]);return Promise.all(n).then(o=>{let e={};for(let i=0;i<r.length;i++)e[r[i]]=o[i];return e})}function dv(t=10){let r="abcdefghijklmnopqrstuvwxyz",n="";for(let o=0;o<t;o++)n+=r[Math.floor(Math.random()*r.length)];return n}function Wr(t){return JSON.stringify(t)}function bo(t){return t.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}var Hr="captureStackTrace"in Error?Error.captureStackTrace:(...t)=>{};function Be(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var $o=it(()=>{if(Ve.jitless||typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let t=Function;return new t(""),!0}catch{return!1}});function Ae(t){if(Be(t)===!1)return!1;let r=t.constructor;if(r===void 0||typeof r!="function")return!0;let n=r.prototype;return!(Be(n)===!1||Object.prototype.hasOwnProperty.call(n,"isPrototypeOf")===!1)}function xo(t){return Ae(t)?{...t}:Array.isArray(t)?[...t]:t instanceof Map?new Map(t):t instanceof Set?new Set(t):t}function mv(t){let r=0;for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&r++;return r}var pv=t=>{let r=typeof t;switch(r){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(t)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(t)?"array":t===null?"null":t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?"promise":typeof Map<"u"&&t instanceof Map?"map":typeof Set<"u"&&t instanceof Set?"set":typeof Date<"u"&&t instanceof Date?"date":typeof File<"u"&&t instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${r}`)}},Xt=new Set(["string","number","symbol"]),ko=new Set(["string","number","bigint","boolean","symbol","undefined"]);function ae(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function W(t,r,n){let o=new t._zod.constr(r??t._zod.def);return(!r||n?.parent)&&(o._zod.parent=t),o}function b(t){let r=t;if(!r)return{};if(typeof r=="string")return{error:()=>r};if(r?.message!==void 0){if(r?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");r.error=r.message}return delete r.message,typeof r.error=="string"?{...r,error:()=>r.error}:r}function fv(t){let r;return new Proxy({},{get(n,o,e){return r??(r=t()),Reflect.get(r,o,e)},set(n,o,e,i){return r??(r=t()),Reflect.set(r,o,e,i)},has(n,o){return r??(r=t()),Reflect.has(r,o)},deleteProperty(n,o){return r??(r=t()),Reflect.deleteProperty(r,o)},ownKeys(n){return r??(r=t()),Reflect.ownKeys(r)},getOwnPropertyDescriptor(n,o){return r??(r=t()),Reflect.getOwnPropertyDescriptor(r,o)},defineProperty(n,o,e){return r??(r=t()),Reflect.defineProperty(r,o,e)}})}function v(t){return typeof t=="bigint"?t.toString()+"n":typeof t=="string"?`"${t}"`:`${t}`}function So(t){return Object.keys(t).filter(r=>t[r]._zod.optin==="optional"&&t[r]._zod.optout==="optional")}var wo={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},Io={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function gv(t,r){let n=t._zod.def,o=n.checks;if(o&&o.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");let i=we(t._zod.def,{get shape(){let a={};for(let s in r){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);r[s]&&(a[s]=n.shape[s])}return je(this,"shape",a),a},checks:[]});return W(t,i)}function hv(t,r){let n=t._zod.def,o=n.checks;if(o&&o.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");let i=we(t._zod.def,{get shape(){let a={...t._zod.def.shape};for(let s in r){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);r[s]&&delete a[s]}return je(this,"shape",a),a},checks:[]});return W(t,i)}function vv(t,r){if(!Ae(r))throw new Error("Invalid input to extend: expected a plain object");let n=t._zod.def.checks;if(n&&n.length>0){let i=t._zod.def.shape;for(let a in r)if(Object.getOwnPropertyDescriptor(i,a)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let e=we(t._zod.def,{get shape(){let i={...t._zod.def.shape,...r};return je(this,"shape",i),i}});return W(t,e)}function _v(t,r){if(!Ae(r))throw new Error("Invalid input to safeExtend: expected a plain object");let n=we(t._zod.def,{get shape(){let o={...t._zod.def.shape,...r};return je(this,"shape",o),o}});return W(t,n)}function yv(t,r){if(t._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let n=we(t._zod.def,{get shape(){let o={...t._zod.def.shape,...r._zod.def.shape};return je(this,"shape",o),o},get catchall(){return r._zod.def.catchall},checks:r._zod.def.checks??[]});return W(t,n)}function bv(t,r,n){let e=r._zod.def.checks;if(e&&e.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");let a=we(r._zod.def,{get shape(){let s=r._zod.def.shape,u={...s};if(n)for(let l in n){if(!(l in s))throw new Error(`Unrecognized key: "${l}"`);n[l]&&(u[l]=t?new t({type:"optional",innerType:s[l]}):s[l])}else for(let l in s)u[l]=t?new t({type:"optional",innerType:s[l]}):s[l];return je(this,"shape",u),u},checks:[]});return W(r,a)}function $v(t,r,n){let o=we(r._zod.def,{get shape(){let e=r._zod.def.shape,i={...e};if(n)for(let a in n){if(!(a in i))throw new Error(`Unrecognized key: "${a}"`);n[a]&&(i[a]=new t({type:"nonoptional",innerType:e[a]}))}else for(let a in e)i[a]=new t({type:"nonoptional",innerType:e[a]});return je(this,"shape",i),i}});return W(r,o)}function Ne(t,r=0){if(t.aborted===!0)return!0;for(let n=r;n<t.issues.length;n++)if(t.issues[n]?.continue!==!0)return!0;return!1}function zo(t,r=0){if(t.aborted===!0)return!0;for(let n=r;n<t.issues.length;n++)if(t.issues[n]?.continue===!1)return!0;return!1}function Y(t,r){return r.map(n=>{var o;return(o=n).path??(o.path=[]),n.path.unshift(t),n})}function qt(t){return typeof t=="string"?t:t?.message}function H(t,r,n){let o=t.message?t.message:qt(t.inst?._zod.def?.error?.(t))??qt(r?.error?.(t))??qt(n.customError?.(t))??qt(n.localeError?.(t))??"Invalid input",{inst:e,continue:i,input:a,...s}=t;return s.path??(s.path=[]),s.message=o,r?.reportInput&&(s.input=a),s}function Qt(t){return t instanceof Set?"set":t instanceof Map?"map":t instanceof File?"file":"unknown"}function er(t){return Array.isArray(t)?"array":typeof t=="string"?"string":"unknown"}function _(t){let r=typeof t;switch(r){case"number":return Number.isNaN(t)?"nan":"number";case"object":{if(t===null)return"null";if(Array.isArray(t))return"array";let n=t;if(n&&Object.getPrototypeOf(n)!==Object.prototype&&"constructor"in n&&n.constructor)return n.constructor.name}}return r}function ot(...t){let[r,n,o]=t;return typeof r=="string"?{message:r,code:"custom",input:n,inst:o}:{...r}}function xv(t){return Object.entries(t).filter(([r,n])=>Number.isNaN(Number.parseInt(r,10))).map(r=>r[1])}function Id(t){let r=atob(t),n=new Uint8Array(r.length);for(let o=0;o<r.length;o++)n[o]=r.charCodeAt(o);return n}function zd(t){let r="";for(let n=0;n<t.length;n++)r+=String.fromCharCode(t[n]);return btoa(r)}function kv(t){let r=t.replace(/-/g,"+").replace(/_/g,"/"),n="=".repeat((4-r.length%4)%4);return Id(r+n)}function Sv(t){return zd(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function wv(t){let r=t.replace(/^0x/,"");if(r.length%2!==0)throw new Error("Invalid hex string length");let n=new Uint8Array(r.length/2);for(let o=0;o<r.length;o+=2)n[o/2]=Number.parseInt(r.slice(o,o+2),16);return n}function Iv(t){return Array.from(t).map(r=>r.toString(16).padStart(2,"0")).join("")}var _o=class{constructor(...r){}};var Od=(t,r)=>{t.name="$ZodError",Object.defineProperty(t,"_zod",{value:t._zod,enumerable:!1}),Object.defineProperty(t,"issues",{value:r,enumerable:!1}),t.message=JSON.stringify(r,nt,2),Object.defineProperty(t,"toString",{value:()=>t.message,enumerable:!1})},tr=m("$ZodError",Od),X=m("$ZodError",Od,{Parent:Error});function rr(t,r=n=>n.message){let n={},o=[];for(let e of t.issues)e.path.length>0?(n[e.path[0]]=n[e.path[0]]||[],n[e.path[0]].push(r(e))):o.push(r(e));return{formErrors:o,fieldErrors:n}}function nr(t,r=n=>n.message){let n={_errors:[]},o=(e,i=[])=>{for(let a of e.issues)if(a.code==="invalid_union"&&a.errors.length)a.errors.map(s=>o({issues:s},[...i,...a.path]));else if(a.code==="invalid_key")o({issues:a.issues},[...i,...a.path]);else if(a.code==="invalid_element")o({issues:a.issues},[...i,...a.path]);else{let s=[...i,...a.path];if(s.length===0)n._errors.push(r(a));else{let u=n,l=0;for(;l<s.length;){let d=s[l];l===s.length-1?(u[d]=u[d]||{_errors:[]},u[d]._errors.push(r(a))):u[d]=u[d]||{_errors:[]},u=u[d],l++}}}};return o(t),n}function Oo(t,r=n=>n.message){let n={errors:[]},o=(e,i=[])=>{var a,s;for(let u of e.issues)if(u.code==="invalid_union"&&u.errors.length)u.errors.map(l=>o({issues:l},[...i,...u.path]));else if(u.code==="invalid_key")o({issues:u.issues},[...i,...u.path]);else if(u.code==="invalid_element")o({issues:u.issues},[...i,...u.path]);else{let l=[...i,...u.path];if(l.length===0){n.errors.push(r(u));continue}let d=n,p=0;for(;p<l.length;){let g=l[p],h=p===l.length-1;typeof g=="string"?(d.properties??(d.properties={}),(a=d.properties)[g]??(a[g]={errors:[]}),d=d.properties[g]):(d.items??(d.items=[]),(s=d.items)[g]??(s[g]={errors:[]}),d=d.items[g]),h&&d.errors.push(r(u)),p++}}};return o(t),n}function Ed(t){let r=[],n=t.map(o=>typeof o=="object"?o.key:o);for(let o of n)typeof o=="number"?r.push(`[${o}]`):typeof o=="symbol"?r.push(`[${JSON.stringify(String(o))}]`):/[^\w$]/.test(o)?r.push(`[${JSON.stringify(o)}]`):(r.length&&r.push("."),r.push(o));return r.join("")}function Eo(t){let r=[],n=[...t.issues].sort((o,e)=>(o.path??[]).length-(e.path??[]).length);for(let o of n)r.push(`\u2716 ${o.message}`),o.path?.length&&r.push(` \u2192 at ${Ed(o.path)}`);return r.join(`
33
+ `);return i!==-1&&(r=fd(r,e,o,i)),o+r+e};Object.defineProperties(Bt.prototype,tt);var Wh=Bt(),nk=Bt({level:hd?hd.level:0});var N=Wh;function ce(t){return JSON.stringify(t,null,2)}function Oe(t){console.log(N.green(`\u2713 ${t}`))}function Gt(t){console.error(N.red(`\u2717 ${t}`))}function Wt(t){console.log(N.dim(t))}function po(){return process.stdout.isTTY===!0}function Ee(t){return t==="json"||t==="table"?t:po()?"table":"json"}function Hh(t){return Ee(t.opts().format)}function z(t,r,n){if(Hh(t)==="json"){console.log(ce(n));return}Oe(r)}async function R(t,r){if(r){if(r.length===36)return r;let o=(await t.listProducts()).find(e=>e.id===r||e.name.toLowerCase()===r.toLowerCase());if(o)return o.id}throw new Error("No product selected. Pass --product <id-or-name> or run `farthershore product create` first.")}async function Br(t,r,n){let e=await t.listEnvironments(r),a=(Array.isArray(e.data)?e.data:Array.isArray(e.environments)?e.environments:[]).find(s=>s.name.toLowerCase()===n.toLowerCase()||s.id===n);if(!a)throw new Error(`Environment "${n}" not found on product ${r}.`);return a.id}async function qh(t){if(!po())throw new k("No token provided. Pass --token, set FARTHERSHORE_TOKEN, or run interactively.",void 0,{code:"AUTH_NO_TOKEN"});let r=Jh({input:process.stdin,output:process.stdout,terminal:!0});return new Promise(n=>{r.question(t,o=>{r.close(),n(o.trim())})})}function _d(t,r){let n=t.command("auth").description("Manage CLI auth credentials");n.command("login").description("Store a maker token in ~/.farthershore/credentials.json").option("--token <token>","Maker token (mk_...). Falls back to FARTHERSHORE_TOKEN env, then prompt.").action(async o=>{let e=o.token??process.env.FARTHERSHORE_TOKEN??await qh("Maker token: ");if(!e||e.length<10)throw new k("Token looks malformed.",void 0,{code:"AUTH_INVALID_TOKEN"});let i=Fr();id({...i??{},token:e}),z(t,"Token stored.",{ok:!0})}),n.command("whoami").description("Show current auth identity (org, role, scopes)").action(async()=>{let e=await r().bootstrap(),i=e.memberships.find(a=>a.organization.id===e.activeOrganization.id);z(t,`Authenticated as ${e.user.id}`,{ok:!0,userId:e.user.id,clerkUserId:e.user.clerkUserId,organizationId:e.activeOrganization.id,organizationName:e.activeOrganization.name??null,organizationSlug:e.activeOrganization.slug??null,role:i?.role??null,memberships:e.memberships.map(a=>({organizationId:a.organization.id,organizationName:a.organization.name??null,role:a.role}))})}),n.command("logout").description("Clear stored credentials").action(()=>{od(),z(t,"Logged out.",{ok:!0})})}var Gr=[{id:"requests",label:"API requests",description:"Count every call \u2014 the right default for most APIs.",meters:[{key:"requests",display:"Requests",unit:"request"}]},{id:"ai-tokens",label:"AI tokens",description:"LLM-style token metering alongside calls. The gateway can estimate tokens per request and settle actuals from @farthershore/metering reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"tokens",display:"Tokens",unit:"token"}]},{id:"credits",label:"Credits",description:"Price work in abstract credits (e.g. one image = 5 credits). Report each call's dynamic credit cost through @farthershore/metering.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"credits",display:"Credits",unit:"credit"}]},{id:"spend",label:"Metered spend",description:"Pass-through spend in cents (OpenRouter-style) reported through @farthershore/metering. Pairs with prepaid credit wallets.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"dollars",display:"Spend",unit:"cent"}]},{id:"compute",label:"Compute time",description:"Bill milliseconds of compute, settled from @farthershore/metering reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"compute_ms",display:"Compute Time",unit:"ms"}]}];function yd(t){let r=t.trim().toLowerCase();return Gr.find(n=>n.id===r)}function bd(){return Gr.map(t=>t.id)}var rt=["frontend","api","docs","widget","dashboard","webhook","worker","agent"],Kh=["frontend","api"];function $d(t){let r=t.trim().toLowerCase();if(!rt.includes(r))throw new k(`Unknown product surface "${t}". Available: ${rt.join(", ")}.`,void 0,{code:"UNKNOWN_PRODUCT_SURFACE"});return r}function Jt(t){let r=(t.surface??[]).map($d);if(r.length===0)return;if(new Set(r).size!==r.length)throw new k("Duplicate product surfaces in --surface flags.",void 0,{code:"INVALID_PRODUCT_SURFACES"});return r}function fo(t){return t&&t.length>0?t:[...Kh]}function Yh(t){return t.split("_").map(r=>r.charAt(0).toUpperCase()+r.slice(1)).join(" ")}function Xh(t){let[r="",n,o]=t.split(":");if(!/^[a-z0-9_]+$/.test(r))throw new k(`Invalid meter key in "--meter ${t}" \u2014 keys are lowercase letters, digits, and underscores (e.g. input_tokens).`,void 0,{code:"INVALID_METER_SPEC"});return{key:r,display:n?.trim()||Yh(r),unit:o?.trim()||void 0}}function Qh(t){let r=t.meter??[];if(r.length>0&&t.meters)throw new k("Pass either --meters <template> or repeated --meter entries, not both.",void 0,{code:"CONFLICTING_METER_FLAGS"});if(r.length>0){let n=r.map(Xh);if(new Set(n.map(e=>e.key)).size!==n.length)throw new k("Duplicate meter keys in --meter flags.",void 0,{code:"INVALID_METER_SPEC"});return n}if(t.meters){let n=yd(t.meters);if(!n)throw new k(`Unknown meter template "${t.meters}". Available: ${bd().join(", ")}.`,void 0,{code:"UNKNOWN_METER_TEMPLATE"});return n.meters.map(o=>({...o}))}}function ev(t){return{...t,product:t.product}}function xd(t,r){let n=t.command("product").description("Product lifecycle: list, show, create, update, delete");n.command("list").description("List products in the current org").action(async()=>{let e=await r().listProducts();z(t,`${e.length} product(s)`,{ok:!0,count:e.length,products:e.map(i=>({...i,displayName:i.displayName??null,status:i.status??null}))})}),n.command("show <productIdOrName>").description("Show a product").option("--env <env>","Environment scope (preview branch name)").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await i.getProduct(a,{env:e.env});z(t,`Product ${a}`,{ok:!0,product:s})}),n.command("create").description("Create a new product and provision the frontend starter repo").requiredOption("--name <name>","Product slug (becomes the subdomain)").option("--display-name <displayName>","Human-friendly product name").option("--description <description>").requiredOption("--origin <url>","Builder-owned product origin Farther Shore calls for customer-facing actions").requiredOption("--repo-owner <owner>","Connected GitHub account that will own the product repo").requiredOption("--repo-name <name>","GitHub repository name to create").option("--meters <template>",`Meter template: ${Gr.map(o=>`${o.id} (${o.label})`).join(", ")}. Default: requests.`).option("--meter <key[:display[:unit]]>","Custom meter, repeatable (e.g. --meter input_tokens:'Input Tokens':token). Overrides --meters.",(o,e)=>[...e,o],[]).option("--surface <surface>",`Initial Product SDK surface, repeatable. Available: ${rt.join(", ")}.`,(o,e)=>[...e,o],[]).action(async o=>{let e=Qh(o),i=Jt(o),s=await r().initProduct({name:o.name,origin:o.origin,repoTarget:{owner:o.repoOwner,name:o.repoName},description:o.description,displayName:o.displayName,meters:e,surfaces:i});z(t,`Product created: ${o.name}`,{ok:!0,result:ev(s)})}),n.command("update <productIdOrName>").description("Update product metadata (name, origin, description, etc.)").option("--display-name <displayName>").option("--description <description>").option("--origin <url>").option("--env <env>","Environment scope").action(async(o,e)=>{let i=r(),a=await R(i,o),s={};if(e.displayName!==void 0&&(s.displayName=e.displayName),e.description!==void 0&&(s.description=e.description),e.origin!==void 0&&(s.origin=e.origin),Object.keys(s).length===0)throw new k("No fields to update. Pass --display-name / --origin / --description.",void 0,{code:"PRODUCT_UPDATE_NO_FIELDS"});let u=await i.updateProduct(a,s,{env:e.env});z(t,`Product ${a} updated`,{ok:!0,product:u})}),n.command("publish <productIdOrName>").description("Publish a draft product (make it live). Requires at least one plan, an origin, and a verified Stripe connection.").action(async o=>{let e=r(),i=await R(e,o),a=await e.publishProduct(i);z(t,`Product ${i} published`,{ok:!0,product:a})}),n.command("delete <productIdOrName>").description("Permanently delete a product. Requires --yes.").option("--yes","Skip confirmation; required for delete").action(async(o,e)=>{if(!e.yes)throw new k("Pass --yes to confirm product deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let i=r(),a=await R(i,o);await i.deleteProduct(a),z(t,`Product ${a} deleted`,{ok:!0,deleted:a})})}function tv(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.environments)?r.environments:[]}function kd(t,r){let n=t.command("env").description("Manage product environments (preview branches, prod)");n.command("list <productIdOrName>").description("List environments for a product").action(async o=>{let e=r(),i=await R(e,o),a=tv(await e.listEnvironments(i));z(t,`${a.length} environment(s)`,{ok:!0,productId:i,count:a.length,environments:a.map(s=>({id:s.id,name:s.name,branch:s.branch??null,portalHostname:s.portalHostname??null,runtimeHostname:s.runtimeHostname??null,status:s.status??null}))})}),n.command("create <productIdOrName>").description("Create a preview environment bound to a git branch").requiredOption("--name <name>","Environment name (e.g. preview, staging)").requiredOption("--branch <branch>","Git branch to track (e.g. env/preview)").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await i.createEnvironment(a,{name:e.name,branch:e.branch});z(t,`Environment ${e.name} created`,{ok:!0,productId:a,environment:s})}),n.command("delete <productIdOrName> <envName>").description("Delete an environment by name. Requires --yes.").option("--yes","Skip confirmation; required for delete").action(async(o,e,i)=>{if(!i.yes)throw new k("Pass --yes to confirm environment deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let a=r(),s=await R(a,o);await a.deleteEnvironment(s,e),z(t,`Environment ${e} deleted`,{ok:!0,productId:s,deleted:e})})}var c={};ke(c,{$brand:()=>ho,$input:()=>Us,$output:()=>Ds,NEVER:()=>go,TimePrecision:()=>Fs,ZodAny:()=>Pu,ZodArray:()=>Nu,ZodBase64:()=>yi,ZodBase64URL:()=>bi,ZodBigInt:()=>At,ZodBigIntFormat:()=>ki,ZodBoolean:()=>jt,ZodCIDRv4:()=>vi,ZodCIDRv6:()=>_i,ZodCUID:()=>li,ZodCUID2:()=>di,ZodCatch:()=>rl,ZodCodec:()=>Ir,ZodCustom:()=>zr,ZodCustomStringFormat:()=>Pt,ZodDate:()=>$r,ZodDefault:()=>Ku,ZodDiscriminatedUnion:()=>Du,ZodE164:()=>$i,ZodEmail:()=>si,ZodEmoji:()=>ci,ZodEnum:()=>Ot,ZodError:()=>jy,ZodExactOptional:()=>Hu,ZodFile:()=>Gu,ZodFirstPartyTypeKind:()=>gl,ZodFunction:()=>ml,ZodGUID:()=>hr,ZodIPv4:()=>gi,ZodIPv6:()=>hi,ZodISODate:()=>ti,ZodISODateTime:()=>ei,ZodISODuration:()=>ni,ZodISOTime:()=>ri,ZodIntersection:()=>Uu,ZodIssueCode:()=>Ny,ZodJWT:()=>xi,ZodKSUID:()=>fi,ZodLazy:()=>ul,ZodLiteral:()=>Bu,ZodMAC:()=>ku,ZodMap:()=>Mu,ZodNaN:()=>il,ZodNanoID:()=>ui,ZodNever:()=>ju,ZodNonOptional:()=>Ei,ZodNull:()=>Ou,ZodNullable:()=>qu,ZodNumber:()=>Tt,ZodNumberFormat:()=>Ye,ZodObject:()=>kr,ZodOptional:()=>Oi,ZodPipe:()=>wr,ZodPrefault:()=>Xu,ZodPreprocess:()=>ol,ZodPromise:()=>dl,ZodReadonly:()=>al,ZodRealError:()=>Q,ZodRecord:()=>zt,ZodSet:()=>Vu,ZodString:()=>Et,ZodStringFormat:()=>j,ZodSuccess:()=>tl,ZodSymbol:()=>Iu,ZodTemplateLiteral:()=>cl,ZodTransform:()=>Wu,ZodTuple:()=>Zu,ZodType:()=>w,ZodULID:()=>mi,ZodURL:()=>br,ZodUUID:()=>ye,ZodUndefined:()=>zu,ZodUnion:()=>Sr,ZodUnknown:()=>Tu,ZodVoid:()=>Au,ZodXID:()=>pi,ZodXor:()=>Cu,_ZodString:()=>ai,_default:()=>Yu,_function:()=>mf,any:()=>Mp,array:()=>xr,base64:()=>wp,base64url:()=>Ip,bigint:()=>Up,boolean:()=>wu,catch:()=>nl,check:()=>pf,cidrv4:()=>kp,cidrv6:()=>Sp,clone:()=>W,codec:()=>cf,coerce:()=>hl,config:()=>Z,core:()=>ze,cuid:()=>gp,cuid2:()=>hp,custom:()=>ff,date:()=>Bp,decode:()=>hu,decodeAsync:()=>_u,describe:()=>gf,discriminatedUnion:()=>Kp,e164:()=>zp,email:()=>op,emoji:()=>pp,encode:()=>gu,encodeAsync:()=>vu,endsWith:()=>vt,enum:()=>Ii,exactOptional:()=>Ju,file:()=>nf,flattenError:()=>rr,float32:()=>Ap,float64:()=>Np,formatError:()=>nr,fromJSONSchema:()=>xf,function:()=>mf,getErrorMap:()=>Dy,globalRegistry:()=>V,gt:()=>ve,gte:()=>J,guid:()=>ap,hash:()=>jp,hex:()=>Tp,hostname:()=>Pp,httpUrl:()=>mp,includes:()=>gt,instanceof:()=>vf,int:()=>ii,int32:()=>Cp,int64:()=>Rp,intersection:()=>Ru,invertCodec:()=>uf,ipv4:()=>bp,ipv6:()=>xp,iso:()=>It,json:()=>yf,jwt:()=>Op,keyof:()=>Gp,ksuid:()=>yp,lazy:()=>ll,length:()=>qe,literal:()=>rf,locales:()=>dr,looseObject:()=>Jp,looseRecord:()=>Xp,lowercase:()=>pt,lt:()=>he,lte:()=>te,mac:()=>$p,map:()=>Qp,maxLength:()=>Je,maxSize:()=>De,meta:()=>hf,mime:()=>_t,minLength:()=>Ie,minSize:()=>_e,multipleOf:()=>Ce,nan:()=>sf,nanoid:()=>fp,nativeEnum:()=>tf,negative:()=>Bn,never:()=>Si,nonnegative:()=>Wn,nonoptional:()=>el,nonpositive:()=>Gn,normalize:()=>yt,null:()=>Eu,nullable:()=>_r,nullish:()=>of,number:()=>Su,object:()=>Wp,optional:()=>vr,overwrite:()=>le,parse:()=>du,parseAsync:()=>mu,partialRecord:()=>Yp,pipe:()=>oi,positive:()=>Vn,prefault:()=>Qu,preprocess:()=>bf,prettifyError:()=>Eo,promise:()=>df,property:()=>Hn,readonly:()=>sl,record:()=>Fu,refine:()=>pl,regex:()=>mt,regexes:()=>ee,registry:()=>xn,safeDecode:()=>bu,safeDecodeAsync:()=>xu,safeEncode:()=>yu,safeEncodeAsync:()=>$u,safeParse:()=>pu,safeParseAsync:()=>fu,set:()=>ef,setErrorMap:()=>Cy,size:()=>He,slugify:()=>kt,startsWith:()=>ht,strictObject:()=>Hp,string:()=>gr,stringFormat:()=>Ep,stringbool:()=>_f,success:()=>af,superRefine:()=>fl,symbol:()=>Lp,templateLiteral:()=>lf,toJSONSchema:()=>Yn,toLowerCase:()=>$t,toUpperCase:()=>xt,transform:()=>zi,treeifyError:()=>Oo,trim:()=>bt,tuple:()=>Lu,uint32:()=>Dp,uint64:()=>Zp,ulid:()=>vp,undefined:()=>Fp,union:()=>wi,unknown:()=>Ke,uppercase:()=>ft,url:()=>dp,util:()=>y,uuid:()=>sp,uuidv4:()=>cp,uuidv6:()=>up,uuidv7:()=>lp,void:()=>Vp,xid:()=>_p,xor:()=>qp});var ze={};ke(ze,{$ZodAny:()=>is,$ZodArray:()=>us,$ZodAsyncError:()=>ue,$ZodBase64:()=>Ja,$ZodBase64URL:()=>qa,$ZodBigInt:()=>fn,$ZodBigIntFormat:()=>es,$ZodBoolean:()=>sr,$ZodCIDRv4:()=>Ga,$ZodCIDRv6:()=>Wa,$ZodCUID:()=>Aa,$ZodCUID2:()=>Na,$ZodCatch:()=>zs,$ZodCheck:()=>A,$ZodCheckBigIntFormat:()=>ua,$ZodCheckEndsWith:()=>$a,$ZodCheckGreaterThan:()=>cn,$ZodCheckIncludes:()=>ya,$ZodCheckLengthEquals:()=>ga,$ZodCheckLessThan:()=>sn,$ZodCheckLowerCase:()=>va,$ZodCheckMaxLength:()=>pa,$ZodCheckMaxSize:()=>la,$ZodCheckMimeType:()=>ka,$ZodCheckMinLength:()=>fa,$ZodCheckMinSize:()=>da,$ZodCheckMultipleOf:()=>sa,$ZodCheckNumberFormat:()=>ca,$ZodCheckOverwrite:()=>Sa,$ZodCheckProperty:()=>xa,$ZodCheckRegex:()=>ha,$ZodCheckSizeEquals:()=>ma,$ZodCheckStartsWith:()=>ba,$ZodCheckStringFormat:()=>lt,$ZodCheckUpperCase:()=>_a,$ZodCodec:()=>ur,$ZodCustom:()=>Cs,$ZodCustomStringFormat:()=>Xa,$ZodDate:()=>cs,$ZodDefault:()=>ks,$ZodDiscriminatedUnion:()=>ms,$ZodE164:()=>Ka,$ZodEmail:()=>Ea,$ZodEmoji:()=>Ta,$ZodEncodeError:()=>Pe,$ZodEnum:()=>vs,$ZodError:()=>tr,$ZodExactOptional:()=>$s,$ZodFile:()=>ys,$ZodFunction:()=>js,$ZodGUID:()=>za,$ZodIPv4:()=>Ma,$ZodIPv6:()=>Va,$ZodISODate:()=>Za,$ZodISODateTime:()=>Ra,$ZodISODuration:()=>Fa,$ZodISOTime:()=>La,$ZodIntersection:()=>ps,$ZodJWT:()=>Ya,$ZodKSUID:()=>Ua,$ZodLazy:()=>Ns,$ZodLiteral:()=>_s,$ZodMAC:()=>Ba,$ZodMap:()=>gs,$ZodNaN:()=>Os,$ZodNanoID:()=>ja,$ZodNever:()=>as,$ZodNonOptional:()=>ws,$ZodNull:()=>ns,$ZodNullable:()=>xs,$ZodNumber:()=>pn,$ZodNumberFormat:()=>Qa,$ZodObject:()=>em,$ZodObjectJIT:()=>ls,$ZodOptional:()=>hn,$ZodPipe:()=>vn,$ZodPrefault:()=>Ss,$ZodPreprocess:()=>Es,$ZodPromise:()=>As,$ZodReadonly:()=>Ps,$ZodRealError:()=>X,$ZodRecord:()=>fs,$ZodRegistry:()=>$n,$ZodSet:()=>hs,$ZodString:()=>We,$ZodStringFormat:()=>T,$ZodSuccess:()=>Is,$ZodSymbol:()=>ts,$ZodTemplateLiteral:()=>Ts,$ZodTransform:()=>bs,$ZodTuple:()=>gn,$ZodType:()=>S,$ZodULID:()=>Ca,$ZodURL:()=>Pa,$ZodUUID:()=>Oa,$ZodUndefined:()=>rs,$ZodUnion:()=>cr,$ZodUnknown:()=>os,$ZodVoid:()=>ss,$ZodXID:()=>Da,$ZodXor:()=>ds,$brand:()=>ho,$constructor:()=>m,$input:()=>Us,$output:()=>Ds,Doc:()=>ar,JSONSchema:()=>rp,JSONSchemaGenerator:()=>Xn,NEVER:()=>go,TimePrecision:()=>Fs,_any:()=>cc,_array:()=>gc,_base64:()=>Zn,_base64url:()=>Ln,_bigint:()=>tc,_boolean:()=>Qs,_catch:()=>Sy,_check:()=>tp,_cidrv4:()=>Un,_cidrv6:()=>Rn,_coercedBigint:()=>rc,_coercedBoolean:()=>ec,_coercedDate:()=>pc,_coercedNumber:()=>Hs,_coercedString:()=>Zs,_cuid:()=>Pn,_cuid2:()=>Tn,_custom:()=>vc,_date:()=>mc,_decode:()=>Yr,_decodeAsync:()=>Qr,_default:()=>$y,_discriminatedUnion:()=>uy,_e164:()=>Fn,_email:()=>kn,_emoji:()=>On,_encode:()=>Kr,_encodeAsync:()=>Xr,_endsWith:()=>vt,_enum:()=>gy,_file:()=>hc,_float32:()=>qs,_float64:()=>Ks,_gt:()=>ve,_gte:()=>J,_guid:()=>mr,_includes:()=>gt,_int:()=>Js,_int32:()=>Ys,_int64:()=>nc,_intersection:()=>ly,_ipv4:()=>Cn,_ipv6:()=>Dn,_isoDate:()=>Vs,_isoDateTime:()=>Ms,_isoDuration:()=>Gs,_isoTime:()=>Bs,_jwt:()=>Mn,_ksuid:()=>Nn,_lazy:()=>Oy,_length:()=>qe,_literal:()=>vy,_lowercase:()=>pt,_lt:()=>he,_lte:()=>te,_mac:()=>Ls,_map:()=>py,_max:()=>te,_maxLength:()=>Je,_maxSize:()=>De,_mime:()=>_t,_min:()=>J,_minLength:()=>Ie,_minSize:()=>_e,_multipleOf:()=>Ce,_nan:()=>fc,_nanoid:()=>En,_nativeEnum:()=>hy,_negative:()=>Bn,_never:()=>lc,_nonnegative:()=>Wn,_nonoptional:()=>xy,_nonpositive:()=>Gn,_normalize:()=>yt,_null:()=>sc,_nullable:()=>by,_number:()=>Ws,_optional:()=>yy,_overwrite:()=>le,_parse:()=>at,_parseAsync:()=>st,_pipe:()=>wy,_positive:()=>Vn,_promise:()=>Ey,_property:()=>Hn,_readonly:()=>Iy,_record:()=>my,_refine:()=>_c,_regex:()=>mt,_safeDecode:()=>tn,_safeDecodeAsync:()=>nn,_safeEncode:()=>en,_safeEncodeAsync:()=>rn,_safeParse:()=>ct,_safeParseAsync:()=>ut,_set:()=>fy,_size:()=>He,_slugify:()=>kt,_startsWith:()=>ht,_string:()=>Rs,_stringFormat:()=>St,_stringbool:()=>xc,_success:()=>ky,_superRefine:()=>yc,_symbol:()=>oc,_templateLiteral:()=>zy,_toLowerCase:()=>$t,_toUpperCase:()=>xt,_transform:()=>_y,_trim:()=>bt,_tuple:()=>dy,_uint32:()=>Xs,_uint64:()=>ic,_ulid:()=>jn,_undefined:()=>ac,_union:()=>sy,_unknown:()=>uc,_uppercase:()=>ft,_url:()=>pr,_uuid:()=>Sn,_uuidv4:()=>wn,_uuidv6:()=>In,_uuidv7:()=>zn,_void:()=>dc,_xid:()=>An,_xor:()=>cy,clone:()=>W,config:()=>Z,createStandardJSONSchemaMethod:()=>wt,createToJSONSchemaMethod:()=>kc,decode:()=>Ev,decodeAsync:()=>Tv,describe:()=>bc,encode:()=>Ov,encodeAsync:()=>Pv,extractDefs:()=>Re,finalize:()=>Ze,flattenError:()=>rr,formatError:()=>nr,globalConfig:()=>Ve,globalRegistry:()=>V,initializeContext:()=>Ue,isValidBase64:()=>Ha,isValidBase64URL:()=>Kd,isValidJWT:()=>Yd,locales:()=>dr,meta:()=>$c,parse:()=>Jr,parseAsync:()=>qr,prettifyError:()=>Eo,process:()=>P,regexes:()=>ee,registry:()=>xn,safeDecode:()=>Av,safeDecodeAsync:()=>Cv,safeEncode:()=>jv,safeEncodeAsync:()=>Nv,safeParse:()=>Po,safeParseAsync:()=>To,toDotPath:()=>Ed,toJSONSchema:()=>Yn,treeifyError:()=>Oo,util:()=>y,version:()=>wa});var Sd,go=Object.freeze({status:"aborted"});function m(t,r,n){function o(s,u){if(s._zod||Object.defineProperty(s,"_zod",{value:{def:u,constr:a,traits:new Set},enumerable:!1}),s._zod.traits.has(t))return;s._zod.traits.add(t),r(s,u);let l=a.prototype,d=Object.keys(l);for(let p=0;p<d.length;p++){let g=d[p];g in s||(s[g]=l[g].bind(s))}}let e=n?.Parent??Object;class i extends e{}Object.defineProperty(i,"name",{value:t});function a(s){var u;let l=n?.Parent?new i:this;o(l,s),(u=l._zod).deferred??(u.deferred=[]);for(let d of l._zod.deferred)d();return l}return Object.defineProperty(a,"init",{value:o}),Object.defineProperty(a,Symbol.hasInstance,{value:s=>n?.Parent&&s instanceof n.Parent?!0:s?._zod?.traits?.has(t)}),Object.defineProperty(a,"name",{value:t}),a}var ho=Symbol("zod_brand"),ue=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},Pe=class extends Error{constructor(r){super(`Encountered unidirectional transform during encode: ${r}`),this.name="ZodEncodeError"}};(Sd=globalThis).__zod_globalConfig??(Sd.__zod_globalConfig={});var Ve=globalThis.__zod_globalConfig;function Z(t){return t&&Object.assign(Ve,t),Ve}var y={};ke(y,{BIGINT_FORMAT_RANGES:()=>Io,Class:()=>_o,NUMBER_FORMAT_RANGES:()=>wo,aborted:()=>Ne,allowsEval:()=>$o,assert:()=>av,assertEqual:()=>rv,assertIs:()=>iv,assertNever:()=>ov,assertNotEqual:()=>nv,assignProp:()=>je,base64ToUint8Array:()=>Id,base64urlToUint8Array:()=>kv,cached:()=>it,captureStackTrace:()=>Hr,cleanEnum:()=>xv,cleanRegex:()=>Yt,clone:()=>W,cloneDef:()=>cv,createTransparentProxy:()=>fv,defineLazy:()=>I,esc:()=>Wr,escapeRegex:()=>ae,explicitlyAborted:()=>zo,extend:()=>vv,finalizeIssue:()=>H,floatSafeRemainder:()=>yo,getElementAtPath:()=>uv,getEnumValues:()=>Kt,getLengthableOrigin:()=>er,getParsedType:()=>pv,getSizableOrigin:()=>Qt,hexToUint8Array:()=>wv,isObject:()=>Be,isPlainObject:()=>Ae,issue:()=>ot,joinValues:()=>f,jsonStringifyReplacer:()=>nt,merge:()=>yv,mergeDefs:()=>we,normalizeParams:()=>b,nullish:()=>Te,numKeys:()=>mv,objectClone:()=>sv,omit:()=>hv,optionalKeys:()=>So,parsedType:()=>_,partial:()=>bv,pick:()=>gv,prefixIssues:()=>Y,primitiveTypes:()=>ko,promiseAllObject:()=>lv,propertyKeyTypes:()=>Xt,randomString:()=>dv,required:()=>$v,safeExtend:()=>_v,shallowClone:()=>xo,slugify:()=>bo,stringifyPrimitive:()=>v,uint8ArrayToBase64:()=>zd,uint8ArrayToBase64url:()=>Sv,uint8ArrayToHex:()=>Iv,unwrapMessage:()=>qt});function rv(t){return t}function nv(t){return t}function iv(t){}function ov(t){throw new Error("Unexpected value in exhaustive check")}function av(t){}function Kt(t){let r=Object.values(t).filter(o=>typeof o=="number");return Object.entries(t).filter(([o,e])=>r.indexOf(+o)===-1).map(([o,e])=>e)}function f(t,r="|"){return t.map(n=>v(n)).join(r)}function nt(t,r){return typeof r=="bigint"?r.toString():r}function it(t){return{get value(){{let n=t();return Object.defineProperty(this,"value",{value:n}),n}throw new Error("cached value already set")}}}function Te(t){return t==null}function Yt(t){let r=t.startsWith("^")?1:0,n=t.endsWith("$")?t.length-1:t.length;return t.slice(r,n)}function yo(t,r){let n=t/r,o=Math.round(n),e=Number.EPSILON*Math.max(Math.abs(n),1);return Math.abs(n-o)<e?0:n-o}var wd=Symbol("evaluating");function I(t,r,n){let o;Object.defineProperty(t,r,{get(){if(o!==wd)return o===void 0&&(o=wd,o=n()),o},set(e){Object.defineProperty(t,r,{value:e})},configurable:!0})}function sv(t){return Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t))}function je(t,r,n){Object.defineProperty(t,r,{value:n,writable:!0,enumerable:!0,configurable:!0})}function we(...t){let r={};for(let n of t){let o=Object.getOwnPropertyDescriptors(n);Object.assign(r,o)}return Object.defineProperties({},r)}function cv(t){return we(t._zod.def)}function uv(t,r){return r?r.reduce((n,o)=>n?.[o],t):t}function lv(t){let r=Object.keys(t),n=r.map(o=>t[o]);return Promise.all(n).then(o=>{let e={};for(let i=0;i<r.length;i++)e[r[i]]=o[i];return e})}function dv(t=10){let r="abcdefghijklmnopqrstuvwxyz",n="";for(let o=0;o<t;o++)n+=r[Math.floor(Math.random()*r.length)];return n}function Wr(t){return JSON.stringify(t)}function bo(t){return t.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}var Hr="captureStackTrace"in Error?Error.captureStackTrace:(...t)=>{};function Be(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var $o=it(()=>{if(Ve.jitless||typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let t=Function;return new t(""),!0}catch{return!1}});function Ae(t){if(Be(t)===!1)return!1;let r=t.constructor;if(r===void 0||typeof r!="function")return!0;let n=r.prototype;return!(Be(n)===!1||Object.prototype.hasOwnProperty.call(n,"isPrototypeOf")===!1)}function xo(t){return Ae(t)?{...t}:Array.isArray(t)?[...t]:t instanceof Map?new Map(t):t instanceof Set?new Set(t):t}function mv(t){let r=0;for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&r++;return r}var pv=t=>{let r=typeof t;switch(r){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(t)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(t)?"array":t===null?"null":t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?"promise":typeof Map<"u"&&t instanceof Map?"map":typeof Set<"u"&&t instanceof Set?"set":typeof Date<"u"&&t instanceof Date?"date":typeof File<"u"&&t instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${r}`)}},Xt=new Set(["string","number","symbol"]),ko=new Set(["string","number","bigint","boolean","symbol","undefined"]);function ae(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function W(t,r,n){let o=new t._zod.constr(r??t._zod.def);return(!r||n?.parent)&&(o._zod.parent=t),o}function b(t){let r=t;if(!r)return{};if(typeof r=="string")return{error:()=>r};if(r?.message!==void 0){if(r?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");r.error=r.message}return delete r.message,typeof r.error=="string"?{...r,error:()=>r.error}:r}function fv(t){let r;return new Proxy({},{get(n,o,e){return r??(r=t()),Reflect.get(r,o,e)},set(n,o,e,i){return r??(r=t()),Reflect.set(r,o,e,i)},has(n,o){return r??(r=t()),Reflect.has(r,o)},deleteProperty(n,o){return r??(r=t()),Reflect.deleteProperty(r,o)},ownKeys(n){return r??(r=t()),Reflect.ownKeys(r)},getOwnPropertyDescriptor(n,o){return r??(r=t()),Reflect.getOwnPropertyDescriptor(r,o)},defineProperty(n,o,e){return r??(r=t()),Reflect.defineProperty(r,o,e)}})}function v(t){return typeof t=="bigint"?t.toString()+"n":typeof t=="string"?`"${t}"`:`${t}`}function So(t){return Object.keys(t).filter(r=>t[r]._zod.optin==="optional"&&t[r]._zod.optout==="optional")}var wo={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},Io={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function gv(t,r){let n=t._zod.def,o=n.checks;if(o&&o.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");let i=we(t._zod.def,{get shape(){let a={};for(let s in r){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);r[s]&&(a[s]=n.shape[s])}return je(this,"shape",a),a},checks:[]});return W(t,i)}function hv(t,r){let n=t._zod.def,o=n.checks;if(o&&o.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");let i=we(t._zod.def,{get shape(){let a={...t._zod.def.shape};for(let s in r){if(!(s in n.shape))throw new Error(`Unrecognized key: "${s}"`);r[s]&&delete a[s]}return je(this,"shape",a),a},checks:[]});return W(t,i)}function vv(t,r){if(!Ae(r))throw new Error("Invalid input to extend: expected a plain object");let n=t._zod.def.checks;if(n&&n.length>0){let i=t._zod.def.shape;for(let a in r)if(Object.getOwnPropertyDescriptor(i,a)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let e=we(t._zod.def,{get shape(){let i={...t._zod.def.shape,...r};return je(this,"shape",i),i}});return W(t,e)}function _v(t,r){if(!Ae(r))throw new Error("Invalid input to safeExtend: expected a plain object");let n=we(t._zod.def,{get shape(){let o={...t._zod.def.shape,...r};return je(this,"shape",o),o}});return W(t,n)}function yv(t,r){if(t._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let n=we(t._zod.def,{get shape(){let o={...t._zod.def.shape,...r._zod.def.shape};return je(this,"shape",o),o},get catchall(){return r._zod.def.catchall},checks:r._zod.def.checks??[]});return W(t,n)}function bv(t,r,n){let e=r._zod.def.checks;if(e&&e.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");let a=we(r._zod.def,{get shape(){let s=r._zod.def.shape,u={...s};if(n)for(let l in n){if(!(l in s))throw new Error(`Unrecognized key: "${l}"`);n[l]&&(u[l]=t?new t({type:"optional",innerType:s[l]}):s[l])}else for(let l in s)u[l]=t?new t({type:"optional",innerType:s[l]}):s[l];return je(this,"shape",u),u},checks:[]});return W(r,a)}function $v(t,r,n){let o=we(r._zod.def,{get shape(){let e=r._zod.def.shape,i={...e};if(n)for(let a in n){if(!(a in i))throw new Error(`Unrecognized key: "${a}"`);n[a]&&(i[a]=new t({type:"nonoptional",innerType:e[a]}))}else for(let a in e)i[a]=new t({type:"nonoptional",innerType:e[a]});return je(this,"shape",i),i}});return W(r,o)}function Ne(t,r=0){if(t.aborted===!0)return!0;for(let n=r;n<t.issues.length;n++)if(t.issues[n]?.continue!==!0)return!0;return!1}function zo(t,r=0){if(t.aborted===!0)return!0;for(let n=r;n<t.issues.length;n++)if(t.issues[n]?.continue===!1)return!0;return!1}function Y(t,r){return r.map(n=>{var o;return(o=n).path??(o.path=[]),n.path.unshift(t),n})}function qt(t){return typeof t=="string"?t:t?.message}function H(t,r,n){let o=t.message?t.message:qt(t.inst?._zod.def?.error?.(t))??qt(r?.error?.(t))??qt(n.customError?.(t))??qt(n.localeError?.(t))??"Invalid input",{inst:e,continue:i,input:a,...s}=t;return s.path??(s.path=[]),s.message=o,r?.reportInput&&(s.input=a),s}function Qt(t){return t instanceof Set?"set":t instanceof Map?"map":t instanceof File?"file":"unknown"}function er(t){return Array.isArray(t)?"array":typeof t=="string"?"string":"unknown"}function _(t){let r=typeof t;switch(r){case"number":return Number.isNaN(t)?"nan":"number";case"object":{if(t===null)return"null";if(Array.isArray(t))return"array";let n=t;if(n&&Object.getPrototypeOf(n)!==Object.prototype&&"constructor"in n&&n.constructor)return n.constructor.name}}return r}function ot(...t){let[r,n,o]=t;return typeof r=="string"?{message:r,code:"custom",input:n,inst:o}:{...r}}function xv(t){return Object.entries(t).filter(([r,n])=>Number.isNaN(Number.parseInt(r,10))).map(r=>r[1])}function Id(t){let r=atob(t),n=new Uint8Array(r.length);for(let o=0;o<r.length;o++)n[o]=r.charCodeAt(o);return n}function zd(t){let r="";for(let n=0;n<t.length;n++)r+=String.fromCharCode(t[n]);return btoa(r)}function kv(t){let r=t.replace(/-/g,"+").replace(/_/g,"/"),n="=".repeat((4-r.length%4)%4);return Id(r+n)}function Sv(t){return zd(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function wv(t){let r=t.replace(/^0x/,"");if(r.length%2!==0)throw new Error("Invalid hex string length");let n=new Uint8Array(r.length/2);for(let o=0;o<r.length;o+=2)n[o/2]=Number.parseInt(r.slice(o,o+2),16);return n}function Iv(t){return Array.from(t).map(r=>r.toString(16).padStart(2,"0")).join("")}var _o=class{constructor(...r){}};var Od=(t,r)=>{t.name="$ZodError",Object.defineProperty(t,"_zod",{value:t._zod,enumerable:!1}),Object.defineProperty(t,"issues",{value:r,enumerable:!1}),t.message=JSON.stringify(r,nt,2),Object.defineProperty(t,"toString",{value:()=>t.message,enumerable:!1})},tr=m("$ZodError",Od),X=m("$ZodError",Od,{Parent:Error});function rr(t,r=n=>n.message){let n={},o=[];for(let e of t.issues)e.path.length>0?(n[e.path[0]]=n[e.path[0]]||[],n[e.path[0]].push(r(e))):o.push(r(e));return{formErrors:o,fieldErrors:n}}function nr(t,r=n=>n.message){let n={_errors:[]},o=(e,i=[])=>{for(let a of e.issues)if(a.code==="invalid_union"&&a.errors.length)a.errors.map(s=>o({issues:s},[...i,...a.path]));else if(a.code==="invalid_key")o({issues:a.issues},[...i,...a.path]);else if(a.code==="invalid_element")o({issues:a.issues},[...i,...a.path]);else{let s=[...i,...a.path];if(s.length===0)n._errors.push(r(a));else{let u=n,l=0;for(;l<s.length;){let d=s[l];l===s.length-1?(u[d]=u[d]||{_errors:[]},u[d]._errors.push(r(a))):u[d]=u[d]||{_errors:[]},u=u[d],l++}}}};return o(t),n}function Oo(t,r=n=>n.message){let n={errors:[]},o=(e,i=[])=>{var a,s;for(let u of e.issues)if(u.code==="invalid_union"&&u.errors.length)u.errors.map(l=>o({issues:l},[...i,...u.path]));else if(u.code==="invalid_key")o({issues:u.issues},[...i,...u.path]);else if(u.code==="invalid_element")o({issues:u.issues},[...i,...u.path]);else{let l=[...i,...u.path];if(l.length===0){n.errors.push(r(u));continue}let d=n,p=0;for(;p<l.length;){let g=l[p],h=p===l.length-1;typeof g=="string"?(d.properties??(d.properties={}),(a=d.properties)[g]??(a[g]={errors:[]}),d=d.properties[g]):(d.items??(d.items=[]),(s=d.items)[g]??(s[g]={errors:[]}),d=d.items[g]),h&&d.errors.push(r(u)),p++}}};return o(t),n}function Ed(t){let r=[],n=t.map(o=>typeof o=="object"?o.key:o);for(let o of n)typeof o=="number"?r.push(`[${o}]`):typeof o=="symbol"?r.push(`[${JSON.stringify(String(o))}]`):/[^\w$]/.test(o)?r.push(`[${JSON.stringify(o)}]`):(r.length&&r.push("."),r.push(o));return r.join("")}function Eo(t){let r=[],n=[...t.issues].sort((o,e)=>(o.path??[]).length-(e.path??[]).length);for(let o of n)r.push(`\u2716 ${o.message}`),o.path?.length&&r.push(` \u2192 at ${Ed(o.path)}`);return r.join(`
34
34
  `)}var at=t=>(r,n,o,e)=>{let i=o?{...o,async:!1}:{async:!1},a=r._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new ue;if(a.issues.length){let s=new(e?.Err??t)(a.issues.map(u=>H(u,i,Z())));throw Hr(s,e?.callee),s}return a.value},Jr=at(X),st=t=>async(r,n,o,e)=>{let i=o?{...o,async:!0}:{async:!0},a=r._zod.run({value:n,issues:[]},i);if(a instanceof Promise&&(a=await a),a.issues.length){let s=new(e?.Err??t)(a.issues.map(u=>H(u,i,Z())));throw Hr(s,e?.callee),s}return a.value},qr=st(X),ct=t=>(r,n,o)=>{let e=o?{...o,async:!1}:{async:!1},i=r._zod.run({value:n,issues:[]},e);if(i instanceof Promise)throw new ue;return i.issues.length?{success:!1,error:new(t??tr)(i.issues.map(a=>H(a,e,Z())))}:{success:!0,data:i.value}},Po=ct(X),ut=t=>async(r,n,o)=>{let e=o?{...o,async:!0}:{async:!0},i=r._zod.run({value:n,issues:[]},e);return i instanceof Promise&&(i=await i),i.issues.length?{success:!1,error:new t(i.issues.map(a=>H(a,e,Z())))}:{success:!0,data:i.value}},To=ut(X),Kr=t=>(r,n,o)=>{let e=o?{...o,direction:"backward"}:{direction:"backward"};return at(t)(r,n,e)},Ov=Kr(X),Yr=t=>(r,n,o)=>at(t)(r,n,o),Ev=Yr(X),Xr=t=>async(r,n,o)=>{let e=o?{...o,direction:"backward"}:{direction:"backward"};return st(t)(r,n,e)},Pv=Xr(X),Qr=t=>async(r,n,o)=>st(t)(r,n,o),Tv=Qr(X),en=t=>(r,n,o)=>{let e=o?{...o,direction:"backward"}:{direction:"backward"};return ct(t)(r,n,e)},jv=en(X),tn=t=>(r,n,o)=>ct(t)(r,n,o),Av=tn(X),rn=t=>async(r,n,o)=>{let e=o?{...o,direction:"backward"}:{direction:"backward"};return ut(t)(r,n,e)},Nv=rn(X),nn=t=>async(r,n,o)=>ut(t)(r,n,o),Cv=nn(X);var ee={};ke(ee,{base64:()=>Ho,base64url:()=>on,bigint:()=>ea,boolean:()=>ra,browserEmail:()=>Vv,cidrv4:()=>Go,cidrv6:()=>Wo,cuid:()=>jo,cuid2:()=>Ao,date:()=>Ko,datetime:()=>Xo,domain:()=>Wv,duration:()=>Ro,e164:()=>qo,email:()=>Lo,emoji:()=>Fo,extendedDuration:()=>Dv,guid:()=>Zo,hex:()=>Hv,hostname:()=>Gv,html5Email:()=>Lv,httpProtocol:()=>Jo,idnEmail:()=>Mv,integer:()=>ta,ipv4:()=>Mo,ipv6:()=>Vo,ksuid:()=>Do,lowercase:()=>oa,mac:()=>Bo,md5_base64:()=>qv,md5_base64url:()=>Kv,md5_hex:()=>Jv,nanoid:()=>Uo,null:()=>na,number:()=>an,rfc5322Email:()=>Fv,sha1_base64:()=>Xv,sha1_base64url:()=>Qv,sha1_hex:()=>Yv,sha256_base64:()=>t_,sha256_base64url:()=>r_,sha256_hex:()=>e_,sha384_base64:()=>i_,sha384_base64url:()=>o_,sha384_hex:()=>n_,sha512_base64:()=>s_,sha512_base64url:()=>c_,sha512_hex:()=>a_,string:()=>Qo,time:()=>Yo,ulid:()=>No,undefined:()=>ia,unicodeEmail:()=>Pd,uppercase:()=>aa,uuid:()=>Ge,uuid4:()=>Uv,uuid6:()=>Rv,uuid7:()=>Zv,xid:()=>Co});var jo=/^[cC][0-9a-z]{6,}$/,Ao=/^[0-9a-z]+$/,No=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Co=/^[0-9a-vA-V]{20}$/,Do=/^[A-Za-z0-9]{27}$/,Uo=/^[a-zA-Z0-9_-]{21}$/,Ro=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Dv=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,Zo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ge=t=>t?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${t}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Uv=Ge(4),Rv=Ge(6),Zv=Ge(7),Lo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Lv=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Fv=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,Pd=/^[^\s@"]{1,64}@[^\s@]{1,255}$/u,Mv=Pd,Vv=/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,Bv="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Fo(){return new RegExp(Bv,"u")}var Mo=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Bo=t=>{let r=ae(t??":");return new RegExp(`^(?:[0-9A-F]{2}${r}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${r}){5}[0-9a-f]{2}$`)},Go=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Wo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Ho=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,on=/^[A-Za-z0-9_-]*$/,Gv=/^(?=.{1,253}\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\.?$/,Wv=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,Jo=/^https?$/,qo=/^\+[1-9]\d{6,14}$/,Td="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",Ko=new RegExp(`^${Td}$`);function jd(t){let r="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof t.precision=="number"?t.precision===-1?`${r}`:t.precision===0?`${r}:[0-5]\\d`:`${r}:[0-5]\\d\\.\\d{${t.precision}}`:`${r}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Yo(t){return new RegExp(`^${jd(t)}$`)}function Xo(t){let r=jd({precision:t.precision}),n=["Z"];t.local&&n.push(""),t.offset&&n.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let o=`${r}(?:${n.join("|")})`;return new RegExp(`^${Td}T(?:${o})$`)}var Qo=t=>{let r=t?`[\\s\\S]{${t?.minimum??0},${t?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${r}$`)},ea=/^-?\d+n?$/,ta=/^-?\d+$/,an=/^-?\d+(?:\.\d+)?$/,ra=/^(?:true|false)$/i,na=/^null$/i;var ia=/^undefined$/i;var oa=/^[^A-Z]*$/,aa=/^[^a-z]*$/,Hv=/^[0-9a-fA-F]*$/;function ir(t,r){return new RegExp(`^[A-Za-z0-9+/]{${t}}${r}$`)}function or(t){return new RegExp(`^[A-Za-z0-9_-]{${t}}$`)}var Jv=/^[0-9a-fA-F]{32}$/,qv=ir(22,"=="),Kv=or(22),Yv=/^[0-9a-fA-F]{40}$/,Xv=ir(27,"="),Qv=or(27),e_=/^[0-9a-fA-F]{64}$/,t_=ir(43,"="),r_=or(43),n_=/^[0-9a-fA-F]{96}$/,i_=ir(64,""),o_=or(64),a_=/^[0-9a-fA-F]{128}$/,s_=ir(86,"=="),c_=or(86);var A=m("$ZodCheck",(t,r)=>{var n;t._zod??(t._zod={}),t._zod.def=r,(n=t._zod).onattach??(n.onattach=[])}),Nd={number:"number",bigint:"bigint",object:"date"},sn=m("$ZodCheckLessThan",(t,r)=>{A.init(t,r);let n=Nd[typeof r.value];t._zod.onattach.push(o=>{let e=o._zod.bag,i=(r.inclusive?e.maximum:e.exclusiveMaximum)??Number.POSITIVE_INFINITY;r.value<i&&(r.inclusive?e.maximum=r.value:e.exclusiveMaximum=r.value)}),t._zod.check=o=>{(r.inclusive?o.value<=r.value:o.value<r.value)||o.issues.push({origin:n,code:"too_big",maximum:typeof r.value=="object"?r.value.getTime():r.value,input:o.value,inclusive:r.inclusive,inst:t,continue:!r.abort})}}),cn=m("$ZodCheckGreaterThan",(t,r)=>{A.init(t,r);let n=Nd[typeof r.value];t._zod.onattach.push(o=>{let e=o._zod.bag,i=(r.inclusive?e.minimum:e.exclusiveMinimum)??Number.NEGATIVE_INFINITY;r.value>i&&(r.inclusive?e.minimum=r.value:e.exclusiveMinimum=r.value)}),t._zod.check=o=>{(r.inclusive?o.value>=r.value:o.value>r.value)||o.issues.push({origin:n,code:"too_small",minimum:typeof r.value=="object"?r.value.getTime():r.value,input:o.value,inclusive:r.inclusive,inst:t,continue:!r.abort})}}),sa=m("$ZodCheckMultipleOf",(t,r)=>{A.init(t,r),t._zod.onattach.push(n=>{var o;(o=n._zod.bag).multipleOf??(o.multipleOf=r.value)}),t._zod.check=n=>{if(typeof n.value!=typeof r.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof n.value=="bigint"?n.value%r.value===BigInt(0):yo(n.value,r.value)===0)||n.issues.push({origin:typeof n.value,code:"not_multiple_of",divisor:r.value,input:n.value,inst:t,continue:!r.abort})}}),ca=m("$ZodCheckNumberFormat",(t,r)=>{A.init(t,r),r.format=r.format||"float64";let n=r.format?.includes("int"),o=n?"int":"number",[e,i]=wo[r.format];t._zod.onattach.push(a=>{let s=a._zod.bag;s.format=r.format,s.minimum=e,s.maximum=i,n&&(s.pattern=ta)}),t._zod.check=a=>{let s=a.value;if(n){if(!Number.isInteger(s)){a.issues.push({expected:o,format:r.format,code:"invalid_type",continue:!1,input:s,inst:t});return}if(!Number.isSafeInteger(s)){s>0?a.issues.push({input:s,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:o,inclusive:!0,continue:!r.abort}):a.issues.push({input:s,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:o,inclusive:!0,continue:!r.abort});return}}s<e&&a.issues.push({origin:"number",input:s,code:"too_small",minimum:e,inclusive:!0,inst:t,continue:!r.abort}),s>i&&a.issues.push({origin:"number",input:s,code:"too_big",maximum:i,inclusive:!0,inst:t,continue:!r.abort})}}),ua=m("$ZodCheckBigIntFormat",(t,r)=>{A.init(t,r);let[n,o]=Io[r.format];t._zod.onattach.push(e=>{let i=e._zod.bag;i.format=r.format,i.minimum=n,i.maximum=o}),t._zod.check=e=>{let i=e.value;i<n&&e.issues.push({origin:"bigint",input:i,code:"too_small",minimum:n,inclusive:!0,inst:t,continue:!r.abort}),i>o&&e.issues.push({origin:"bigint",input:i,code:"too_big",maximum:o,inclusive:!0,inst:t,continue:!r.abort})}}),la=m("$ZodCheckMaxSize",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.size!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag.maximum??Number.POSITIVE_INFINITY;r.maximum<e&&(o._zod.bag.maximum=r.maximum)}),t._zod.check=o=>{let e=o.value;e.size<=r.maximum||o.issues.push({origin:Qt(e),code:"too_big",maximum:r.maximum,inclusive:!0,input:e,inst:t,continue:!r.abort})}}),da=m("$ZodCheckMinSize",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.size!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag.minimum??Number.NEGATIVE_INFINITY;r.minimum>e&&(o._zod.bag.minimum=r.minimum)}),t._zod.check=o=>{let e=o.value;e.size>=r.minimum||o.issues.push({origin:Qt(e),code:"too_small",minimum:r.minimum,inclusive:!0,input:e,inst:t,continue:!r.abort})}}),ma=m("$ZodCheckSizeEquals",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.size!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag;e.minimum=r.size,e.maximum=r.size,e.size=r.size}),t._zod.check=o=>{let e=o.value,i=e.size;if(i===r.size)return;let a=i>r.size;o.issues.push({origin:Qt(e),...a?{code:"too_big",maximum:r.size}:{code:"too_small",minimum:r.size},inclusive:!0,exact:!0,input:o.value,inst:t,continue:!r.abort})}}),pa=m("$ZodCheckMaxLength",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.length!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag.maximum??Number.POSITIVE_INFINITY;r.maximum<e&&(o._zod.bag.maximum=r.maximum)}),t._zod.check=o=>{let e=o.value;if(e.length<=r.maximum)return;let a=er(e);o.issues.push({origin:a,code:"too_big",maximum:r.maximum,inclusive:!0,input:e,inst:t,continue:!r.abort})}}),fa=m("$ZodCheckMinLength",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.length!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag.minimum??Number.NEGATIVE_INFINITY;r.minimum>e&&(o._zod.bag.minimum=r.minimum)}),t._zod.check=o=>{let e=o.value;if(e.length>=r.minimum)return;let a=er(e);o.issues.push({origin:a,code:"too_small",minimum:r.minimum,inclusive:!0,input:e,inst:t,continue:!r.abort})}}),ga=m("$ZodCheckLengthEquals",(t,r)=>{var n;A.init(t,r),(n=t._zod.def).when??(n.when=o=>{let e=o.value;return!Te(e)&&e.length!==void 0}),t._zod.onattach.push(o=>{let e=o._zod.bag;e.minimum=r.length,e.maximum=r.length,e.length=r.length}),t._zod.check=o=>{let e=o.value,i=e.length;if(i===r.length)return;let a=er(e),s=i>r.length;o.issues.push({origin:a,...s?{code:"too_big",maximum:r.length}:{code:"too_small",minimum:r.length},inclusive:!0,exact:!0,input:o.value,inst:t,continue:!r.abort})}}),lt=m("$ZodCheckStringFormat",(t,r)=>{var n,o;A.init(t,r),t._zod.onattach.push(e=>{let i=e._zod.bag;i.format=r.format,r.pattern&&(i.patterns??(i.patterns=new Set),i.patterns.add(r.pattern))}),r.pattern?(n=t._zod).check??(n.check=e=>{r.pattern.lastIndex=0,!r.pattern.test(e.value)&&e.issues.push({origin:"string",code:"invalid_format",format:r.format,input:e.value,...r.pattern?{pattern:r.pattern.toString()}:{},inst:t,continue:!r.abort})}):(o=t._zod).check??(o.check=()=>{})}),ha=m("$ZodCheckRegex",(t,r)=>{lt.init(t,r),t._zod.check=n=>{r.pattern.lastIndex=0,!r.pattern.test(n.value)&&n.issues.push({origin:"string",code:"invalid_format",format:"regex",input:n.value,pattern:r.pattern.toString(),inst:t,continue:!r.abort})}}),va=m("$ZodCheckLowerCase",(t,r)=>{r.pattern??(r.pattern=oa),lt.init(t,r)}),_a=m("$ZodCheckUpperCase",(t,r)=>{r.pattern??(r.pattern=aa),lt.init(t,r)}),ya=m("$ZodCheckIncludes",(t,r)=>{A.init(t,r);let n=ae(r.includes),o=new RegExp(typeof r.position=="number"?`^.{${r.position}}${n}`:n);r.pattern=o,t._zod.onattach.push(e=>{let i=e._zod.bag;i.patterns??(i.patterns=new Set),i.patterns.add(o)}),t._zod.check=e=>{e.value.includes(r.includes,r.position)||e.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:r.includes,input:e.value,inst:t,continue:!r.abort})}}),ba=m("$ZodCheckStartsWith",(t,r)=>{A.init(t,r);let n=new RegExp(`^${ae(r.prefix)}.*`);r.pattern??(r.pattern=n),t._zod.onattach.push(o=>{let e=o._zod.bag;e.patterns??(e.patterns=new Set),e.patterns.add(n)}),t._zod.check=o=>{o.value.startsWith(r.prefix)||o.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:r.prefix,input:o.value,inst:t,continue:!r.abort})}}),$a=m("$ZodCheckEndsWith",(t,r)=>{A.init(t,r);let n=new RegExp(`.*${ae(r.suffix)}$`);r.pattern??(r.pattern=n),t._zod.onattach.push(o=>{let e=o._zod.bag;e.patterns??(e.patterns=new Set),e.patterns.add(n)}),t._zod.check=o=>{o.value.endsWith(r.suffix)||o.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:r.suffix,input:o.value,inst:t,continue:!r.abort})}});function Ad(t,r,n){t.issues.length&&r.issues.push(...Y(n,t.issues))}var xa=m("$ZodCheckProperty",(t,r)=>{A.init(t,r),t._zod.check=n=>{let o=r.schema._zod.run({value:n.value[r.property],issues:[]},{});if(o instanceof Promise)return o.then(e=>Ad(e,n,r.property));Ad(o,n,r.property)}}),ka=m("$ZodCheckMimeType",(t,r)=>{A.init(t,r);let n=new Set(r.mime);t._zod.onattach.push(o=>{o._zod.bag.mime=r.mime}),t._zod.check=o=>{n.has(o.value.type)||o.issues.push({code:"invalid_value",values:r.mime,input:o.value.type,inst:t,continue:!r.abort})}}),Sa=m("$ZodCheckOverwrite",(t,r)=>{A.init(t,r),t._zod.check=n=>{n.value=r.tx(n.value)}});var ar=class{constructor(r=[]){this.content=[],this.indent=0,this&&(this.args=r)}indented(r){this.indent+=1,r(this),this.indent-=1}write(r){if(typeof r=="function"){r(this,{execution:"sync"}),r(this,{execution:"async"});return}let o=r.split(`
35
35
  `).filter(a=>a),e=Math.min(...o.map(a=>a.length-a.trimStart().length)),i=o.map(a=>a.slice(e)).map(a=>" ".repeat(this.indent*2)+a);for(let a of i)this.content.push(a)}compile(){let r=Function,n=this?.args,e=[...(this?.content??[""]).map(i=>` ${i}`)];return new r(...n,e.join(`
36
36
  `))}};var wa={major:4,minor:4,patch:3};var S=m("$ZodType",(t,r)=>{var n;t??(t={}),t._zod.def=r,t._zod.bag=t._zod.bag||{},t._zod.version=wa;let o=[...t._zod.def.checks??[]];t._zod.traits.has("$ZodCheck")&&o.unshift(t);for(let e of o)for(let i of e._zod.onattach)i(t);if(o.length===0)(n=t._zod).deferred??(n.deferred=[]),t._zod.deferred?.push(()=>{t._zod.run=t._zod.parse});else{let e=(a,s,u)=>{let l=Ne(a),d;for(let p of s){if(p._zod.def.when){if(zo(a)||!p._zod.def.when(a))continue}else if(l)continue;let g=a.issues.length,h=p._zod.check(a);if(h instanceof Promise&&u?.async===!1)throw new ue;if(d||h instanceof Promise)d=(d??Promise.resolve()).then(async()=>{await h,a.issues.length!==g&&(l||(l=Ne(a,g)))});else{if(a.issues.length===g)continue;l||(l=Ne(a,g))}}return d?d.then(()=>a):a},i=(a,s,u)=>{if(Ne(a))return a.aborted=!0,a;let l=e(s,o,u);if(l instanceof Promise){if(u.async===!1)throw new ue;return l.then(d=>t._zod.parse(d,u))}return t._zod.parse(l,u)};t._zod.run=(a,s)=>{if(s.skipChecks)return t._zod.parse(a,s);if(s.direction==="backward"){let l=t._zod.parse({value:a.value,issues:[]},{...s,skipChecks:!0});return l instanceof Promise?l.then(d=>i(d,a,s)):i(l,a,s)}let u=t._zod.parse(a,s);if(u instanceof Promise){if(s.async===!1)throw new ue;return u.then(l=>e(l,o,s))}return e(u,o,s)}}I(t,"~standard",()=>({validate:e=>{try{let i=Po(t,e);return i.success?{value:i.data}:{issues:i.error?.issues}}catch{return To(t,e).then(a=>a.success?{value:a.data}:{issues:a.error?.issues})}},vendor:"zod",version:1}))}),We=m("$ZodString",(t,r)=>{S.init(t,r),t._zod.pattern=[...t?._zod.bag?.patterns??[]].pop()??Qo(t._zod.bag),t._zod.parse=(n,o)=>{if(r.coerce)try{n.value=String(n.value)}catch{}return typeof n.value=="string"||n.issues.push({expected:"string",code:"invalid_type",input:n.value,inst:t}),n}}),T=m("$ZodStringFormat",(t,r)=>{lt.init(t,r),We.init(t,r)}),za=m("$ZodGUID",(t,r)=>{r.pattern??(r.pattern=Zo),T.init(t,r)}),Oa=m("$ZodUUID",(t,r)=>{if(r.version){let o={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[r.version];if(o===void 0)throw new Error(`Invalid UUID version: "${r.version}"`);r.pattern??(r.pattern=Ge(o))}else r.pattern??(r.pattern=Ge());T.init(t,r)}),Ea=m("$ZodEmail",(t,r)=>{r.pattern??(r.pattern=Lo),T.init(t,r)}),Pa=m("$ZodURL",(t,r)=>{T.init(t,r),t._zod.check=n=>{try{let o=n.value.trim();if(!r.normalize&&r.protocol?.source===Jo.source&&!/^https?:\/\//i.test(o)){n.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:n.value,inst:t,continue:!r.abort});return}let e=new URL(o);r.hostname&&(r.hostname.lastIndex=0,r.hostname.test(e.hostname)||n.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:r.hostname.source,input:n.value,inst:t,continue:!r.abort})),r.protocol&&(r.protocol.lastIndex=0,r.protocol.test(e.protocol.endsWith(":")?e.protocol.slice(0,-1):e.protocol)||n.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:r.protocol.source,input:n.value,inst:t,continue:!r.abort})),r.normalize?n.value=e.href:n.value=o;return}catch{n.issues.push({code:"invalid_format",format:"url",input:n.value,inst:t,continue:!r.abort})}}}),Ta=m("$ZodEmoji",(t,r)=>{r.pattern??(r.pattern=Fo()),T.init(t,r)}),ja=m("$ZodNanoID",(t,r)=>{r.pattern??(r.pattern=Uo),T.init(t,r)}),Aa=m("$ZodCUID",(t,r)=>{r.pattern??(r.pattern=jo),T.init(t,r)}),Na=m("$ZodCUID2",(t,r)=>{r.pattern??(r.pattern=Ao),T.init(t,r)}),Ca=m("$ZodULID",(t,r)=>{r.pattern??(r.pattern=No),T.init(t,r)}),Da=m("$ZodXID",(t,r)=>{r.pattern??(r.pattern=Co),T.init(t,r)}),Ua=m("$ZodKSUID",(t,r)=>{r.pattern??(r.pattern=Do),T.init(t,r)}),Ra=m("$ZodISODateTime",(t,r)=>{r.pattern??(r.pattern=Xo(r)),T.init(t,r)}),Za=m("$ZodISODate",(t,r)=>{r.pattern??(r.pattern=Ko),T.init(t,r)}),La=m("$ZodISOTime",(t,r)=>{r.pattern??(r.pattern=Yo(r)),T.init(t,r)}),Fa=m("$ZodISODuration",(t,r)=>{r.pattern??(r.pattern=Ro),T.init(t,r)}),Ma=m("$ZodIPv4",(t,r)=>{r.pattern??(r.pattern=Mo),T.init(t,r),t._zod.bag.format="ipv4"}),Va=m("$ZodIPv6",(t,r)=>{r.pattern??(r.pattern=Vo),T.init(t,r),t._zod.bag.format="ipv6",t._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:"invalid_format",format:"ipv6",input:n.value,inst:t,continue:!r.abort})}}}),Ba=m("$ZodMAC",(t,r)=>{r.pattern??(r.pattern=Bo(r.delimiter)),T.init(t,r),t._zod.bag.format="mac"}),Ga=m("$ZodCIDRv4",(t,r)=>{r.pattern??(r.pattern=Go),T.init(t,r)}),Wa=m("$ZodCIDRv6",(t,r)=>{r.pattern??(r.pattern=Wo),T.init(t,r),t._zod.check=n=>{let o=n.value.split("/");try{if(o.length!==2)throw new Error;let[e,i]=o;if(!i)throw new Error;let a=Number(i);if(`${a}`!==i)throw new Error;if(a<0||a>128)throw new Error;new URL(`http://[${e}]`)}catch{n.issues.push({code:"invalid_format",format:"cidrv6",input:n.value,inst:t,continue:!r.abort})}}});function Ha(t){if(t==="")return!0;if(/\s/.test(t)||t.length%4!==0)return!1;try{return atob(t),!0}catch{return!1}}var Ja=m("$ZodBase64",(t,r)=>{r.pattern??(r.pattern=Ho),T.init(t,r),t._zod.bag.contentEncoding="base64",t._zod.check=n=>{Ha(n.value)||n.issues.push({code:"invalid_format",format:"base64",input:n.value,inst:t,continue:!r.abort})}});function Kd(t){if(!on.test(t))return!1;let r=t.replace(/[-_]/g,o=>o==="-"?"+":"/"),n=r.padEnd(Math.ceil(r.length/4)*4,"=");return Ha(n)}var qa=m("$ZodBase64URL",(t,r)=>{r.pattern??(r.pattern=on),T.init(t,r),t._zod.bag.contentEncoding="base64url",t._zod.check=n=>{Kd(n.value)||n.issues.push({code:"invalid_format",format:"base64url",input:n.value,inst:t,continue:!r.abort})}}),Ka=m("$ZodE164",(t,r)=>{r.pattern??(r.pattern=qo),T.init(t,r)});function Yd(t,r=null){try{let n=t.split(".");if(n.length!==3)return!1;let[o]=n;if(!o)return!1;let e=JSON.parse(atob(o));return!("typ"in e&&e?.typ!=="JWT"||!e.alg||r&&(!("alg"in e)||e.alg!==r))}catch{return!1}}var Ya=m("$ZodJWT",(t,r)=>{T.init(t,r),t._zod.check=n=>{Yd(n.value,r.alg)||n.issues.push({code:"invalid_format",format:"jwt",input:n.value,inst:t,continue:!r.abort})}}),Xa=m("$ZodCustomStringFormat",(t,r)=>{T.init(t,r),t._zod.check=n=>{r.fn(n.value)||n.issues.push({code:"invalid_format",format:r.format,input:n.value,inst:t,continue:!r.abort})}}),pn=m("$ZodNumber",(t,r)=>{S.init(t,r),t._zod.pattern=t._zod.bag.pattern??an,t._zod.parse=(n,o)=>{if(r.coerce)try{n.value=Number(n.value)}catch{}let e=n.value;if(typeof e=="number"&&!Number.isNaN(e)&&Number.isFinite(e))return n;let i=typeof e=="number"?Number.isNaN(e)?"NaN":Number.isFinite(e)?void 0:"Infinity":void 0;return n.issues.push({expected:"number",code:"invalid_type",input:e,inst:t,...i?{received:i}:{}}),n}}),Qa=m("$ZodNumberFormat",(t,r)=>{ca.init(t,r),pn.init(t,r)}),sr=m("$ZodBoolean",(t,r)=>{S.init(t,r),t._zod.pattern=ra,t._zod.parse=(n,o)=>{if(r.coerce)try{n.value=!!n.value}catch{}let e=n.value;return typeof e=="boolean"||n.issues.push({expected:"boolean",code:"invalid_type",input:e,inst:t}),n}}),fn=m("$ZodBigInt",(t,r)=>{S.init(t,r),t._zod.pattern=ea,t._zod.parse=(n,o)=>{if(r.coerce)try{n.value=BigInt(n.value)}catch{}return typeof n.value=="bigint"||n.issues.push({expected:"bigint",code:"invalid_type",input:n.value,inst:t}),n}}),es=m("$ZodBigIntFormat",(t,r)=>{ua.init(t,r),fn.init(t,r)}),ts=m("$ZodSymbol",(t,r)=>{S.init(t,r),t._zod.parse=(n,o)=>{let e=n.value;return typeof e=="symbol"||n.issues.push({expected:"symbol",code:"invalid_type",input:e,inst:t}),n}}),rs=m("$ZodUndefined",(t,r)=>{S.init(t,r),t._zod.pattern=ia,t._zod.values=new Set([void 0]),t._zod.parse=(n,o)=>{let e=n.value;return typeof e>"u"||n.issues.push({expected:"undefined",code:"invalid_type",input:e,inst:t}),n}}),ns=m("$ZodNull",(t,r)=>{S.init(t,r),t._zod.pattern=na,t._zod.values=new Set([null]),t._zod.parse=(n,o)=>{let e=n.value;return e===null||n.issues.push({expected:"null",code:"invalid_type",input:e,inst:t}),n}}),is=m("$ZodAny",(t,r)=>{S.init(t,r),t._zod.parse=n=>n}),os=m("$ZodUnknown",(t,r)=>{S.init(t,r),t._zod.parse=n=>n}),as=m("$ZodNever",(t,r)=>{S.init(t,r),t._zod.parse=(n,o)=>(n.issues.push({expected:"never",code:"invalid_type",input:n.value,inst:t}),n)}),ss=m("$ZodVoid",(t,r)=>{S.init(t,r),t._zod.parse=(n,o)=>{let e=n.value;return typeof e>"u"||n.issues.push({expected:"void",code:"invalid_type",input:e,inst:t}),n}}),cs=m("$ZodDate",(t,r)=>{S.init(t,r),t._zod.parse=(n,o)=>{if(r.coerce)try{n.value=new Date(n.value)}catch{}let e=n.value,i=e instanceof Date;return i&&!Number.isNaN(e.getTime())||n.issues.push({expected:"date",code:"invalid_type",input:e,...i?{received:"Invalid Date"}:{},inst:t}),n}});function Dd(t,r,n){t.issues.length&&r.issues.push(...Y(n,t.issues)),r.value[n]=t.value}var us=m("$ZodArray",(t,r)=>{S.init(t,r),t._zod.parse=(n,o)=>{let e=n.value;if(!Array.isArray(e))return n.issues.push({expected:"array",code:"invalid_type",input:e,inst:t}),n;n.value=Array(e.length);let i=[];for(let a=0;a<e.length;a++){let s=e[a],u=r.element._zod.run({value:s,issues:[]},o);u instanceof Promise?i.push(u.then(l=>Dd(l,n,a))):Dd(u,n,a)}return i.length?Promise.all(i).then(()=>n):n}});function mn(t,r,n,o,e,i){let a=n in o;if(t.issues.length){if(e&&i&&!a)return;r.issues.push(...Y(n,t.issues))}if(!a&&!e){t.issues.length||r.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[n]});return}t.value===void 0?a&&(r.value[n]=void 0):r.value[n]=t.value}function Xd(t){let r=Object.keys(t.shape);for(let o of r)if(!t.shape?.[o]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${o}": expected a Zod schema`);let n=So(t.shape);return{...t,keys:r,keySet:new Set(r),numKeys:r.length,optionalKeys:new Set(n)}}function Qd(t,r,n,o,e,i){let a=[],s=e.keySet,u=e.catchall._zod,l=u.def.type,d=u.optin==="optional",p=u.optout==="optional";for(let g in r){if(g==="__proto__"||s.has(g))continue;if(l==="never"){a.push(g);continue}let h=u.run({value:r[g],issues:[]},o);h instanceof Promise?t.push(h.then(x=>mn(x,n,g,r,d,p))):mn(h,n,g,r,d,p)}return a.length&&n.issues.push({code:"unrecognized_keys",keys:a,input:r,inst:i}),t.length?Promise.all(t).then(()=>n):n}var em=m("$ZodObject",(t,r)=>{if(S.init(t,r),!Object.getOwnPropertyDescriptor(r,"shape")?.get){let s=r.shape;Object.defineProperty(r,"shape",{get:()=>{let u={...s};return Object.defineProperty(r,"shape",{value:u}),u}})}let o=it(()=>Xd(r));I(t._zod,"propValues",()=>{let s=r.shape,u={};for(let l in s){let d=s[l]._zod;if(d.values){u[l]??(u[l]=new Set);for(let p of d.values)u[l].add(p)}}return u});let e=Be,i=r.catchall,a;t._zod.parse=(s,u)=>{a??(a=o.value);let l=s.value;if(!e(l))return s.issues.push({expected:"object",code:"invalid_type",input:l,inst:t}),s;s.value={};let d=[],p=a.shape;for(let g of a.keys){let h=p[g],x=h._zod.optin==="optional",K=h._zod.optout==="optional",F=h._zod.run({value:l[g],issues:[]},u);F instanceof Promise?d.push(F.then(Fi=>mn(Fi,s,g,l,x,K))):mn(F,s,g,l,x,K)}return i?Qd(d,l,s,u,o.value,t):d.length?Promise.all(d).then(()=>s):s}}),ls=m("$ZodObjectJIT",(t,r)=>{em.init(t,r);let n=t._zod.parse,o=it(()=>Xd(r)),e=g=>{let h=new ar(["shape","payload","ctx"]),x=o.value,K=ge=>{let U=Wr(ge);return`shape[${U}]._zod.run({ value: input[${U}], issues: [] }, ctx)`};h.write("const input = payload.value;");let F=Object.create(null),Fi=0;for(let ge of x.keys)F[ge]=`key_${Fi++}`;h.write("const newResult = {};");for(let ge of x.keys){let U=F[ge],M=Wr(ge),Cl=g[ge],Dl=Cl?._zod?.optin==="optional",ah=Cl?._zod?.optout==="optional";h.write(`const ${U} = ${K(ge)};`),Dl&&ah?h.write(`
@@ -99,7 +99,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
99
99
  Output:
100
100
  --format json \u2014 stable agent-friendly JSON envelope (default for non-TTY)
101
101
  --format table \u2014 human-readable summary table (default for TTY)
102
- `).action(async o=>{let e=r(),i=await R(e,o),s=n$(await e.managementListPlans(i)).map(d=>({id:d.id,key:d.planKey??d.key??"",name:d.name??"",version:d.version??null,free:d.free??!1,recurring_fee_cents:d.recurring_fee_cents??0,recurring_credit_grant_cents:Pr({grants:d.grants}),one_time_credit_grant_cents:Nt({grants:d.grants}),trial_days:d.trial_days??0,max_monthly_spend_cents:d.max_monthly_spend_cents??null,status:d.status??(d.isActive===!1?"INACTIVE":"ACTIVE")})),u=t.opts();if(Ee(u.format)==="json"){console.log(ce({ok:!0,productId:i,count:s.length,plans:s}));return}Oe(`${s.length} plan(s) for product ${i}`),console.log(i$(s))}),n.command("create <productIdOrName>").description("Create a plan on a product (5-knob spec)").requiredOption("--key <key>","Stable plan key (e.g. starter, pro)").requiredOption("--name <name>","Human-friendly plan name").option("--free","Mark this as the free plan (requires hard-enforced limits)").option("--recurring-fee-cents <cents>","Flat subscription fee per period, in cents",o=>parseInt(o,10)).option("--recurring-credit-grant-cents <cents>","Credit granted each period, in cents",o=>parseInt(o,10)).option("--one-time-credit-grant-cents <cents>","Prepaid balance at signup, in cents",o=>parseInt(o,10)).option("--trial-days <days>","Free-trial length in days",o=>parseInt(o,10)).option("--max-monthly-spend-cents <cents>","Optional hard cap on monthly spend, in cents",o=>parseInt(o,10)).option("--rate-limit <maxPerWindow>","Burst-protection rate limit on requests (default: 600). Publishing requires every plan to carry one \u2014 pass --no-rate-limit only for drafts.",o=>parseInt(o,10)).option("--no-rate-limit","Create the plan without a burst rate limit").option("--rate-window <window>","Rate limit window: second | minute | hour (default: minute)").option("--env <env>","Environment scope").action(async(o,e)=>{let i=r(),a=await R(i,o),s={key:e.key,name:e.name};if(e.free&&(s.free=!0),e.rateLimit!==!1){let d=typeof e.rateLimit=="number"?e.rateLimit:600,p=e.rateWindow??"minute";if(!["second","minute","hour"].includes(p))throw new k(`Invalid --rate-window "${p}" \u2014 use second, minute, or hour.`,void 0,{code:"INVALID_RATE_WINDOW"});s.limits=[{dimension:"requests",window:{type:"named",name:p},capacity:d,enforcement:"enforce"}]}typeof e.recurringFeeCents=="number"&&(s.recurring_fee_cents=e.recurringFeeCents);let u=Zg(e.recurringCreditGrantCents,e.oneTimeCreditGrantCents);u&&(s.grants=u),typeof e.trialDays=="number"&&(s.trial_days=e.trialDays),typeof e.maxMonthlySpendCents=="number"&&(s.max_monthly_spend_cents=e.maxMonthlySpendCents);let l=await i.createPlan(a,s,{env:e.env});z(t,`Plan ${e.key} created`,{ok:!0,productId:a,plan:l})}),n.command("update <productIdOrName> <planId>").description("Update a plan (5-knob spec)").option("--name <name>","Human-friendly plan name").option("--recurring-fee-cents <cents>","Flat subscription fee per period, in cents",o=>parseInt(o,10)).option("--recurring-credit-grant-cents <cents>","Credit granted each period, in cents",o=>parseInt(o,10)).option("--one-time-credit-grant-cents <cents>","Prepaid balance at signup, in cents",o=>parseInt(o,10)).option("--trial-days <days>","Free-trial length in days",o=>parseInt(o,10)).option("--max-monthly-spend-cents <cents>","Optional hard cap on monthly spend, in cents",o=>parseInt(o,10)).option("--env <env>","Environment scope").action(async(o,e,i)=>{let a=r(),s=await R(a,o),u={};i.name!==void 0&&(u.name=i.name),typeof i.recurringFeeCents=="number"&&(u.recurring_fee_cents=i.recurringFeeCents);let l=Zg(i.recurringCreditGrantCents,i.oneTimeCreditGrantCents);if(l&&(u.grants=l),typeof i.trialDays=="number"&&(u.trial_days=i.trialDays),typeof i.maxMonthlySpendCents=="number"&&(u.max_monthly_spend_cents=i.maxMonthlySpendCents),Object.keys(u).length===0)throw new k("No fields to update. Pass --name, --recurring-fee-cents, --recurring-credit-grant-cents, --one-time-credit-grant-cents, --trial-days, or --max-monthly-spend-cents.",void 0,{code:"PLAN_UPDATE_NO_FIELDS"});let d=await a.updatePlan(s,e,u,{env:i.env});z(t,`Plan ${e} updated`,{ok:!0,productId:s,plan:d})}),n.command("delete <productIdOrName> <planId>").description("Delete a plan. Requires --yes.").option("--yes","Skip confirmation; required for delete").option("--env <env>","Environment scope").action(async(o,e,i)=>{if(!i.yes)throw new k("Pass --yes to confirm plan deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let a=r(),s=await R(a,o);await a.deletePlan(s,e,{env:i.env}),z(t,`Plan ${e} deleted`,{ok:!0,productId:s,deleted:e})})}function Fg(t,r){let n=t.command("persona").description("Mint and manage test-env personas (test API keys)");n.command("bootstrap <productIdOrName>").description("Issue a fresh fsk_test_ API key in a test environment").requiredOption("--env <env>","Environment name (must be test-strategy)").option("--plan <planKey>","Plan key to assign (e.g. starter)").option("--display-name <name>","Persona display name").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await Pl(i,a,e.env),u=await i.issuePersonaBootstrapKey(a,s,{planKey:e.plan,displayName:e.displayName});z(t,"Persona bootstrapped",{ok:!0,productId:a,environmentId:s,result:u})}),n.command("list <productIdOrName>").description("List personas for a test environment").requiredOption("--env <env>","Environment name").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await Pl(i,a,e.env),u=await i.listPersonas(a,s);z(t,"Personas",{ok:!0,productId:a,environmentId:s,result:u})}),n.command("revoke <productIdOrName> <personaId>").description("Revoke a persona's API key").requiredOption("--env <env>","Environment name").action(async(o,e,i)=>{let a=r(),s=await R(a,o),u=await Pl(a,s,i.env),l=await a.revokePersona(s,u,e);z(t,`Persona ${e} revoked`,{ok:!0,productId:s,environmentId:u,result:l})})}async function Pl(t,r,n){try{return await Br(t,r,n)}catch(o){throw new k(o instanceof Error?o.message:`Environment "${n}" not found on product ${r}.`,void 0,{code:"ENV_NOT_FOUND"})}}function Mg(t,r){t.command("usage").description("Usage observability for a product").command("summary <productIdOrName>").description("Show usage summary for the last 30 days").action(async o=>{let e=r(),i=await R(e,o),a=await e.managementGetUsage(i);z(t,"Usage summary",{ok:!0,productId:i,summary:a})})}function Vg(t,r){let n=t.command("connect").description("Connection status for GitHub and Stripe (browser-only flows)");n.command("github").description("Print GitHub-connection status").action(async()=>{let e=await r().builderGitHubStatus();z(t,"GitHub status",{ok:!0,status:e})}),n.command("stripe <productIdOrName>").description("Print Stripe Connect status for a product").action(async o=>{let e=r(),i=await R(e,o),a=await e.productStripeStatus(i);z(t,"Stripe status",{ok:!0,productId:i,status:a})})}function o$(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.tokens)?r.tokens:Array.isArray(t)?t:[]}function Bg(t,r){let n=t.command("token").description("Maker-token management (list, create, revoke)");n.command("list").description("List maker tokens in the current org").action(async()=>{let o=r(),e=o$(await o.managementListMakerTokens());z(t,`${e.length} token(s)`,{ok:!0,count:e.length,tokens:e.map(i=>({id:i.id,name:i.name??null,scopes:i.scopes??[],productId:i.productId??null,lastFour:i.lastFour??null,createdAt:i.createdAt??null,revokedAt:i.revokedAt??null}))})}),n.command("create").description("Create a new maker token (returns the secret once)").requiredOption("--name <name>","Human-friendly token name").option("--scope <scope...>","Scope(s) to attach (e.g. products:update products:publish)").option("--product <productId>","Scope to a specific product").action(async o=>{let i=await r().managementCreateMakerToken({name:o.name,scopes:o.scope,productId:o.product});z(t,"Token created",{ok:!0,result:i})}),n.command("revoke <tokenId>").description("Revoke a maker token. Requires --yes.").option("--yes","Skip confirmation; required for revoke").action(async(o,e)=>{if(!e.yes)throw new k("Pass --yes to confirm token revocation.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});await r().managementRevokeMakerToken(o),z(t,`Token ${o} revoked`,{ok:!0,revoked:o})})}function a$(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.tokens)?r.tokens:Array.isArray(t)?t:[]}async function s$(t,r,n){if(!n)return null;try{return await Br(t,r,n)}catch(o){throw new k(o instanceof Error?o.message:`Environment "${n}" not found on product ${r}.`,void 0,{code:"ENV_NOT_FOUND"})}}function Gg(t,r){let o=(t.commands.find(e=>e.name()==="metering")??t.command("metering").description("Runtime metering management")).command("tokens").description("Runtime metering token management");o.command("list <productId>").description("List runtime metering tokens for a product").action(async e=>{let i=r(),a=a$(await i.managementListMeteringTokens(e));z(t,`${a.length} metering token(s)`,{ok:!0,count:a.length,tokens:a})}),o.command("create <productId>").description("Create a runtime metering token (returns FARTHERSHORE_METERING_TOKEN once)").requiredOption("--name <name>","Human-friendly token name").option("--env <environment>","Scope token to an environment name or id").option("--environment <environment>","Alias for --env").action(async(e,i)=>{let a=r(),s=i.env??i.environment,u=await s$(a,e,s),l=await a.managementCreateMeteringToken(e,{name:i.name,environmentId:u});z(t,"Metering token created",{ok:!0,envVar:"FARTHERSHORE_METERING_TOKEN",result:l})}),o.command("revoke <productId> <tokenId>").description("Revoke a runtime metering token. Requires --yes.").option("--yes","Skip confirmation; required for revoke").action(async(e,i,a)=>{if(!a.yes)throw new k("Pass --yes to confirm metering token revocation.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});await r().managementRevokeMeteringToken(e,i),z(t,`Metering token ${i} revoked`,{ok:!0,productId:e,revoked:i})})}import{existsSync as Wg,mkdirSync as c$,writeFileSync as u$}from"node:fs";import{basename as l$,dirname as Tl,join as d$,resolve as m$}from"node:path";import{createInterface as p$}from"node:readline/promises";import{stdin as Hg,stdout as Jg}from"node:process";var Zi="product/product.config.ts",f$="^0.4.0",g$="^0.1.16";function jl(t){let r=new Set;for(let a of t.pricing.meters??[])typeof a.dimension=="string"&&r.add(a.dimension);let n=new Set,o={key:t.kind,name:t.label.split(" \u2014 ")[0]??t.label,description:t.description,...t.pricing};t.kind==="free"&&(o.free=!0,o.limits=[{dimension:"requests",window:{type:"named",name:"month"},capacity:1e3,enforcement:"enforce"}],n.add("requests"));let e={product:{name:"my-product",displayName:"My Product",baseUrl:"https://app.example.com"},gateway:{},plans:[o]},i=new Set([...r,...n]);return i.size>0&&(e.metering={meters:[...i].map(a=>({key:a,display:Kg(a)}))}),e}function h$(t){if(!t)throw new k(`--template is required. Choose one of: ${pe.join(", ")}.`,void 0,{code:"INIT_TEMPLATE_REQUIRED"});let r=t.toLowerCase();if(!pe.includes(r))throw new k(`Unknown template "${t}". Choose one of: ${pe.join(", ")}.`,void 0,{code:"INIT_TEMPLATE_UNKNOWN"});return r}function qg(t){let r=jl(t);return`import { fs } from "@farthershore/product";
102
+ `).action(async o=>{let e=r(),i=await R(e,o),s=n$(await e.managementListPlans(i)).map(d=>({id:d.id,key:d.planKey??d.key??"",name:d.name??"",version:d.version??null,free:d.free??!1,recurring_fee_cents:d.recurring_fee_cents??0,recurring_credit_grant_cents:Pr({grants:d.grants}),one_time_credit_grant_cents:Nt({grants:d.grants}),trial_days:d.trial_days??0,max_monthly_spend_cents:d.max_monthly_spend_cents??null,status:d.status??(d.isActive===!1?"INACTIVE":"ACTIVE")})),u=t.opts();if(Ee(u.format)==="json"){console.log(ce({ok:!0,productId:i,count:s.length,plans:s}));return}Oe(`${s.length} plan(s) for product ${i}`),console.log(i$(s))}),n.command("create <productIdOrName>").description("Create a plan on a product (5-knob spec)").requiredOption("--key <key>","Stable plan key (e.g. starter, pro)").requiredOption("--name <name>","Human-friendly plan name").option("--free","Mark this as the free plan (requires hard-enforced limits)").option("--recurring-fee-cents <cents>","Flat subscription fee per period, in cents",o=>parseInt(o,10)).option("--recurring-credit-grant-cents <cents>","Credit granted each period, in cents",o=>parseInt(o,10)).option("--one-time-credit-grant-cents <cents>","Prepaid balance at signup, in cents",o=>parseInt(o,10)).option("--trial-days <days>","Free-trial length in days",o=>parseInt(o,10)).option("--max-monthly-spend-cents <cents>","Optional hard cap on monthly spend, in cents",o=>parseInt(o,10)).option("--rate-limit <maxPerWindow>","Burst-protection rate limit on requests (default: 600). Publishing requires every plan to carry one \u2014 pass --no-rate-limit only for drafts.",o=>parseInt(o,10)).option("--no-rate-limit","Create the plan without a burst rate limit").option("--rate-window <window>","Rate limit window: second | minute | hour (default: minute)").option("--env <env>","Environment scope").action(async(o,e)=>{let i=r(),a=await R(i,o),s={key:e.key,name:e.name};if(e.free&&(s.free=!0),e.rateLimit!==!1){let d=typeof e.rateLimit=="number"?e.rateLimit:600,p=e.rateWindow??"minute";if(!["second","minute","hour"].includes(p))throw new k(`Invalid --rate-window "${p}" \u2014 use second, minute, or hour.`,void 0,{code:"INVALID_RATE_WINDOW"});s.limits=[{dimension:"requests",window:{type:"named",name:p},capacity:d,enforcement:"enforce"}]}typeof e.recurringFeeCents=="number"&&(s.recurring_fee_cents=e.recurringFeeCents);let u=Zg(e.recurringCreditGrantCents,e.oneTimeCreditGrantCents);u&&(s.grants=u),typeof e.trialDays=="number"&&(s.trial_days=e.trialDays),typeof e.maxMonthlySpendCents=="number"&&(s.max_monthly_spend_cents=e.maxMonthlySpendCents);let l=await i.createPlan(a,s,{env:e.env});z(t,`Plan ${e.key} created`,{ok:!0,productId:a,plan:l})}),n.command("update <productIdOrName> <planId>").description("Update a plan (5-knob spec)").option("--name <name>","Human-friendly plan name").option("--recurring-fee-cents <cents>","Flat subscription fee per period, in cents",o=>parseInt(o,10)).option("--recurring-credit-grant-cents <cents>","Credit granted each period, in cents",o=>parseInt(o,10)).option("--one-time-credit-grant-cents <cents>","Prepaid balance at signup, in cents",o=>parseInt(o,10)).option("--trial-days <days>","Free-trial length in days",o=>parseInt(o,10)).option("--max-monthly-spend-cents <cents>","Optional hard cap on monthly spend, in cents",o=>parseInt(o,10)).option("--env <env>","Environment scope").action(async(o,e,i)=>{let a=r(),s=await R(a,o),u={};i.name!==void 0&&(u.name=i.name),typeof i.recurringFeeCents=="number"&&(u.recurring_fee_cents=i.recurringFeeCents);let l=Zg(i.recurringCreditGrantCents,i.oneTimeCreditGrantCents);if(l&&(u.grants=l),typeof i.trialDays=="number"&&(u.trial_days=i.trialDays),typeof i.maxMonthlySpendCents=="number"&&(u.max_monthly_spend_cents=i.maxMonthlySpendCents),Object.keys(u).length===0)throw new k("No fields to update. Pass --name, --recurring-fee-cents, --recurring-credit-grant-cents, --one-time-credit-grant-cents, --trial-days, or --max-monthly-spend-cents.",void 0,{code:"PLAN_UPDATE_NO_FIELDS"});let d=await a.updatePlan(s,e,u,{env:i.env});z(t,`Plan ${e} updated`,{ok:!0,productId:s,plan:d})}),n.command("delete <productIdOrName> <planId>").description("Delete a plan. Requires --yes.").option("--yes","Skip confirmation; required for delete").option("--env <env>","Environment scope").action(async(o,e,i)=>{if(!i.yes)throw new k("Pass --yes to confirm plan deletion.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});let a=r(),s=await R(a,o);await a.deletePlan(s,e,{env:i.env}),z(t,`Plan ${e} deleted`,{ok:!0,productId:s,deleted:e})})}function Fg(t,r){let n=t.command("persona").description("Mint and manage test-env personas (test API keys)");n.command("bootstrap <productIdOrName>").description("Issue a fresh fsk_test_ API key in a test environment").requiredOption("--env <env>","Environment name (must be test-strategy)").option("--plan <planKey>","Plan key to assign (e.g. starter)").option("--display-name <name>","Persona display name").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await Pl(i,a,e.env),u=await i.issuePersonaBootstrapKey(a,s,{planKey:e.plan,displayName:e.displayName});z(t,"Persona bootstrapped",{ok:!0,productId:a,environmentId:s,result:u})}),n.command("list <productIdOrName>").description("List personas for a test environment").requiredOption("--env <env>","Environment name").action(async(o,e)=>{let i=r(),a=await R(i,o),s=await Pl(i,a,e.env),u=await i.listPersonas(a,s);z(t,"Personas",{ok:!0,productId:a,environmentId:s,result:u})}),n.command("revoke <productIdOrName> <personaId>").description("Revoke a persona's API key").requiredOption("--env <env>","Environment name").action(async(o,e,i)=>{let a=r(),s=await R(a,o),u=await Pl(a,s,i.env),l=await a.revokePersona(s,u,e);z(t,`Persona ${e} revoked`,{ok:!0,productId:s,environmentId:u,result:l})})}async function Pl(t,r,n){try{return await Br(t,r,n)}catch(o){throw new k(o instanceof Error?o.message:`Environment "${n}" not found on product ${r}.`,void 0,{code:"ENV_NOT_FOUND"})}}function Mg(t,r){t.command("usage").description("Usage observability for a product").command("summary <productIdOrName>").description("Show usage summary for the last 30 days").action(async o=>{let e=r(),i=await R(e,o),a=await e.managementGetUsage(i);z(t,"Usage summary",{ok:!0,productId:i,summary:a})})}function Vg(t,r){let n=t.command("connect").description("Connection status for GitHub and Stripe (browser-only flows)");n.command("github").description("Print GitHub-connection status").action(async()=>{let e=await r().builderGitHubStatus();z(t,"GitHub status",{ok:!0,status:e})}),n.command("stripe <productIdOrName>").description("Print Stripe Connect status for a product").action(async o=>{let e=r(),i=await R(e,o),a=await e.productStripeStatus(i);z(t,"Stripe status",{ok:!0,productId:i,status:a})})}function o$(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.tokens)?r.tokens:Array.isArray(t)?t:[]}function Bg(t,r){let n=t.command("token").description("Maker-token management (list, create, revoke)");n.command("list").description("List maker tokens in the current org").action(async()=>{let o=r(),e=o$(await o.managementListMakerTokens());z(t,`${e.length} token(s)`,{ok:!0,count:e.length,tokens:e.map(i=>({id:i.id,name:i.name??null,scopes:i.scopes??[],productId:i.productId??null,lastFour:i.lastFour??null,createdAt:i.createdAt??null,revokedAt:i.revokedAt??null}))})}),n.command("create").description("Create a new maker token (returns the secret once)").requiredOption("--name <name>","Human-friendly token name").option("--scope <scope...>","Scope(s) to attach (e.g. products:update products:publish)").option("--product <productId>","Scope to a specific product").action(async o=>{let i=await r().managementCreateMakerToken({name:o.name,scopes:o.scope,productId:o.product});z(t,"Token created",{ok:!0,result:i})}),n.command("revoke <tokenId>").description("Revoke a maker token. Requires --yes.").option("--yes","Skip confirmation; required for revoke").action(async(o,e)=>{if(!e.yes)throw new k("Pass --yes to confirm token revocation.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});await r().managementRevokeMakerToken(o),z(t,`Token ${o} revoked`,{ok:!0,revoked:o})})}function a$(t){if(!t||typeof t!="object")return[];let r=t;return Array.isArray(r.data)?r.data:Array.isArray(r.tokens)?r.tokens:Array.isArray(t)?t:[]}async function s$(t,r,n){if(!n)return null;try{return await Br(t,r,n)}catch(o){throw new k(o instanceof Error?o.message:`Environment "${n}" not found on product ${r}.`,void 0,{code:"ENV_NOT_FOUND"})}}function Gg(t,r){let o=(t.commands.find(e=>e.name()==="metering")??t.command("metering").description("Runtime metering management")).command("tokens").description("Runtime metering token management");o.command("list <productId>").description("List runtime metering tokens for a product").action(async e=>{let i=r(),a=a$(await i.managementListMeteringTokens(e));z(t,`${a.length} metering token(s)`,{ok:!0,count:a.length,tokens:a})}),o.command("create <productId>").description("Create a runtime metering token (returns FARTHERSHORE_METERING_TOKEN once)").requiredOption("--name <name>","Human-friendly token name").option("--env <environment>","Scope token to an environment name or id").option("--environment <environment>","Alias for --env").action(async(e,i)=>{let a=r(),s=i.env??i.environment,u=await s$(a,e,s),l=await a.managementCreateMeteringToken(e,{name:i.name,environmentId:u});z(t,"Metering token created",{ok:!0,envVar:"FARTHERSHORE_METERING_TOKEN",result:l})}),o.command("revoke <productId> <tokenId>").description("Revoke a runtime metering token. Requires --yes.").option("--yes","Skip confirmation; required for revoke").action(async(e,i,a)=>{if(!a.yes)throw new k("Pass --yes to confirm metering token revocation.",void 0,{code:"DESTRUCTIVE_OP_REQUIRES_YES"});await r().managementRevokeMeteringToken(e,i),z(t,`Metering token ${i} revoked`,{ok:!0,productId:e,revoked:i})})}import{existsSync as Wg,mkdirSync as c$,writeFileSync as u$}from"node:fs";import{basename as l$,dirname as Tl,join as d$,resolve as m$}from"node:path";import{createInterface as p$}from"node:readline/promises";import{stdin as Hg,stdout as Jg}from"node:process";var Zi="product/product.config.ts",f$="^0.5.0",g$="^0.1.16";function jl(t){let r=new Set;for(let a of t.pricing.meters??[])typeof a.dimension=="string"&&r.add(a.dimension);let n=new Set,o={key:t.kind,name:t.label.split(" \u2014 ")[0]??t.label,description:t.description,...t.pricing};t.kind==="free"&&(o.free=!0,o.limits=[{dimension:"requests",window:{type:"named",name:"month"},capacity:1e3,enforcement:"enforce"}],n.add("requests"));let e={product:{name:"my-product",displayName:"My Product",baseUrl:"https://app.example.com"},gateway:{},plans:[o]},i=new Set([...r,...n]);return i.size>0&&(e.metering={meters:[...i].map(a=>({key:a,display:Kg(a)}))}),e}function h$(t){if(!t)throw new k(`--template is required. Choose one of: ${pe.join(", ")}.`,void 0,{code:"INIT_TEMPLATE_REQUIRED"});let r=t.toLowerCase();if(!pe.includes(r))throw new k(`Unknown template "${t}". Choose one of: ${pe.join(", ")}.`,void 0,{code:"INIT_TEMPLATE_UNKNOWN"});return r}function qg(t){let r=jl(t);return`import { fs } from "@farthershore/product";
103
103
  import { configureFeatures } from "./features.js";
104
104
  import { configureMeters } from "./meters.js";
105
105
  import { configurePlans } from "./plans.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farthershore/cli",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "FartherShore CLI — create and configure software products",
5
5
  "type": "module",
6
6
  "bin": {