@turbobase/cli 1.19.0 → 1.20.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.
|
@@ -2695,8 +2695,11 @@ Three ways to actually read rows:
|
|
|
2695
2695
|
**\`mcp:data\`** permission as a bearer at that same data-MCP endpoint. Reads run
|
|
2696
2696
|
as the administrator who minted it, under that person's row-level permissions.
|
|
2697
2697
|
It is never granted by default \u2014 an administrator ticks it deliberately when
|
|
2698
|
-
minting \u2014 and a token carrying
|
|
2699
|
-
write setting says.
|
|
2698
|
+
minting \u2014 and a token carrying THAT PERMISSION ALONE cannot change anything,
|
|
2699
|
+
whatever the instance's MCP write setting says. Changing data over the same
|
|
2700
|
+
endpoint takes a second permission, **\`mcp:write\`**, which an administrator
|
|
2701
|
+
ticks alongside the read one and never instead of it, AND the instance's MCP
|
|
2702
|
+
write setting on. Ask for one when there is nobody to complete a sign-in, or
|
|
2700
2703
|
when a session expiring mid-job would strand the work.
|
|
2701
2704
|
|
|
2702
2705
|
**\`permission denied for table <x>\` usually means NOT SIGNED IN.** With no
|
|
@@ -3710,7 +3713,7 @@ ${o.map(W0).join(`
|
|
|
3710
3713
|
`))}async function Nb(t,e,r=bo){let n=[...new Set(t.map(a=>a.trim()).filter(Boolean))];n.length===0&&k("name at least one skill slug. `turbobase skills list` shows them.");let o=await wo(e,r);if(!await fa(`Publish ${n.length} skill(s)?`,"Yes \u2014 publish them","their text is injected into every matching turn from now on",e))return;let i;try{i=await ae("publishing",()=>o.skillsPublish(n))}catch(a){se(a,"skills:publish","publish a skill"),k(`publish failed: ${a instanceof Error?a.message:String(a)}`)}v(g.green(`published ${i.published.length} skill(s) \u2014 live now.`)),i.unknown.length>0&&(q(g.yellow(`no such skill: ${i.unknown.join(", ")}`)),process.exitCode=1),q(g.dim(`release v${i.version.version_no} \xB7 undo with: turbobase skills unpublish ${i.published.join(" ")}`))}async function zb(t,e,r=bo){let n=[...new Set(t.map(a=>a.trim()).filter(Boolean))];n.length===0&&k("name at least one skill slug. `turbobase skills list` shows them.");let o=await wo(e,r);if(!await fa(`Move ${n.length} skill(s) back to draft?`,"Yes \u2014 unpublish them","they stop being injected immediately; the text and its history are kept",e))return;let i;try{i=await ae("unpublishing",()=>o.skillsUnpublish(n))}catch(a){se(a,"skills:publish","unpublish a skill"),k(`unpublish failed: ${a instanceof Error?a.message:String(a)}`)}v(g.green(`unpublished ${i.unpublished.length} skill(s) \u2014 retracted now.`)),q(g.dim(`release v${i.version.version_no} \xB7 re-publish with: turbobase skills publish ${i.unpublished.join(" ")}`)),i.unknown.length>0&&(q(g.yellow(`no such skill: ${i.unknown.join(", ")}`)),process.exitCode=1)}async function jb(t,e,r=bo){let n=Number(t);(!Number.isInteger(n)||n<1)&&k(`--version must be a release number (got '${t}'). \`turbobase skills releases\` lists them.`);let o=await wo(e,r);if(await fa(`Roll the skills back to release v${n}?`,"Yes \u2014 restore that release","content only: a skill an operator has since unpublished stays off",e))try{let i=await ae("rolling back",()=>o.skillsRollback(n));v(g.green(`rolled back to v${i.version.version_no}.`))}catch(i){se(i,"skills:publish","roll back a skills release"),k(`rollback failed: ${i instanceof Error?i.message:String(i)}`)}}async function Lb(t,e=bo){let r=await wo(t,e),n;try{n=await ae("reading the releases",()=>r.skillsReleases())}catch(o){se(o,"skills:publish","read the skills releases"),k(`could not read the releases: ${o instanceof Error?o.message:String(o)}`)}if(n.items.length===0){q("no releases yet.");return}for(let o of n.items){let s=o.is_current?g.green("*"):" ",i=o.release_note?` \u2014 ${o.release_note}`:"";v(`${s} v${o.version_no} ${o.skill_count} skill(s) ${g.dim(o.published_at)}${o.published_by?g.dim(` by ${o.published_by}`):""}${g.dim(i)}`)}}async function Db(t,e,r=bo){let n=[...new Set((t??[]).map(l=>l.trim()).filter(Boolean))];n.length===0&&k("name at least one skill to delete. `turbobase skills list` shows the slugs.");let o=await wo(e,r);if(!await fa(n.length===1?`Delete the skill '${n[0]}'?`:`Delete ${n.length} skills?
|
|
3711
3714
|
${n.join(`
|
|
3712
3715
|
`)}`,"Yes \u2014 delete them","permanent: the rows and their text are removed. Prior releases keep their own copy.",e))return;let i=[],a=[];for(let l of n)try{i.push(await ae(`deleting ${l}`,()=>o.skillsDelete(l)))}catch(u){if(u instanceof le&&u.status===404){a.push(l);continue}i.length>0&&q(g.dim(`deleted before the error: ${i.map(p=>p.slug).join(", ")}`)),se(u,"skills:publish","delete a skill"),k(`delete failed on '${l}': ${u instanceof Error?u.message:String(u)}`)}i.length>0&&v(g.green(`deleted ${i.length} skill(s).`));let c=i.filter(l=>l.wasPublished).map(l=>l.slug);c.length>0&&q(g.yellow(`Published until now, so no longer injected: ${c.join(", ")}`)),a.length>0&&(q(g.yellow(`no such skill: ${a.join(", ")}`)),process.exitCode=1)}import{promises as Mb}from"node:fs";import{join as vP,relative as _P,resolve as xP,sep as kP}from"node:path";var $P=new Set(["node_modules","dist","build","coverage",".git",".claude",".turbobase",".next",".svelte-kit",".vercel",".cache"]),SP=new Set([".mcp.json",".env"]);function TP(t){return SP.has(t)||t.startsWith(".env.")&&t!==".env.example"}function EP(t){return Buffer.compare(Buffer.from(t.toString("utf8"),"utf8"),t)===0}function RP(t){return t.includes(0)}async function Ub(t){let e=xP(t),r={},n=[],o=[],s=[];async function i(a){let c=await Mb.readdir(a,{withFileTypes:!0});for(let l of c){let u=vP(a,l.name);if($P.has(l.name))continue;if(l.isDirectory()){await i(u);continue}if(!l.isFile())continue;let p=_P(e,u).split(kP).join("/");if(TP(l.name)){o.push(p);continue}let w=await Mb.readFile(u);if(!EP(w)){n.push(p);continue}RP(w)&&s.push(p),r[p]=w.toString("utf8")}}return await i(e),{files:r,skipped:n,secrets:o,unstorable:s}}import{randomBytes as PP}from"node:crypto";var AP="/_tb/app-assets",IP=16,OP=/^[0-9a-f]{32}$/;function qb(){return PP(IP).toString("hex")}function CP(t){return OP.test(t)}function Bb(t){if(!CP(t))throw new Error(`not a build id: ${t}`);return`${AP}/${t}/`}var Zb=7;Su();var Tu=50*1024*1024;import ma from"node:fs/promises";import gs from"node:path";var Eu={esbuild:"0.28.1","isolated-vm":"6.1.2"},Ru="@turbobase/isolated-vm-prebuilds";function Pu(t,e){return`${t}-${e}`}function Au(t=process.versions){return`abi${t.modules}`}var Fb=["darwin-x64","win32-arm64"];async function Hb(t){let e=t.platform??process.platform,r=t.arch??process.arch,n=Pu(e,r),o=gs.join(t.home,"node_modules"),s=gs.join(o,...Ru.split("/"),"prebuilds",n),i=gs.join(o,"isolated-vm","prebuilds",n),a;try{a=await ma.readdir(s)}catch{return[]}let c=[];await ma.mkdir(i,{recursive:!0});for(let l of a){if(!l.endsWith(".node"))continue;let u=gs.join(i,l);try{await ma.copyFile(gs.join(s,l),u,ma.constants?.COPYFILE_EXCL??1),c.push(l)}catch{}}return c}import{homedir as NP}from"node:os";import{join as Vb}from"node:path";import{promises as Iu}from"node:fs";function Wb(){let t=process.env.TURBOBASE_HOME??Vb(NP(),".turbobase");return{dir:t,file:Vb(t,"sandboxes.json")}}var zP={s:1e3,m:6e4,h:36e5,d:864e5};function jP(t){let e=/^\s*(\d+)\s*([smhd])\s*$/.exec(t);if(!e)throw new Error(`invalid --ttl '${t}': expected <number><unit> where unit is s|m|h|d (e.g. 72h, 30m, 7d).`);let r=Number(e[1]);if(!Number.isFinite(r)||r<=0)throw new Error(`invalid --ttl '${t}': duration must be a positive integer.`);return r*zP[e[2]]}function LP(t,e=Date.now()){return new Date(e+jP(t)).toISOString()}function DP(t,e=Date.now()){let r=Date.parse(t);return Number.isNaN(r)?!0:r<=e}function MP(t){let e=/^\s*(\d+(?:\.\d+)?)\s*%?\s*$/.exec(t);if(!e)throw new Error(`invalid --sample '${t}': expected a percent like 2% (or a bare number).`);let r=Number(e[1]);if(!Number.isFinite(r)||r<0||r>100)throw new Error(`invalid --sample '${t}': percent must be between 0 and 100.`);return r/100}function UP(t,e){if(e>=1)return[...t];if(e<=0||t.length===0)return[];let r=Math.max(1,Math.round(1/e)),n=[];for(let o=0;o<t.length;o+=r)n.push(t[o]);return n}var qP="[REDACTED]",ys=class extends Error{constructor(e){super(e),this.name="SandboxDataCopyUnavailableError"}},Ou=class extends Error{table;column;constructor(e,r,n){super(`Refusing to copy ${e}.${r} into a sandbox: ${n}. A sandbox must never hold un-redacted PII \u2014 classify the column 'safe' (non-PII) or let redaction mask it, then retry.`),this.name="UnredactedPiiError",this.table=e,this.column=r}};function BP(t,e,r){let n={};for(let[o,s]of Object.entries(e)){let i=r[o];if(i===void 0)throw new Ou(t,o,"column has no PII classification (unknown = unsafe)");i==="pii"?n[o]=s==null?s:qP:n[o]=s}return n}function ZP(t,e,r){return e.map(n=>BP(t,n,r))}var Kb=new Set(["localhost","127.0.0.1","::1","0.0.0.0"]),FP=["oraclecloud.com","us-ashburn-1","amazonaws.com","rds.","supabase.co","turbobase.app","turbobase.io"];function HP(t){let e=t.trim();try{let o=new URL(e);if(o.hostname)return o.hostname.toLowerCase()}catch{}let r=e.replace(/^[a-z]+:\/\//i,""),n=(r.split("/")[0]??r).split("@").pop()??r;return(n.split(":")[0]??n).toLowerCase()}function Cu(t){if(!t||!t.trim())throw new Error("local-only guard: empty database target \u2014 refusing to proceed.");let e=t.toLowerCase();for(let n of FP)if(e.includes(n))throw new Error(`local-only guard: target '${t}' looks like a cloud/prod context (matched '${n}'). \`turbobase sandbox create\` is LOCAL-ONLY and will never touch a cloud database.`);let r=HP(t);if(!Kb.has(r))throw new Error(`local-only guard: target host '${r}' is not a recognised local Postgres (${[...Kb].join(", ")}). \`turbobase sandbox create\` is LOCAL-ONLY.`)}function VP(t,e=KP){return`sbx-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24)||"tenant"}-${e()}`}function KP(){return Math.floor(Math.random()*16777215).toString(16).padStart(6,"0")}function WP(t){return`turbobase_${t.replace(/[^a-z0-9]+/gi,"_").toLowerCase()}`}function GP(t,e){return`${(e??process.env.TURBOBASE_SANDBOX_BASE_URL??"http://localhost:5173").replace(/\/+$/,"")}/?sandbox=${encodeURIComponent(t)}`}async function Nu(){let{file:t}=Wb();try{let e=await Iu.readFile(t,"utf8"),r=JSON.parse(e);return Array.isArray(r)?r:[]}catch(e){if(e.code==="ENOENT")return[];throw e}}async function Gb(t){let{dir:e,file:r}=Wb();await Iu.mkdir(e,{recursive:!0}),await Iu.writeFile(r,`${JSON.stringify(t,null,2)}
|
|
3713
|
-
`,{mode:384})}async function JP(t){let e=await Nu();e.push(t),await Gb(e)}async function Jb(t){let e=await Nu(),r=e.findIndex(o=>o.name===t);if(r===-1)return null;let[n]=e.splice(r,1);return await Gb(e),n??null}async function ga(){return Nu()}function zu(t,e=Date.now()){let r=[],n=[];for(let o of t)DP(o.expiresAt,e)?n.push(o):r.push(o);return{active:r,expired:n}}async function Yb(t,e){Cu(t.target());let r=t.dataCopyUnavailable?.();if(r)throw new ys(r);let n=MP(e.sample),o=e.now??Date.now(),s=(e.nameGen??(l=>VP(l)))(e.fromTenant),i=WP(s);await t.createDatabase(i),await t.replayMigrations(i);let a=await t.readSourceTables(e.fromTenant);for(let l of a){let u=UP(l.rows,n),p=ZP(l.table,u,l.classification);p.length>0&&await t.copyRows(i,l.table,p)}let c={name:s,fromTenant:e.fromTenant,database:i,createdAt:new Date(o).toISOString(),expiresAt:LP(e.ttl,o),sampleFraction:n,url:GP(s,e.baseUrl)};return await JP(c),c}async function Xb(t,e){Cu(t.target());let n=(await ga()).find(o=>o.name===e);return n?(await t.dropDatabase(n.database),await Jb(e),n):null}async function ju(t,e=Date.now()){Cu(t.target());let r=await ga(),{expired:n}=zu(r,e),o=[];for(let s of n){try{await t.dropDatabase(s.database)}catch{continue}await Jb(s.name),o.push(s)}return o}var bs={pat:{prefix:"tb_pat_",defaultScopes:["extensions:deploy"],allowedScopes:["extensions:deploy","catalog:read","mcp:authoring","analyzer:run","releases:write","solutions:write","skills:publish","docs:publish","mcp:data"],defaultTtlDays:90,mintable:!0,label:"Personal access token"},catalog:{prefix:"tb_cat_",defaultScopes:["catalog:read"],allowedScopes:["catalog:read"],defaultTtlDays:null,mintable:!0,label:"AI / catalog token"}},LZ=Object.keys(bs).filter(t=>bs[t].mintable);var UZ=bs.pat.prefix,YP=Object.entries(bs).map(([t,e])=>[e.prefix,t]),XP=/^[A-Za-z0-9_-]{20,}$/;function QP(t){if(typeof t!="string")return null;for(let[e,r]of YP)if(t.startsWith(e)&&XP.test(t.slice(e.length)))return r;return null}function Qb(t){return QP(t)==="pat"}ss();var eA=8e3,tA={revoked:"the instance REVOKED this token \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",expired:"this token has EXPIRED \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",unknown:"this instance has never seen this token \u2014 it was deleted, or it belongs to a DIFFERENT instance; check the base-url before minting a new PAT",suspended:"the user this token belongs to is SUSPENDED \u2014 an instance administrator has to restore the account; a new token will not help",malformed:"the stored credential is not shaped like a Turbobase PAT (tb_pat_\u2026) \u2014 sign in again",missing:"no token reached the instance \u2014 sign in again",transient:"the instance could not verify the token right now (a storage error, not a decision about the token) \u2014 retry"};function rA(t){return tA[t]??`the instance rejected this token (${t}) \u2014 run \`turbobase auth login\` to store a fresh PAT`}async function nA(t,e,r=fetch){let n;try{n=await r(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(eA)})}catch(s){return{state:"unreachable",detail:s instanceof Error?s.message:String(s)}}if(n.status===200||n.status===403)return{state:"accepted"};if(n.status===401){let s=await n.json().catch(()=>null);return{state:"rejected",reason:typeof s?.reason=="string"&&s.reason?s.reason:"unknown"}}return(n.headers.get("content-type")??"").includes("application/json")?{state:"accepted"}:{state:"unreachable",detail:`HTTP ${n.status} \u2014 this host does not serve the /v1 API`}}function ew(t){return t.state==="accepted"?tt()?g.green("accepted"):"accepted":t.state==="rejected"?tt()?g.red(`rejected \xB7 ${t.reason}`):`rejected \xB7 ${t.reason}`:tt()?g.yellow("unreachable"):"unreachable"}async function tw(t={},e=fetch){let r=await Rr(),{file:n}=Fi();if(r.length===0){v("not signed in. Run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),q(g.dim(`no sign-ins stored in ${n}.`));return}let o=await Xt(),s=await Promise.all(r.map(async i=>({baseUrl:i.baseUrl,active:!!o&&i.baseUrl===o.baseUrl,updatedAt:i.updatedAt,check:t.probe===!1?{state:"accepted"}:await nA(i.baseUrl,i.token,e)})));if(t.probe===!1)for(let i of s)v(`${i.active?"* ":" "}${i.baseUrl} (updated ${i.updatedAt})`);else if(tt())v(Qt(s.map(i=>[i.active?g.green("*"):" ",g.bold(i.baseUrl),ew(i.check),g.dim(i.updatedAt)]),{head:["","instance","token","updated"]}));else for(let i of s)v(`${i.active?"* ":" "}${i.baseUrl} ${ew(i.check)} (updated ${i.updatedAt})`);q(g.dim(`tokens read from ${n}`));for(let i of s)i.check.state==="rejected"?(q(g.red(`${i.baseUrl}: ${rA(i.check.reason)}.`)),q(g.dim(" then re-run `turbobase project init` \u2014 .mcp.json holds its own copy of the token, and until it is rewritten the authoring MCP tools stay absent from your session."))):i.check.state==="unreachable"&&q(g.yellow(`${i.baseUrl}: could not reach the instance (${i.check.detail}).`));o||q("no active default \u2014 run `turbobase auth use <base-url>` or pass --base-url.")}async function OM(t){let e=await Rr();e.length===0&&k("no stored sign-ins \u2014 run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),ft()||k("this command needs an explicit <base-url> in a non-interactive shell.");try{return await mt(t,e.map(r=>({value:r.baseUrl,label:r.baseUrl,description:`updated ${r.updatedAt}`})))}catch{k("cancelled.")}}async function CM(t,e){let r;try{r=await fetch(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(o){return{ok:!1,kind:"unreachable",detail:o instanceof Error?o.message:String(o)}}let n=(r.headers.get("content-type")??"").includes("application/json");return r.status===200||r.status===403?{ok:!0}:r.status===401?{ok:!1,kind:"bad-token",detail:`HTTP ${r.status}`}:n?{ok:!0}:{ok:!1,kind:"wrong-host",detail:`HTTP ${r.status}`}}function NM(t){q(""),q("Sharing is ON. Two things reach the Turbobase product team from this instance:"),q(" \xB7 anonymized pattern cards from your proposals, solutions and INSTANCE-LEARNINGS.md \u2014"),q(" a pattern label, a record class, a fix shape, an outcome. No scripts, values or ids."),q(" \xB7 redacted prose from your projects\u2019 TURBOBASE-FEEDBACK.md \u2014 the findings you write"),q(" about OUR platform, with instance name, user names and ids masked before they leave."),q(`Turn it off: ${t}/admin/settings \u2192 Telemetry \u2192 "Share learnings and platform feedback".`),q("")}async function zM(t,e,r){let n=await sy({baseUrl:t,token:e}),o=(await Rr()).length-1;if(v(`signed in to ${n.baseUrl} \u2014 now the active instance`+(o>0?` (${o} other${o===1?"":"s"} stored; commands default here).`:".")),NM(n.baseUrl),!r)return;let s=await CM(n.baseUrl,e);s.ok||(s.kind==="wrong-host"?(q(`warning: ${n.baseUrl} did not respond to the Turbobase API (/v1) \u2014 got ${s.detail}.`),q(" In local dev the Turbobase API is on :4100, not the app dev-server port (e.g. :5173)."),q(" The token is stored, but commands will fail against this base-url until it points at the API.")):s.kind==="bad-token"?q(`warning: ${n.baseUrl} rejected the token (401) \u2014 the PAT may be stale, revoked, or for a different instance.`):q(`warning: could not reach ${n.baseUrl} to verify the token (${s.detail}). Stored anyway.`))}async function jM(t){let e=await ou(await ls(t),Lr(t)),r=yu(e);if(!r){let n=/\bdefineConduit\s*[<(]/.test(e);k(n?`could not parse id/on/from.source/from.recordType from ${t} \u2014 is it a defineConduit({...}) file?`:`could not parse id/recordType/event from ${t} \u2014 is it a defineHook({...}) file?`)}return{...r,sourceCode:e}}async function Xn(t,e,r,n){try{return await be.access(t),"skipped"}catch{}return await be.mkdir(Lr(t),{recursive:!0}),await be.writeFile(t,e,{mode:n??(r?493:420)}),n!==void 0&&await be.chmod(t,n),"wrote"}async function QS(t,e){if(tT(t)!==".gitignore")return Xn(t,e.content,e.executable,e.mode);let r=await be.readFile(t,"utf8").catch(()=>null);if(r===null)return Xn(t,e.content,e.executable,e.mode);let n=Ky(r);return n===null?"skipped":(await be.writeFile(t,n,"utf8"),"merged")}function Xm(t){if(t!==void 0){if(t==="junit"||t==="json")return t;k(`unknown --reporter '${t}' (expected 'junit' or 'json').`)}}function ul(t){process.exit(t)}function LM(t){return{name:"turbobase ext test",cases:t.map(r=>{if(r.pass)return{name:r.name,status:"passed"};let n=r.error?"error":r.rejection?.code??"mismatch",o=r.error?`error: ${r.error}`:r.observed!==r.expected?`expected ${r.expected}, observed ${r.observed}`+(r.rejection?` (rejected: ${r.rejection.code??"rejected"}${r.rejection.message?` \u2014 ${r.rejection.message}`:""})`:""):`rejected: ${r.rejection?.code??"rejected"}${r.rejection?.message?` \u2014 ${r.rejection.message}`:""}`;return{name:r.name,status:"failed",detail:o,type:n}})}}function DM(t,e){let r=e.warnings.length===0?[{name:`${t} (${e.kind})`,status:"passed"}]:e.warnings.map(n=>({name:`${t}: ${n.rule}`,status:"failed",type:n.rule,detail:`${n.message} \u2192 fix: ${n.fix}`}));return{name:`turbobase ext lint ${t}`,cases:r}}function MM(t){let e=[];if(t.error)return e.push({name:`replay ${t.fixtureName}`,status:"failed",type:"error",detail:t.error}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e};for(let r of t.guards)e.push(r.status==="failed"?{name:`guard: ${r.name}`,status:"failed",type:r.name,detail:r.detail}:{name:`guard: ${r.name}`,status:"passed",detail:r.status==="skipped-offline"?`skipped-offline: ${r.detail}`:void 0});return t.whenPassed&&t.applyBranch&&e.push({name:`apply-branch: ${t.applyBranch}`,status:"passed",detail:`${t.masterAction??""} (${t.wouldWriteBindings.length} binding(s) would be written)`.trim()}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e}}function eT(t){return`${(Math.ceil(t/1048576*10)/10).toFixed(1).replace(/\.0$/,"")} MiB`}function og({includeInternal:t=!0}={}){let e=new kg;e.name("turbobase").description("Build apps, author extensions, and drive your Turbobase instance.").version("1.19.0").option("--no-color","Disable ANSI colour + animations (also honoured via NO_COLOR / non-TTY)."),e.addHelpText("beforeAll",d=>d.command.parent?"":`${du()}
|
|
3716
|
+
`,{mode:384})}async function JP(t){let e=await Nu();e.push(t),await Gb(e)}async function Jb(t){let e=await Nu(),r=e.findIndex(o=>o.name===t);if(r===-1)return null;let[n]=e.splice(r,1);return await Gb(e),n??null}async function ga(){return Nu()}function zu(t,e=Date.now()){let r=[],n=[];for(let o of t)DP(o.expiresAt,e)?n.push(o):r.push(o);return{active:r,expired:n}}async function Yb(t,e){Cu(t.target());let r=t.dataCopyUnavailable?.();if(r)throw new ys(r);let n=MP(e.sample),o=e.now??Date.now(),s=(e.nameGen??(l=>VP(l)))(e.fromTenant),i=WP(s);await t.createDatabase(i),await t.replayMigrations(i);let a=await t.readSourceTables(e.fromTenant);for(let l of a){let u=UP(l.rows,n),p=ZP(l.table,u,l.classification);p.length>0&&await t.copyRows(i,l.table,p)}let c={name:s,fromTenant:e.fromTenant,database:i,createdAt:new Date(o).toISOString(),expiresAt:LP(e.ttl,o),sampleFraction:n,url:GP(s,e.baseUrl)};return await JP(c),c}async function Xb(t,e){Cu(t.target());let n=(await ga()).find(o=>o.name===e);return n?(await t.dropDatabase(n.database),await Jb(e),n):null}async function ju(t,e=Date.now()){Cu(t.target());let r=await ga(),{expired:n}=zu(r,e),o=[];for(let s of n){try{await t.dropDatabase(s.database)}catch{continue}await Jb(s.name),o.push(s)}return o}var bs={pat:{prefix:"tb_pat_",defaultScopes:["extensions:deploy"],allowedScopes:["extensions:deploy","catalog:read","mcp:authoring","analyzer:run","releases:write","solutions:write","skills:publish","docs:publish","mcp:data","mcp:write"],defaultTtlDays:90,mintable:!0,label:"Personal access token"},catalog:{prefix:"tb_cat_",defaultScopes:["catalog:read"],allowedScopes:["catalog:read"],defaultTtlDays:null,mintable:!0,label:"AI / catalog token"}},LZ=Object.keys(bs).filter(t=>bs[t].mintable);var UZ=bs.pat.prefix,YP=Object.entries(bs).map(([t,e])=>[e.prefix,t]),XP=/^[A-Za-z0-9_-]{20,}$/;function QP(t){if(typeof t!="string")return null;for(let[e,r]of YP)if(t.startsWith(e)&&XP.test(t.slice(e.length)))return r;return null}function Qb(t){return QP(t)==="pat"}ss();var eA=8e3,tA={revoked:"the instance REVOKED this token \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",expired:"this token has EXPIRED \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",unknown:"this instance has never seen this token \u2014 it was deleted, or it belongs to a DIFFERENT instance; check the base-url before minting a new PAT",suspended:"the user this token belongs to is SUSPENDED \u2014 an instance administrator has to restore the account; a new token will not help",malformed:"the stored credential is not shaped like a Turbobase PAT (tb_pat_\u2026) \u2014 sign in again",missing:"no token reached the instance \u2014 sign in again",transient:"the instance could not verify the token right now (a storage error, not a decision about the token) \u2014 retry"};function rA(t){return tA[t]??`the instance rejected this token (${t}) \u2014 run \`turbobase auth login\` to store a fresh PAT`}async function nA(t,e,r=fetch){let n;try{n=await r(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(eA)})}catch(s){return{state:"unreachable",detail:s instanceof Error?s.message:String(s)}}if(n.status===200||n.status===403)return{state:"accepted"};if(n.status===401){let s=await n.json().catch(()=>null);return{state:"rejected",reason:typeof s?.reason=="string"&&s.reason?s.reason:"unknown"}}return(n.headers.get("content-type")??"").includes("application/json")?{state:"accepted"}:{state:"unreachable",detail:`HTTP ${n.status} \u2014 this host does not serve the /v1 API`}}function ew(t){return t.state==="accepted"?tt()?g.green("accepted"):"accepted":t.state==="rejected"?tt()?g.red(`rejected \xB7 ${t.reason}`):`rejected \xB7 ${t.reason}`:tt()?g.yellow("unreachable"):"unreachable"}async function tw(t={},e=fetch){let r=await Rr(),{file:n}=Fi();if(r.length===0){v("not signed in. Run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),q(g.dim(`no sign-ins stored in ${n}.`));return}let o=await Xt(),s=await Promise.all(r.map(async i=>({baseUrl:i.baseUrl,active:!!o&&i.baseUrl===o.baseUrl,updatedAt:i.updatedAt,check:t.probe===!1?{state:"accepted"}:await nA(i.baseUrl,i.token,e)})));if(t.probe===!1)for(let i of s)v(`${i.active?"* ":" "}${i.baseUrl} (updated ${i.updatedAt})`);else if(tt())v(Qt(s.map(i=>[i.active?g.green("*"):" ",g.bold(i.baseUrl),ew(i.check),g.dim(i.updatedAt)]),{head:["","instance","token","updated"]}));else for(let i of s)v(`${i.active?"* ":" "}${i.baseUrl} ${ew(i.check)} (updated ${i.updatedAt})`);q(g.dim(`tokens read from ${n}`));for(let i of s)i.check.state==="rejected"?(q(g.red(`${i.baseUrl}: ${rA(i.check.reason)}.`)),q(g.dim(" then re-run `turbobase project init` \u2014 .mcp.json holds its own copy of the token, and until it is rewritten the authoring MCP tools stay absent from your session."))):i.check.state==="unreachable"&&q(g.yellow(`${i.baseUrl}: could not reach the instance (${i.check.detail}).`));o||q("no active default \u2014 run `turbobase auth use <base-url>` or pass --base-url.")}async function OM(t){let e=await Rr();e.length===0&&k("no stored sign-ins \u2014 run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),ft()||k("this command needs an explicit <base-url> in a non-interactive shell.");try{return await mt(t,e.map(r=>({value:r.baseUrl,label:r.baseUrl,description:`updated ${r.updatedAt}`})))}catch{k("cancelled.")}}async function CM(t,e){let r;try{r=await fetch(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(o){return{ok:!1,kind:"unreachable",detail:o instanceof Error?o.message:String(o)}}let n=(r.headers.get("content-type")??"").includes("application/json");return r.status===200||r.status===403?{ok:!0}:r.status===401?{ok:!1,kind:"bad-token",detail:`HTTP ${r.status}`}:n?{ok:!0}:{ok:!1,kind:"wrong-host",detail:`HTTP ${r.status}`}}function NM(t){q(""),q("Sharing is ON. Two things reach the Turbobase product team from this instance:"),q(" \xB7 anonymized pattern cards from your proposals, solutions and INSTANCE-LEARNINGS.md \u2014"),q(" a pattern label, a record class, a fix shape, an outcome. No scripts, values or ids."),q(" \xB7 redacted prose from your projects\u2019 TURBOBASE-FEEDBACK.md \u2014 the findings you write"),q(" about OUR platform, with instance name, user names and ids masked before they leave."),q(`Turn it off: ${t}/admin/settings \u2192 Telemetry \u2192 "Share learnings and platform feedback".`),q("")}async function zM(t,e,r){let n=await sy({baseUrl:t,token:e}),o=(await Rr()).length-1;if(v(`signed in to ${n.baseUrl} \u2014 now the active instance`+(o>0?` (${o} other${o===1?"":"s"} stored; commands default here).`:".")),NM(n.baseUrl),!r)return;let s=await CM(n.baseUrl,e);s.ok||(s.kind==="wrong-host"?(q(`warning: ${n.baseUrl} did not respond to the Turbobase API (/v1) \u2014 got ${s.detail}.`),q(" In local dev the Turbobase API is on :4100, not the app dev-server port (e.g. :5173)."),q(" The token is stored, but commands will fail against this base-url until it points at the API.")):s.kind==="bad-token"?q(`warning: ${n.baseUrl} rejected the token (401) \u2014 the PAT may be stale, revoked, or for a different instance.`):q(`warning: could not reach ${n.baseUrl} to verify the token (${s.detail}). Stored anyway.`))}async function jM(t){let e=await ou(await ls(t),Lr(t)),r=yu(e);if(!r){let n=/\bdefineConduit\s*[<(]/.test(e);k(n?`could not parse id/on/from.source/from.recordType from ${t} \u2014 is it a defineConduit({...}) file?`:`could not parse id/recordType/event from ${t} \u2014 is it a defineHook({...}) file?`)}return{...r,sourceCode:e}}async function Xn(t,e,r,n){try{return await be.access(t),"skipped"}catch{}return await be.mkdir(Lr(t),{recursive:!0}),await be.writeFile(t,e,{mode:n??(r?493:420)}),n!==void 0&&await be.chmod(t,n),"wrote"}async function QS(t,e){if(tT(t)!==".gitignore")return Xn(t,e.content,e.executable,e.mode);let r=await be.readFile(t,"utf8").catch(()=>null);if(r===null)return Xn(t,e.content,e.executable,e.mode);let n=Ky(r);return n===null?"skipped":(await be.writeFile(t,n,"utf8"),"merged")}function Xm(t){if(t!==void 0){if(t==="junit"||t==="json")return t;k(`unknown --reporter '${t}' (expected 'junit' or 'json').`)}}function ul(t){process.exit(t)}function LM(t){return{name:"turbobase ext test",cases:t.map(r=>{if(r.pass)return{name:r.name,status:"passed"};let n=r.error?"error":r.rejection?.code??"mismatch",o=r.error?`error: ${r.error}`:r.observed!==r.expected?`expected ${r.expected}, observed ${r.observed}`+(r.rejection?` (rejected: ${r.rejection.code??"rejected"}${r.rejection.message?` \u2014 ${r.rejection.message}`:""})`:""):`rejected: ${r.rejection?.code??"rejected"}${r.rejection?.message?` \u2014 ${r.rejection.message}`:""}`;return{name:r.name,status:"failed",detail:o,type:n}})}}function DM(t,e){let r=e.warnings.length===0?[{name:`${t} (${e.kind})`,status:"passed"}]:e.warnings.map(n=>({name:`${t}: ${n.rule}`,status:"failed",type:n.rule,detail:`${n.message} \u2192 fix: ${n.fix}`}));return{name:`turbobase ext lint ${t}`,cases:r}}function MM(t){let e=[];if(t.error)return e.push({name:`replay ${t.fixtureName}`,status:"failed",type:"error",detail:t.error}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e};for(let r of t.guards)e.push(r.status==="failed"?{name:`guard: ${r.name}`,status:"failed",type:r.name,detail:r.detail}:{name:`guard: ${r.name}`,status:"passed",detail:r.status==="skipped-offline"?`skipped-offline: ${r.detail}`:void 0});return t.whenPassed&&t.applyBranch&&e.push({name:`apply-branch: ${t.applyBranch}`,status:"passed",detail:`${t.masterAction??""} (${t.wouldWriteBindings.length} binding(s) would be written)`.trim()}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e}}function eT(t){return`${(Math.ceil(t/1048576*10)/10).toFixed(1).replace(/\.0$/,"")} MiB`}function og({includeInternal:t=!0}={}){let e=new kg;e.name("turbobase").description("Build apps, author extensions, and drive your Turbobase instance.").version("1.20.0").option("--no-color","Disable ANSI colour + animations (also honoured via NO_COLOR / non-TTY)."),e.addHelpText("beforeAll",d=>d.command.parent?"":`${du()}
|
|
3714
3717
|
`),e.hook("preAction",(d,m)=>{ib(e.opts(),m.opts())});let r=e.command("auth").description("Sign in to an instance and manage stored credentials."),n=e.command("project").description("Set up the local project and the files an agent session reads."),o=e.command("ext").description("Author, test, ship, and observe extensions \u2014 hooks and conduits."),s=e.command("kb").description("Write into the instance's knowledge base."),i=e.command("skills").description("Write standing rules into the instance's agent skills.");r.command("login").description("Sign in to an instance by pasting a personal access token (PAT), stored in ~/.turbobase/credentials.").requiredOption("--base-url <url>","Instance base URL, e.g. https://acme.turbobase.app").option("--token <tb_pat_\u2026>","The PAT to store. Mint one in your app under Settings \u203A Access tokens.").option("--no-verify","Skip the post-login connectivity/token probe.").action(async d=>{let m=Dt(d.baseUrl);d.token||k(`auth login needs --token. Mint a PAT in your Turbobase app (Settings \u203A Access tokens), then:
|
|
3715
3718
|
${hs} auth login --base-url ${m} --token tb_pat_\u2026`),Qb(d.token)||k("--token does not look like a Turbobase PAT (tb_pat_\u2026)."),await zM(m,d.token,d.verify)}),r.command("status").description("Show every stored sign-in, where its token was read from, and whether the instance still accepts it.").option("--no-probe","List the stored sign-ins without asking each instance about its token.").action(async d=>tw({probe:d.probe})),r.command("use [base-url]").description("Make an already-stored instance the active default (omit the arg to pick interactively).").action(async d=>{let m=d??await OM("Pick the active instance:"),_=await Hi(m);if(!_){let T=await Rr();k(`no stored sign-in for ${Dt(m)}.`+(T.length?` Stored: ${T.map(x=>x.baseUrl).join(", ")}.`:"")+` Run \`turbobase auth login --base-url ${Dt(m)} --token tb_pat_\u2026\`.`)}v(`active instance \u2192 ${_.baseUrl}.`)}),r.command("logout").description("Remove a stored sign-in (defaults to the active instance).").option("--base-url <url>","Which instance to remove (defaults to the active/single one).").option("--all","Remove every stored sign-in.").action(async d=>{if(d.all){let T=await Rr();for(let x of T)await Xl(x.baseUrl);v(`removed ${T.length} stored sign-in${T.length===1?"":"s"}.`);return}let m=await Xl(d.baseUrl);m||k(d.baseUrl?`no stored sign-in for ${Dt(d.baseUrl)}.`:"nothing to sign out of (or ambiguous \u2014 pass --base-url / --all).");let _=await Xt();v(`signed out of ${m}.`+(_?` Active instance \u2192 ${_.baseUrl}.`:""))}),n.command("types").description("Generate types.ts from the signed-in instance's catalog.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("-o, --out <file>","Output file","types.ts").option("--records-only","Emit only record-shape interfaces (skip the OpenAPI half).").action(async d=>{let{baseUrl:m,token:_}=await ne(d.baseUrl),T;try{T=await In({baseUrl:m,token:_,recordsOnly:d.recordsOnly})}catch(y){let S=y instanceof Error?y.message:String(y);if(!d.recordsOnly&&/openapi\.json failed \(401/.test(S)){q("types-gen: /v1/catalog/openapi.json needs a browser session \u2014 emitting record shapes only. The record shapes are the half apps generate against; for the OpenAPI half, run it from a signed-in browser session.");try{T=await In({baseUrl:m,token:_,recordsOnly:!0})}catch(R){k(`types generation failed: ${R instanceof Error?R.message:String(R)}`)}}else k(`types generation failed: ${S}`)}let x=ge(process.cwd(),d.out);await be.writeFile(x,T,"utf8"),v(`wrote ${x} (${T.split(`
|
|
3716
3719
|
`).length} lines).`)}),lb(n),n.command("grounding").description("Write the instance's grounding brief (source primer + record anatomy + KB retrieval) to a file for agent sessions.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--records <list>","Comma-separated record types to focus, e.g. purchaseOrder,itemReceipt.").option("--query <text>","Retrieval question for the knowledge base (e.g. what the app is about).").option("-o, --out <file>","Output file","INSTANCE.md").action(async d=>{let{baseUrl:m,token:_}=await ne(d.baseUrl),T=new URLSearchParams;d.records&&T.set("records",d.records),d.query&&T.set("query",d.query);let x=T.toString(),y=await fetch(`${m}/v1/catalog/grounding${x?`?${x}`:""}`,{headers:{Authorization:`Bearer ${_}`,Accept:"application/json"}});y.ok||k(`grounding fetch failed: GET /v1/catalog/grounding \u2192 ${y.status}`);let R=((await y.json()).markdown??"").trim(),N=ge(process.cwd(),d.out),L=d.records?` records=${d.records}`:"",D=`<!-- GENERATED by \`turbobase project grounding\` against ${m}${L} \u2014 do not edit; re-run to refresh. -->
|
|
@@ -3740,7 +3743,7 @@ samples init: ${R} written, ${N} skipped.`)});let lr=e.command("guardrails").des
|
|
|
3740
3743
|
`+g.dim("create one with `turbobase guardrails create <name> --source <s> --record <r>`"));v(Qt(x.map($i),{head:pl})),v(g.dim(" first match wins; lower PRIO is evaluated first."))}),lr.command("create <name>").description("Create a rule gating PG\u2192source writes that match it.").option("--source <system>","Adapter id to scope to, or '*' for every source.","*").option("--record <type>","Record type to scope to, or '*' for every record.","*").option("--op <glob>","Raw op glob, when gating something other than a record write.").option("--target <glob>","Row address glob, e.g. 'salesOrder.12345'.").option("--actor <glob>","Only match this caller, e.g. 'agent:*' to gate AI writes but not human ones.").option("--decision <d>","allow | allow_with_audit | require_confirm | deny.","deny").option("--priority <n>","Lower is evaluated first (default 100).",d=>Number(d)).option("--when <expr>","Row predicate, e.g. 'total gt 10000'. Omit to match every row.").option("--reason <text>","Why this rule exists \u2014 shown to a blocked writer and in `list`.").option("--disabled","Create the rule parked, so it takes effect only when activated.").option("--confirm-freeze-all","Required for an unconditional deny across '*'/'*'.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T}),y;try{y=await x.guardrailCreate({name:d,source:m.source,record:m.record,decision:m.decision,...m.op?{op:m.op}:{},...m.target?{target:m.target}:{},...m.actor?{actor:m.actor}:{},...Number.isFinite(m.priority)?{priority:Number(m.priority)}:{},...m.when?{when:m.when}:{},...m.reason?{reason:m.reason}:{},...m.disabled?{enabled:!1}:{},...m.confirmFreezeAll?{confirmFreezeAll:!0}:{}})}catch(S){se(S,"extensions:deploy","create a guardrail"),k(`create guardrail failed: ${S instanceof Error?S.message:String(S)}`)}v(`${g.green("\u2713")} guardrail ${g.bold(y.name??y.id)} created${y.status==="active"?"":g.dim(` (${y.status} \u2014 activate it to take effect)`)}`),v(g.dim(` ${y.decision} ${y.source}/${y.record??y.op}${y.actor?` actor=${y.actor}`:""}${y.when?` where ${y.when}`:""} @prio ${y.priority}`)),v(g.dim(` verify with: turbobase guardrails test --source ${y.source==="*"?"<source>":y.source} --record <record>`))}),lr.command("edit <name>").description("Change a rule \u2014 its decision, priority, predicate or reason.").option("--decision <d>","allow | allow_with_audit | require_confirm | deny.").option("--priority <n>","Lower is evaluated first.",d=>Number(d)).option("--when <expr>","New row predicate. Pass '' to match every row.").option("--reason <text>","Why this rule exists.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{m.decision===void 0&&m.priority===void 0&&m.when===void 0&&m.reason===void 0&&k("edit: nothing to change \u2014 pass --decision, --priority, --when or --reason.");let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T}),y;try{y=await x.guardrailUpdate(d,{...m.decision!==void 0?{decision:m.decision}:{},...Number.isFinite(m.priority)?{priority:Number(m.priority)}:{},...m.when!==void 0?{when:m.when}:{},...m.reason!==void 0?{reason:m.reason}:{}})}catch(S){se(S,"extensions:deploy","edit a guardrail"),k(`edit guardrail failed: ${S instanceof Error?S.message:String(S)}`)}v(`${g.green("\u2713")} guardrail ${g.bold(y.name??y.id)} updated`),v(g.dim(` ${y.decision} ${y.source}/${y.record??y.op}${y.when?` where ${y.when}`:""} @prio ${y.priority}`))});for(let[d,m,_]of[["activate","active","activated"],["deactivate","inactive","deactivated"]])lr.command(`${d} <name>`).description(m==="active"?"Arm a parked or proposed rule.":"Park a rule without deleting it \u2014 the reversible move mid-rollout.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(T,x)=>{let{baseUrl:y,token:S}=await ne(x.baseUrl),R=new ee({baseUrl:y,token:S});try{await R.guardrailUpdate(T,{status:m})}catch(N){se(N,"extensions:deploy",`${d} a guardrail`),k(`${d} guardrail failed: ${N instanceof Error?N.message:String(N)}`)}v(`${g.green("\u2713")} guardrail ${g.bold(T)} ${_}`),m==="inactive"&&v(g.dim(" writes it was gating now fall through to the other rules."))});lr.command("delete <name>").description("Remove a rule. Prefer `deactivate` if you may want it back.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T});try{await x.guardrailDelete(d)}catch(y){se(y,"extensions:deploy","delete a guardrail"),k(`delete guardrail failed: ${y instanceof Error?y.message:String(y)}`)}v(`${g.green("\u2713")} guardrail ${g.bold(d)} deleted`)}),lr.command("posture [mode]").description("Show or set the GLOBAL default. 'allow' = deny-list (unmatched writes allowed, carve with deny rules). 'deny' = allow-list (unmatched writes denied, open with allow rules).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T}),y=N=>N==="deny"?"deny-by-default (allow-list)":"allow-by-default (deny-list)";if(d===void 0){let N;try{N=await x.guardrailPostureGet()}catch(L){se(L,"extensions:deploy","read the guardrail posture"),k(`read posture failed: ${L instanceof Error?L.message:String(L)}`)}v(`guardrail posture: ${g.bold(y(N.mode))}`),v(g.dim(N.mode==="deny"?" Unmatched writes are DENIED. Open records with `guardrails create <name> --decision allow`.":" Unmatched writes are allowed-with-audit. Freeze records with `guardrails create <name> --decision deny`."));return}let S=d.trim().toLowerCase();S!=="allow"&&S!=="deny"&&k("posture must be 'allow' or 'deny'.");let R;try{R=await x.guardrailPostureSet(S)}catch(N){se(N,"extensions:deploy","set the guardrail posture"),k(`set posture failed: ${N instanceof Error?N.message:String(N)}`)}v(`${g.green("\u2713")} guardrail posture set to ${g.bold(y(R.mode))}`),R.mode==="deny"&&v(g.dim(" Every record with no active ALLOW rule is now frozen for write-back. Verify with `guardrails test --source <s> --record <r>`."))}),lr.command("test").description("What happens to this write? Runs the real evaluator; writes nothing.").requiredOption("--source <system>","Adapter id the write targets.").requiredOption("--record <type>","Record type the write targets.").option("--actor <actor>","Caller to simulate, e.g. 'agent:ai' or 'user:<id>'.").option("--external-id <id>","Source-side row id, for target-scoped rules.").option("--fields <json>","A candidate row as JSON, so `when` predicates can be decided.").option("--op <op>","Write op: 'delete' tests <record>.delete; omitted tests <record>.write.").option("--phase <phase>","boundary | cdc | worker | adapter. Defaults to worker (the last gate).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--json","Emit raw JSON.").action(async d=>{let m;if(d.fields)try{m=JSON.parse(d.fields)}catch(R){k(`--fields must be valid JSON: ${R instanceof Error?R.message:String(R)}`)}let{baseUrl:_,token:T}=await ne(d.baseUrl),x=new ee({baseUrl:_,token:T}),y;try{y=await x.guardrailTest({source:d.source,record:d.record,...d.actor?{actor:d.actor}:{},...d.externalId?{externalId:d.externalId}:{},...m?{fields:m}:{},...d.op?{op:d.op}:{},...d.phase?{phase:d.phase}:{}})}catch(R){se(R,"extensions:deploy","test guardrails"),k(`guardrails test failed: ${R instanceof Error?R.message:String(R)}`)}if(d.json)return v(JSON.stringify(y,null,2));let S=`${d.source}/${y.op??d.record}`;y.degraded?(v(`${g.red("\u2717")} ${S} \u2014 guardrail policy is UNREADABLE; writes fail closed`),v(g.dim(` ${y.reason}`))):y.allowed?v(`${g.green("\u2713")} ${S} \u2014 ${y.decision}`+(y.blockedBy?g.dim(` (rule ${y.blockedBy})`):g.dim(" (no rule matched)"))):(v(`${g.red("\u2717")} ${S} \u2014 ${y.decision} by ${g.bold(y.blockedBy??"?")} at the ${y.phase} gate`),y.message&&v(g.dim(` ${y.message}`))),y.decision==="require_confirm"&&v(g.yellow(" this write is HELD for operator approval, not refused.")),y.allowed||(process.exitCode=1)});let Go=e.command("tables").description("Author custom tables on your instance (create, evolve, inspect)."),Si=(d,m={})=>{let _=`${g.bold(d.table)} ${g.dim(d.displayName)}`;v(d.exists===!1?`${_} ${g.dim("(new)")}`:_);for(let T of d.fields){let x=[T.required?"required":null].filter(Boolean).join(", "),y=m.showClaimants&&T.claimedBy?.length?` ${g.dim(`\u2190 ${T.claimedBy.join(", ")}`)}`:"";v(` ${T.column.padEnd(28)} ${T.type}${x?` (${x})`:""}${y}`)}m.showClaimants&&d.claimants.length>1&&v(g.dim(` claimed by ${d.claimants.join(", ")}`))};function Ti(d){if(d instanceof le&&d.status===409){let m=d.body;m?.error==="table_conflict"&&m.message&&(q(m.message),process.exit(1))}k(`tables: ${d instanceof Error?d.message:String(d)}`)}let sg=async d=>{let m=Ot(ge(process.cwd(),d),"public","turbobase.json"),_=await be.readFile(m,"utf8").catch(()=>null);if(_===null)return null;let T;try{T=JSON.parse(_)}catch(y){k(`${m} is not valid JSON: ${y instanceof Error?y.message:String(y)}`)}let x=T.tables;return x===void 0?{tables:[],manifestPath:m}:(Array.isArray(x)||k(`${m}: "tables" must be an array.`),{tables:x,manifestPath:m})};Go.command("list").description("List the custom tables on your instance and who claims each one.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--json","Emit raw JSON instead of a table.").action(async d=>{let{baseUrl:m,token:_}=await ne(d.baseUrl),T=new ee({baseUrl:m,token:_}),x;try{x=await T.tablesList()}catch(y){se(y,"extensions:deploy","list tables"),k(`list tables failed: ${y instanceof Error?y.message:String(y)}`)}if(d.json)return v(JSON.stringify(x,null,2));if(x.length===0)return v("no custom tables yet \u2014 create one with `turbobase tables create <slug>`.");v(Qt(x.map(y=>[y.table,y.displayName,String(y.fields.length),y.status,y.claimedBy.join(", ")||"\u2014"]),{head:["TABLE","NAME","FIELDS","STATUS","CLAIMED BY"]}))}),Go.command("plan").description("Preview what this project's declared tables would do. Writes nothing; exits 1 on a conflict.").argument("[dir]","Project directory holding public/turbobase.json (default ./).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--as <claimant>","Claim as `cli` or `app:<slug>` (default: the app slug in .turbobase, else cli).").action(async(d,m)=>{let _=await sg(d??".");if(_||k(`no public/turbobase.json under ${ge(process.cwd(),d??".")}.`),_.tables.length===0)return v(`${_.manifestPath} declares no tables \u2014 nothing to plan.`);let{baseUrl:T,token:x}=await ne(m.baseUrl),y=new ee({baseUrl:T,token:x}),S;try{S=await ae("planning tables",()=>y.tablesPlan({claimedBy:m.as,tables:_.tables}))}catch(R){se(R,"extensions:deploy","plan tables"),Ti(R)}v(`claiming as ${g.bold(S.claimedBy)}`);for(let R of S.tables)Si(R,{showClaimants:!0});v(""),v(g.dim("nothing was applied \u2014 run `turbobase tables apply` (or deploy the app) to make it so."))}),Go.command("apply").description("Apply this project's declared tables to the instance.").argument("[dir]","Project directory holding public/turbobase.json (default ./).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--as <claimant>","Claim as `cli` or `app:<slug>` (default: cli).").action(async(d,m)=>{let _=await sg(d??".");if(_||k(`no public/turbobase.json under ${ge(process.cwd(),d??".")}.`),_.tables.length===0)return v(`${_.manifestPath} declares no tables \u2014 nothing to apply.`);let{baseUrl:T,token:x}=await ne(m.baseUrl),y=new ee({baseUrl:T,token:x}),S;try{S=await ae("applying tables",()=>y.tablesApply({claimedBy:m.as,tables:_.tables}))}catch(R){se(R,"extensions:deploy","apply tables"),Ti(R)}for(let R of S.tables)Si(R,{showClaimants:!0});v(`applied ${S.tables.length} table${S.tables.length===1?"":"s"} as ${S.claimedBy}.`)}),Go.command("create").description('Create a single table without a manifest (the CLI twin of "New custom table").').argument("<slug>","Table slug; the physical table is cr_<slug>.").requiredOption("-f, --field <name:type>","Field as name:type[:required] \u2014 text|number|date|bool|select. Repeatable.",(d,m)=>[...m??[],d],[]).option("--name <displayName>","Human label for the table (defaults to the slug).").option("--restrict-to-owner","Non-admins see only rows they created.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{let _=m.field.map(R=>{let[N,L,D]=R.split(":");return(!N||!L)&&k(`--field "${R}" must be name:type[:required] (e.g. title:text:required).`),D!==void 0&&D!=="required"&&k(`--field "${R}": the third part may only be "required".`),{name:N,type:L,...D==="required"?{required:!0}:{}}}),{baseUrl:T,token:x}=await ne(m.baseUrl),y=new ee({baseUrl:T,token:x}),S;try{S=await ae(`creating cr_${d}`,()=>y.tablesApply({tables:[{slug:d,displayName:m.name??d,fields:_,...m.restrictToOwner?{rowLevelOwner:!0}:{}}]}))}catch(R){se(R,"extensions:deploy","create a table"),Ti(R)}for(let R of S.tables)Si(R);v(""),v(g.dim("grant access under Settings \u203A Users, or in the Records page permissions matrix."))}),Go.command("drop").description("Drop a table and everything in it. Irreversible.").argument("<slug>","Table slug (without the cr_ prefix).").requiredOption("--confirm <slug>","Type the EXACT slug to confirm (fail-closed).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{m.confirm!==d&&k(`drop refused: --confirm "${m.confirm}" does not match "${d}".`);let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T}),y;try{y=await ae(`dropping cr_${d}`,()=>x.tablesDrop(d,m.confirm))}catch(S){se(S,"extensions:deploy","drop a table"),k(`drop failed: ${S instanceof Error?S.message:String(S)}`)}if(!y.removed)return v(`no table named "${d}" on this instance \u2014 nothing dropped.`);v(`dropped ${y.table} and every row in it.`)});let hl=e.command("sandbox").description("Ephemeral local authoring sandboxes.");hl.command("create").description("Stand up a fresh local sandbox seeded with a sampled+redacted slice of an instance.").requiredOption("--from <instance>","Source instance to clone the data slice from.").option("--ttl <duration>","Time-to-live before reaping (e.g. 72h, 30m, 7d).","72h").option("--sample <pct>","Percent of each table to copy (e.g. 2%).","2%").option("--base-url <url>","Local base URL the sandbox is reachable at.").action(async d=>{process.env.TURBOBASE_SANDBOX="1";let m=eg(),_;try{_=await Yb(m,{fromTenant:d.from,ttl:d.ttl,sample:d.sample,baseUrl:d.baseUrl})}catch(T){T instanceof ys&&k(T.message),k(`sandbox create failed: ${T instanceof Error?T.message:String(T)}`)}v(`sandbox ${_.name} ready.`),v(` source: ${_.fromTenant} (sampled ${Math.round(_.sampleFraction*100)}%, redacted)`),v(` url: ${_.url}`),v(` expires: ${_.expiresAt}`)}),hl.command("destroy").argument("<name>","The sandbox name to tear down.").description("Drop a sandbox database and remove it from the registry.").action(async d=>{let m=eg();await ju(m).catch(()=>[]);let _;try{_=await Xb(m,d)}catch(T){k(`sandbox destroy failed: ${T instanceof Error?T.message:String(T)}`)}_||k(`no sandbox named '${d}'.`),v(`destroyed sandbox ${_.name} (dropped ${_.database}).`)}),hl.command("list").description("List active sandboxes with TTL/expiry; reaps any past their TTL.").action(async()=>{let d=eg(),m=await ju(d).catch(()=>[]),_=await ga(),{active:T}=zu(_);if(T.length===0)v("no active sandboxes.");else{for(let x of T)v(` ${x.name} from=${x.fromTenant} expires=${x.expiresAt} ${x.url}`);v(`
|
|
3741
3744
|
${T.length} active sandbox(es).`)}m.length>0&&v(`(reaped ${m.length} expired sandbox(es).)`)}),o.command("export").description("Pull the live instance into turbobase/bundle.json (adopt an instance into a repo).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--out <dir>","Directory to write the bundle into.",ia).action(async d=>{let{baseUrl:m,token:_}=await ne(d.baseUrl),T=new ee({baseUrl:m,token:_}),x;try{x=await ae("exporting instance config",()=>T.configExport())}catch(R){R instanceof le&&(R.status===401||R.status===403)&&k("ext export forbidden \u2014 the stored PAT lacks extensions:deploy. Re-run `turbobase auth login`."),k(`ext export failed: ${R instanceof Error?R.message:String(R)}`)}let y=typeof x.serialized=="string"?x.serialized:`${JSON.stringify(x.manifest??x,null,2)}
|
|
3742
3745
|
`,S=ge(process.cwd(),d.out,ds);await be.mkdir(Lr(S),{recursive:!0}),await be.writeFile(S,y,"utf8"),v(`wrote ${d.out}/${ds} (${y.split(`
|
|
3743
|
-
`).length} lines).`)});let ig=o.command("extras").description("Manage the optional native packages `ext test` and `ext replay` need."),rT=[{name:"esbuild",needs:"compiling an extension (`test`, `replay`)"},{name:"isolated-vm",needs:"executing an extension in the sandbox (`test`, `replay`)"}],ag=()=>process.env.TURBOBASE_HOME?.trim()||Ot(IM(),".turbobase"),nT=()=>"1.
|
|
3746
|
+
`).length} lines).`)});let ig=o.command("extras").description("Manage the optional native packages `ext test` and `ext replay` need."),rT=[{name:"esbuild",needs:"compiling an extension (`test`, `replay`)"},{name:"isolated-vm",needs:"executing an extension in the sandbox (`test`, `replay`)"}],ag=()=>process.env.TURBOBASE_HOME?.trim()||Ot(IM(),".turbobase"),nT=()=>"1.20.0",Ei=async()=>Promise.all(rT.map(async d=>{try{return await import(d.name),{...d,present:!0}}catch{return{...d,present:!1}}}));ig.command("status").description("Report which optional native packages are installed.").action(async()=>{let d=await Ei();for(let m of d)v(`${m.present?Ke.success("installed"):Ke.warn("missing")} ${g.bold(m.name)} \u2014 ${m.needs}`);d.some(m=>!m.present)&&v(`
|
|
3744
3747
|
run \`${hs} ext extras install\` to fetch them into ${ag()}.`)}),ig.command("install").description("Install the optional native packages into $TURBOBASE_HOME (needs npm).").action(async()=>{let d=await Ei();if(d.every(N=>N.present)){v(Ke.success("extras already installed \u2014 nothing to do."));return}let m=ag();await be.mkdir(m,{recursive:!0});let _=d.filter(N=>!N.present).map(N=>N.name),T=Pu(process.platform,process.arch),x=async(N,L)=>{let{code:D,stderr:H}=await ki("npm",["install","--prefix",m,"--no-audit","--no-fund",...N]);D!==0&&k(`extras install failed while installing ${L} (npm exited ${D}).
|
|
3745
3748
|
${H.trim()}
|
|
3746
3749
|
These are native packages \u2014 they need npm and a working toolchain. Everything except \`test\` and \`replay\` works without them.`)},y=_.filter(N=>N!=="isolated-vm");if(y.length>0){let N=y.map(L=>`${L}@${Eu[L]??"latest"}`);v(`installing ${N.join(", ")} \u2192 ${m}/node_modules \u2026`),await x(N,y.join(", "))}if(_.includes("isolated-vm")){let N=`isolated-vm@${Eu["isolated-vm"]}`;if(v(`installing ${N} \u2192 ${m}/node_modules \u2026`),await x(["--ignore-scripts",N],"isolated-vm"),Fb.includes(T)){let D=`${Ru}@${nT()}`;v(`fetching ${D} (no upstream binary for ${T}) \u2026`);let{code:H}=await ki("npm",["install","--prefix",m,"--no-audit","--no-fund","--ignore-scripts",D]);H!==0&&v(Ke.warn(`could not fetch ${D} \u2014 falling back to a source build.`))}let L=await Hb({home:m});L.length>0&&v(` ${Ke.success("prebuilt")} ${L.join(", ")} \u2192 isolated-vm/prebuilds/${T}`)}let S=await Ei(),R=S.filter(N=>!N.present).map(N=>N.name);if(R.includes("isolated-vm")){v(Ke.warn(`no prebuilt isolated-vm for ${T} / Node ${process.versions.node} (${Au()}) \u2014 building from source. This needs Python and a C++ toolchain, and takes a few minutes.`));let{code:N}=await ki("npm",["rebuild","--prefix",m,"isolated-vm"]);N===0&&(S=await Ei(),R=S.filter(L=>!L.present).map(L=>L.name))}R.length>0&&k(`npm succeeded but ${R.join(", ")} still will not load \u2014 no prebuilt binary for ${T} / Node ${process.versions.node} (${Au()}), and the source build did not produce one either. Everything except \`test\` and \`replay\` works without them.`),v(Ke.success("extras installed \u2014 `turbobase ext test` and `turbobase ext replay` are ready."))});let Qn=e.command("release").description("Ship a release to your instance: deploy | status | rollback | list.");return Qn.command("deploy").description("Enqueue a server-side release deploy. UPLOADS the SDF project src/ from the checkout (the producer swap) when present; else a solution-only live-fetch deploy. An approved target requires --approved-by.").requiredOption("--target <mode>","Deploy posture: auto (apply now) | approved (needs a recorded approval).").option("--solution <id>","The solution id the release delivers (omit for an upload-only deploy).").option("--project <dir>","SDF project dir whose src/ is uploaded (default: cwd).").option("--git-repo <repo>","Git provenance LINK: source repo (default $GITHUB_REPOSITORY or `git remote get-url origin`).").option("--git-ref <ref>","Git provenance LINK: ref/branch/tag (default $GITHUB_REF).").option("--ref <committish>","Git provenance: the ref/branch/tag/sha the upload was built from; resolved to a commit sha via `git rev-parse` (default $GITHUB_SHA or HEAD).").option("--pr-url <url>","Git provenance LINK: the PR this deploy came from (default $PR_URL).").option("--approved-by <email>","Record the approval (REQUIRED for --target approved).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--follow","Poll the release deploy to completion (exit non-zero on failure).").option("--interval-ms <ms>","Poll interval for --follow (default 2000).").action(async d=>{let m=d.target==="approved"?"approved":d.target==="auto"?"auto":null;m||k(`--target must be 'auto' or 'approved' (got '${d.target}').`);let _=await HM(ge(process.cwd(),d.project??".")),T=Object.keys(_).length;!d.solution&&T===0&&k("release deploy needs --solution <id> (live-fetch) or an SDF project (a src/ dir under --project, default cwd) to upload.");let y=(d.ref?await tg(["rev-parse",d.ref])??d.ref:null)??process.env.GITHUB_SHA??await tg(["rev-parse","HEAD"]),S=d.gitRepo??process.env.GITHUB_REPOSITORY??await tg(["remote","get-url","origin"]),R=d.gitRef??process.env.GITHUB_REF??null,N=d.prUrl??process.env.PR_URL??null,{baseUrl:L,token:D}=await ne(d.baseUrl),H=new ee({baseUrl:L,token:D}),j;try{j=await H.releaseDeploy({solutionId:d.solution??null,target:m,approvedBy:d.approvedBy??null,files:T>0?_:null,gitRepo:S,gitRef:R,gitSha:y,prUrl:N})}catch(Q){se(Q,"releases:write","release deploy"),Q instanceof le&&Q.status===404&&k("solution_not_found \u2014 no solution with that id."),k(`release deploy failed: ${Q instanceof Error?Q.message:String(Q)}`)}v(`release ${j.releaseId} enqueued \u2192 taskId=${j.taskId} (target=${m}`+(T>0?`, uploaded ${T} bundle file(s)`:", live-fetch")+")."),d.follow&&await wu(()=>H.releaseStatus(j.releaseId),`release ${j.releaseId}`,d.intervalMs)}),Qn.command("pull").argument("<id>","The release id").description("Write the SDF project a FAILED release built into <dir>: owned/ (yours, editable) and context/ (the rest of the bundle, read-only). Edit owned/, then `release push`.").requiredOption("--dir <path>","Directory to write the project into (created if absent).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,m)=>{let{baseUrl:_,token:T}=await ne(m.baseUrl),x=new ee({baseUrl:_,token:T}),y;try{y=await x.releaseFiles(d)}catch(N){N instanceof le&&N.status===404&&k(`release ${d} not found.`),N instanceof le&&N.status===409&&k(`no built project was retained for release ${d}. Files are kept for a FAILED attempt only \u2014 a shipped bundle is recoverable from the account.`),se(N,"releases:write","pull a release"),k(`release pull failed: ${N instanceof Error?N.message:String(N)}`)}let S=ge(process.cwd(),m.dir),R=0;for(let[N,L]of[["owned",y.owned],["context",y.context]])for(let[D,H]of Object.entries(L)){let j=Ot(S,N,D);await be.mkdir(Lr(j),{recursive:!0}),await be.writeFile(j,H,"utf8"),R++}await be.writeFile(Ot(S,".turbobase-release.json"),JSON.stringify({releaseId:y.releaseId,version:y.version,contentDigest:y.contentDigest},null,2),"utf8"),v(`pulled release ${y.releaseId} (${y.status}) \u2192 ${S}
|
package/dist/turbobase.js
CHANGED
|
@@ -1963,7 +1963,7 @@ export { Label };
|
|
|
1963
1963
|
|| ${i} === "boolean" || ${s} === null`).assign(a,(0,ee._)`[${s}]`)}}}function N$({gen:t,parentData:e,parentDataProperty:n},r){t.if((0,ee._)`${e} !== undefined`,()=>t.assign((0,ee._)`${e}[${n}]`,r))}function rc(t,e,n,r=Qn.Correct){let s=r===Qn.Correct?ee.operators.EQ:ee.operators.NEQ,o;switch(t){case"null":return(0,ee._)`${e} ${s} null`;case"array":o=(0,ee._)`Array.isArray(${e})`;break;case"object":o=(0,ee._)`${e} && typeof ${e} == "object" && !Array.isArray(${e})`;break;case"integer":o=i((0,ee._)`!(${e} % 1) && !isNaN(${e})`);break;case"number":o=i();break;default:return(0,ee._)`typeof ${e} ${s} ${t}`}return r===Qn.Correct?o:(0,ee.not)(o);function i(a=ee.nil){return(0,ee.and)((0,ee._)`typeof ${e} == "number"`,a,n?(0,ee._)`isFinite(${e})`:ee.nil)}}Me.checkDataType=rc;function sc(t,e,n,r){if(t.length===1)return rc(t[0],e,n,r);let s,o=(0,Xf.toHash)(t);if(o.array&&o.object){let i=(0,ee._)`typeof ${e} != "object"`;s=o.null?i:(0,ee._)`!${e} || ${i}`,delete o.null,delete o.array,delete o.object}else s=ee.nil;o.number&&delete o.integer;for(let i in o)s=(0,ee.and)(s,rc(i,e,n,r));return s}Me.checkDataTypes=sc;var L$={message:({schema:t})=>`must be ${t}`,params:({schema:t,schemaValue:e})=>typeof t=="string"?(0,ee._)`{type: ${t}}`:(0,ee._)`{type: ${e}}`};function oc(t){let e=j$(t);(0,P$.reportError)(e,L$)}Me.reportTypeError=oc;function j$(t){let{gen:e,data:n,schema:r}=t,s=(0,Xf.schemaRefOrVal)(t,r,"type");return{gen:e,keyword:"type",data:n,schema:r.type,schemaCode:s,schemaValue:s,parentSchema:r,params:{},it:t}}});var nm=M(Ko=>{"use strict";Object.defineProperty(Ko,"__esModule",{value:!0});Ko.assignDefaults=void 0;var er=te(),D$=ue();function U$(t,e){let{properties:n,items:r}=t.schema;if(e==="object"&&n)for(let s in n)tm(t,s,n[s].default);else e==="array"&&Array.isArray(r)&&r.forEach((s,o)=>tm(t,o,s.default))}Ko.assignDefaults=U$;function tm(t,e,n){let{gen:r,compositeRule:s,data:o,opts:i}=t;if(n===void 0)return;let a=(0,er._)`${o}${(0,er.getProperty)(e)}`;if(s){(0,D$.checkStrictMode)(t,`default is ignored for: ${a}`);return}let l=(0,er._)`${a} === undefined`;i.useDefaults==="empty"&&(l=(0,er._)`${l} || ${a} === null || ${a} === ""`),r.if(l,(0,er._)`${a} = ${(0,er.stringify)(n)}`)}});var ct=M(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.validateUnion=me.validateArray=me.usePattern=me.callValidateCode=me.schemaProperties=me.allSchemaProperties=me.noPropertyInData=me.propertyInData=me.isOwnProperty=me.hasPropFunc=me.reportMissingProp=me.checkMissingProp=me.checkReportMissingProp=void 0;var be=te(),ic=ue(),tn=Dt(),M$=ue();function q$(t,e){let{gen:n,data:r,it:s}=t;n.if(lc(n,r,e,s.opts.ownProperties),()=>{t.setParams({missingProperty:(0,be._)`${e}`},!0),t.error()})}me.checkReportMissingProp=q$;function z$({gen:t,data:e,it:{opts:n}},r,s){return(0,be.or)(...r.map(o=>(0,be.and)(lc(t,e,o,n.ownProperties),(0,be._)`${s} = ${o}`)))}me.checkMissingProp=z$;function B$(t,e){t.setParams({missingProperty:e},!0),t.error()}me.reportMissingProp=B$;function rm(t){return t.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,be._)`Object.prototype.hasOwnProperty`})}me.hasPropFunc=rm;function ac(t,e,n){return(0,be._)`${rm(t)}.call(${e}, ${n})`}me.isOwnProperty=ac;function F$(t,e,n,r){let s=(0,be._)`${e}${(0,be.getProperty)(n)} !== undefined`;return r?(0,be._)`${s} && ${ac(t,e,n)}`:s}me.propertyInData=F$;function lc(t,e,n,r){let s=(0,be._)`${e}${(0,be.getProperty)(n)} === undefined`;return r?(0,be.or)(s,(0,be.not)(ac(t,e,n))):s}me.noPropertyInData=lc;function sm(t){return t?Object.keys(t).filter(e=>e!=="__proto__"):[]}me.allSchemaProperties=sm;function H$(t,e){return sm(e).filter(n=>!(0,ic.alwaysValidSchema)(t,e[n]))}me.schemaProperties=H$;function K$({schemaCode:t,data:e,it:{gen:n,topSchemaRef:r,schemaPath:s,errorPath:o},it:i},a,l,u){let p=u?(0,be._)`${t}, ${e}, ${r}${s}`:e,g=[[tn.default.instancePath,(0,be.strConcat)(tn.default.instancePath,o)],[tn.default.parentData,i.parentData],[tn.default.parentDataProperty,i.parentDataProperty],[tn.default.rootData,tn.default.rootData]];i.opts.dynamicRef&&g.push([tn.default.dynamicAnchors,tn.default.dynamicAnchors]);let x=(0,be._)`${p}, ${n.object(...g)}`;return l!==be.nil?(0,be._)`${a}.call(${l}, ${x})`:(0,be._)`${a}(${x})`}me.callValidateCode=K$;var V$=(0,be._)`new RegExp`;function G$({gen:t,it:{opts:e}},n){let r=e.unicodeRegExp?"u":"",{regExp:s}=e.code,o=s(n,r);return t.scopeValue("pattern",{key:o.toString(),ref:o,code:(0,be._)`${s.code==="new RegExp"?V$:(0,M$.useFunc)(t,s)}(${n}, ${r})`})}me.usePattern=G$;function W$(t){let{gen:e,data:n,keyword:r,it:s}=t,o=e.name("valid");if(s.allErrors){let a=e.let("valid",!0);return i(()=>e.assign(a,!1)),a}return e.var(o,!0),i(()=>e.break()),o;function i(a){let l=e.const("len",(0,be._)`${n}.length`);e.forRange("i",0,l,u=>{t.subschema({keyword:r,dataProp:u,dataPropType:ic.Type.Num},o),e.if((0,be.not)(o),a)})}}me.validateArray=W$;function J$(t){let{gen:e,schema:n,keyword:r,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(n.some(l=>(0,ic.alwaysValidSchema)(s,l))&&!s.opts.unevaluated)return;let i=e.let("valid",!1),a=e.name("_valid");e.block(()=>n.forEach((l,u)=>{let p=t.subschema({keyword:r,schemaProp:u,compositeRule:!0},a);e.assign(i,(0,be._)`${i} || ${a}`),t.mergeValidEvaluated(p,a)||e.if((0,be.not)(i))})),t.result(i,()=>t.reset(),()=>t.error(!0))}me.validateUnion=J$});var am=M(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.validateKeywordUsage=Tt.validSchemaType=Tt.funcKeywordCode=Tt.macroKeywordCode=void 0;var Ke=te(),Sn=Dt(),Y$=ct(),Z$=Zr();function X$(t,e){let{gen:n,keyword:r,schema:s,parentSchema:o,it:i}=t,a=e.macro.call(i.self,s,o,i),l=im(n,r,a);i.opts.validateSchema!==!1&&i.self.validateSchema(a,!0);let u=n.name("valid");t.subschema({schema:a,schemaPath:Ke.nil,errSchemaPath:`${i.errSchemaPath}/${r}`,topSchemaRef:l,compositeRule:!0},u),t.pass(u,()=>t.error(!0))}Tt.macroKeywordCode=X$;function Q$(t,e){var n;let{gen:r,keyword:s,schema:o,parentSchema:i,$data:a,it:l}=t;tx(l,e);let u=!a&&e.compile?e.compile.call(l.self,o,i,l):e.validate,p=im(r,s,u),g=r.let("valid");t.block$data(g,x),t.ok((n=e.valid)!==null&&n!==void 0?n:g);function x(){if(e.errors===!1)T(),e.modifying&&om(t),R(()=>t.error());else{let P=e.async?b():S();e.modifying&&om(t),R(()=>ex(t,P))}}function b(){let P=r.let("ruleErrs",null);return r.try(()=>T((0,Ke._)`await `),N=>r.assign(g,!1).if((0,Ke._)`${N} instanceof ${l.ValidationError}`,()=>r.assign(P,(0,Ke._)`${N}.errors`),()=>r.throw(N))),P}function S(){let P=(0,Ke._)`${p}.errors`;return r.assign(P,null),T(Ke.nil),P}function T(P=e.async?(0,Ke._)`await `:Ke.nil){let N=l.opts.passContext?Sn.default.this:Sn.default.self,D=!("compile"in e&&!a||e.schema===!1);r.assign(g,(0,Ke._)`${P}${(0,Y$.callValidateCode)(t,p,N,D)}`,e.modifying)}function R(P){var N;r.if((0,Ke.not)((N=e.valid)!==null&&N!==void 0?N:g),P)}}Tt.funcKeywordCode=Q$;function om(t){let{gen:e,data:n,it:r}=t;e.if(r.parentData,()=>e.assign(n,(0,Ke._)`${r.parentData}[${r.parentDataProperty}]`))}function ex(t,e){let{gen:n}=t;n.if((0,Ke._)`Array.isArray(${e})`,()=>{n.assign(Sn.default.vErrors,(0,Ke._)`${Sn.default.vErrors} === null ? ${e} : ${Sn.default.vErrors}.concat(${e})`).assign(Sn.default.errors,(0,Ke._)`${Sn.default.vErrors}.length`),(0,Z$.extendErrors)(t)},()=>t.error())}function tx({schemaEnv:t},e){if(e.async&&!t.$async)throw new Error("async keyword in sync schema")}function im(t,e,n){if(n===void 0)throw new Error(`keyword "${e}" failed to compile`);return t.scopeValue("keyword",typeof n=="function"?{ref:n}:{ref:n,code:(0,Ke.stringify)(n)})}function nx(t,e,n=!1){return!e.length||e.some(r=>r==="array"?Array.isArray(t):r==="object"?t&&typeof t=="object"&&!Array.isArray(t):typeof t==r||n&&typeof t>"u")}Tt.validSchemaType=nx;function rx({schema:t,opts:e,self:n,errSchemaPath:r},s,o){if(Array.isArray(s.keyword)?!s.keyword.includes(o):s.keyword!==o)throw new Error("ajv implementation error");let i=s.dependencies;if(i?.some(a=>!Object.prototype.hasOwnProperty.call(t,a)))throw new Error(`parent schema must have dependencies of ${o}: ${i.join(",")}`);if(s.validateSchema&&!s.validateSchema(t[o])){let l=`keyword "${o}" value is invalid at path "${r}": `+n.errorsText(s.validateSchema.errors);if(e.validateSchema==="log")n.logger.error(l);else throw new Error(l)}}Tt.validateKeywordUsage=rx});var cm=M(nn=>{"use strict";Object.defineProperty(nn,"__esModule",{value:!0});nn.extendSubschemaMode=nn.extendSubschemaData=nn.getSubschema=void 0;var Rt=te(),lm=ue();function sx(t,{keyword:e,schemaProp:n,schema:r,schemaPath:s,errSchemaPath:o,topSchemaRef:i}){if(e!==void 0&&r!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(e!==void 0){let a=t.schema[e];return n===void 0?{schema:a,schemaPath:(0,Rt._)`${t.schemaPath}${(0,Rt.getProperty)(e)}`,errSchemaPath:`${t.errSchemaPath}/${e}`}:{schema:a[n],schemaPath:(0,Rt._)`${t.schemaPath}${(0,Rt.getProperty)(e)}${(0,Rt.getProperty)(n)}`,errSchemaPath:`${t.errSchemaPath}/${e}/${(0,lm.escapeFragment)(n)}`}}if(r!==void 0){if(s===void 0||o===void 0||i===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:r,schemaPath:s,topSchemaRef:i,errSchemaPath:o}}throw new Error('either "keyword" or "schema" must be passed')}nn.getSubschema=sx;function ox(t,e,{dataProp:n,dataPropType:r,data:s,dataTypes:o,propertyName:i}){if(s!==void 0&&n!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');let{gen:a}=e;if(n!==void 0){let{errorPath:u,dataPathArr:p,opts:g}=e,x=a.let("data",(0,Rt._)`${e.data}${(0,Rt.getProperty)(n)}`,!0);l(x),t.errorPath=(0,Rt.str)`${u}${(0,lm.getErrorPath)(n,r,g.jsPropertySyntax)}`,t.parentDataProperty=(0,Rt._)`${n}`,t.dataPathArr=[...p,t.parentDataProperty]}if(s!==void 0){let u=s instanceof Rt.Name?s:a.let("data",s,!0);l(u),i!==void 0&&(t.propertyName=i)}o&&(t.dataTypes=o);function l(u){t.data=u,t.dataLevel=e.dataLevel+1,t.dataTypes=[],e.definedProperties=new Set,t.parentData=e.data,t.dataNames=[...e.dataNames,u]}}nn.extendSubschemaData=ox;function ix(t,{jtdDiscriminator:e,jtdMetadata:n,compositeRule:r,createErrors:s,allErrors:o}){r!==void 0&&(t.compositeRule=r),s!==void 0&&(t.createErrors=s),o!==void 0&&(t.allErrors=o),t.jtdDiscriminator=e,t.jtdMetadata=n}nn.extendSubschemaMode=ix});var cc=M((lj,dm)=>{"use strict";dm.exports=function t(e,n){if(e===n)return!0;if(e&&n&&typeof e=="object"&&typeof n=="object"){if(e.constructor!==n.constructor)return!1;var r,s,o;if(Array.isArray(e)){if(r=e.length,r!=n.length)return!1;for(s=r;s--!==0;)if(!t(e[s],n[s]))return!1;return!0}if(e.constructor===RegExp)return e.source===n.source&&e.flags===n.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===n.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===n.toString();if(o=Object.keys(e),r=o.length,r!==Object.keys(n).length)return!1;for(s=r;s--!==0;)if(!Object.prototype.hasOwnProperty.call(n,o[s]))return!1;for(s=r;s--!==0;){var i=o[s];if(!t(e[i],n[i]))return!1}return!0}return e!==e&&n!==n}});var pm=M((cj,um)=>{"use strict";var rn=um.exports=function(t,e,n){typeof e=="function"&&(n=e,e={}),n=e.cb||n;var r=typeof n=="function"?n:n.pre||function(){},s=n.post||function(){};Vo(e,r,s,t,"",t)};rn.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0};rn.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0};rn.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0};rn.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function Vo(t,e,n,r,s,o,i,a,l,u){if(r&&typeof r=="object"&&!Array.isArray(r)){e(r,s,o,i,a,l,u);for(var p in r){var g=r[p];if(Array.isArray(g)){if(p in rn.arrayKeywords)for(var x=0;x<g.length;x++)Vo(t,e,n,g[x],s+"/"+p+"/"+x,o,s,p,r,x)}else if(p in rn.propsKeywords){if(g&&typeof g=="object")for(var b in g)Vo(t,e,n,g[b],s+"/"+p+"/"+ax(b),o,s,p,r,b)}else(p in rn.keywords||t.allKeys&&!(p in rn.skipKeywords))&&Vo(t,e,n,g,s+"/"+p,o,s,p,r)}n(r,s,o,i,a,l,u)}}function ax(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}});var Qr=M(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.getSchemaRefs=Ze.resolveUrl=Ze.normalizeId=Ze._getFullPath=Ze.getFullPath=Ze.inlineRef=void 0;var lx=ue(),cx=cc(),dx=pm(),ux=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function px(t,e=!0){return typeof t=="boolean"?!0:e===!0?!dc(t):e?hm(t)<=e:!1}Ze.inlineRef=px;var hx=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function dc(t){for(let e in t){if(hx.has(e))return!0;let n=t[e];if(Array.isArray(n)&&n.some(dc)||typeof n=="object"&&dc(n))return!0}return!1}function hm(t){let e=0;for(let n in t){if(n==="$ref")return 1/0;if(e++,!ux.has(n)&&(typeof t[n]=="object"&&(0,lx.eachItem)(t[n],r=>e+=hm(r)),e===1/0))return 1/0}return e}function fm(t,e="",n){n!==!1&&(e=tr(e));let r=t.parse(e);return mm(t,r)}Ze.getFullPath=fm;function mm(t,e){return t.serialize(e).split("#")[0]+"#"}Ze._getFullPath=mm;var fx=/#\/?$/;function tr(t){return t?t.replace(fx,""):""}Ze.normalizeId=tr;function mx(t,e,n){return n=tr(n),t.resolve(e,n)}Ze.resolveUrl=mx;var gx=/^[a-z_][-a-z0-9._]*$/i;function bx(t,e){if(typeof t=="boolean")return{};let{schemaId:n,uriResolver:r}=this.opts,s=tr(t[n]||e),o={"":s},i=fm(r,s,!1),a={},l=new Set;return dx(t,{allKeys:!0},(g,x,b,S)=>{if(S===void 0)return;let T=i+x,R=o[S];typeof g[n]=="string"&&(R=P.call(this,g[n])),N.call(this,g.$anchor),N.call(this,g.$dynamicAnchor),o[x]=R;function P(D){let W=this.opts.uriResolver.resolve;if(D=tr(R?W(R,D):D),l.has(D))throw p(D);l.add(D);let K=this.refs[D];return typeof K=="string"&&(K=this.refs[K]),typeof K=="object"?u(g,K.schema,D):D!==tr(T)&&(D[0]==="#"?(u(g,a[D],D),a[D]=g):this.refs[D]=T),D}function N(D){if(typeof D=="string"){if(!gx.test(D))throw new Error(`invalid anchor "${D}"`);P.call(this,`#${D}`)}}}),a;function u(g,x,b){if(x!==void 0&&!cx(g,x))throw p(b)}function p(g){return new Error(`reference "${g}" resolves to more than one schema`)}}Ze.getSchemaRefs=bx});var ns=M(sn=>{"use strict";Object.defineProperty(sn,"__esModule",{value:!0});sn.getData=sn.KeywordCxt=sn.validateFunctionCode=void 0;var vm=Jf(),gm=Xr(),pc=nc(),Go=Xr(),yx=nm(),ts=am(),uc=cm(),B=te(),X=Dt(),wx=Qr(),Ut=ue(),es=Zr();function vx(t){if(_m(t)&&($m(t),Sm(t))){_x(t);return}km(t,()=>(0,vm.topBoolOrEmptySchema)(t))}sn.validateFunctionCode=vx;function km({gen:t,validateName:e,schema:n,schemaEnv:r,opts:s},o){s.code.es5?t.func(e,(0,B._)`${X.default.data}, ${X.default.valCxt}`,r.$async,()=>{t.code((0,B._)`"use strict"; ${bm(n,s)}`),Sx(t,s),t.code(o)}):t.func(e,(0,B._)`${X.default.data}, ${kx(s)}`,r.$async,()=>t.code(bm(n,s)).code(o))}function kx(t){return(0,B._)`{${X.default.instancePath}="", ${X.default.parentData}, ${X.default.parentDataProperty}, ${X.default.rootData}=${X.default.data}${t.dynamicRef?(0,B._)`, ${X.default.dynamicAnchors}={}`:B.nil}}={}`}function Sx(t,e){t.if(X.default.valCxt,()=>{t.var(X.default.instancePath,(0,B._)`${X.default.valCxt}.${X.default.instancePath}`),t.var(X.default.parentData,(0,B._)`${X.default.valCxt}.${X.default.parentData}`),t.var(X.default.parentDataProperty,(0,B._)`${X.default.valCxt}.${X.default.parentDataProperty}`),t.var(X.default.rootData,(0,B._)`${X.default.valCxt}.${X.default.rootData}`),e.dynamicRef&&t.var(X.default.dynamicAnchors,(0,B._)`${X.default.valCxt}.${X.default.dynamicAnchors}`)},()=>{t.var(X.default.instancePath,(0,B._)`""`),t.var(X.default.parentData,(0,B._)`undefined`),t.var(X.default.parentDataProperty,(0,B._)`undefined`),t.var(X.default.rootData,X.default.data),e.dynamicRef&&t.var(X.default.dynamicAnchors,(0,B._)`{}`)})}function _x(t){let{schema:e,opts:n,gen:r}=t;km(t,()=>{n.$comment&&e.$comment&&Tm(t),Ex(t),r.let(X.default.vErrors,null),r.let(X.default.errors,0),n.unevaluated&&$x(t),xm(t),Ix(t)})}function $x(t){let{gen:e,validateName:n}=t;t.evaluated=e.const("evaluated",(0,B._)`${n}.evaluated`),e.if((0,B._)`${t.evaluated}.dynamicProps`,()=>e.assign((0,B._)`${t.evaluated}.props`,(0,B._)`undefined`)),e.if((0,B._)`${t.evaluated}.dynamicItems`,()=>e.assign((0,B._)`${t.evaluated}.items`,(0,B._)`undefined`))}function bm(t,e){let n=typeof t=="object"&&t[e.schemaId];return n&&(e.code.source||e.code.process)?(0,B._)`/*# sourceURL=${n} */`:B.nil}function xx(t,e){if(_m(t)&&($m(t),Sm(t))){Tx(t,e);return}(0,vm.boolOrEmptySchema)(t,e)}function Sm({schema:t,self:e}){if(typeof t=="boolean")return!t;for(let n in t)if(e.RULES.all[n])return!0;return!1}function _m(t){return typeof t.schema!="boolean"}function Tx(t,e){let{schema:n,gen:r,opts:s}=t;s.$comment&&n.$comment&&Tm(t),Px(t),Ax(t);let o=r.const("_errs",X.default.errors);xm(t,o),r.var(e,(0,B._)`${o} === ${X.default.errors}`)}function $m(t){(0,Ut.checkUnknownRules)(t),Rx(t)}function xm(t,e){if(t.opts.jtd)return ym(t,[],!1,e);let n=(0,gm.getSchemaTypes)(t.schema),r=(0,gm.coerceAndCheckDataType)(t,n);ym(t,n,!r,e)}function Rx(t){let{schema:e,errSchemaPath:n,opts:r,self:s}=t;e.$ref&&r.ignoreKeywordsWithRef&&(0,Ut.schemaHasRulesButRef)(e,s.RULES)&&s.logger.warn(`$ref: keywords ignored in schema at path "${n}"`)}function Ex(t){let{schema:e,opts:n}=t;e.default!==void 0&&n.useDefaults&&n.strictSchema&&(0,Ut.checkStrictMode)(t,"default is ignored in the schema root")}function Px(t){let e=t.schema[t.opts.schemaId];e&&(t.baseId=(0,wx.resolveUrl)(t.opts.uriResolver,t.baseId,e))}function Ax(t){if(t.schema.$async&&!t.schemaEnv.$async)throw new Error("async schema in sync schema")}function Tm({gen:t,schemaEnv:e,schema:n,errSchemaPath:r,opts:s}){let o=n.$comment;if(s.$comment===!0)t.code((0,B._)`${X.default.self}.logger.log(${o})`);else if(typeof s.$comment=="function"){let i=(0,B.str)`${r}/$comment`,a=t.scopeValue("root",{ref:e.root});t.code((0,B._)`${X.default.self}.opts.$comment(${o}, ${i}, ${a}.schema)`)}}function Ix(t){let{gen:e,schemaEnv:n,validateName:r,ValidationError:s,opts:o}=t;n.$async?e.if((0,B._)`${X.default.errors} === 0`,()=>e.return(X.default.data),()=>e.throw((0,B._)`new ${s}(${X.default.vErrors})`)):(e.assign((0,B._)`${r}.errors`,X.default.vErrors),o.unevaluated&&Cx(t),e.return((0,B._)`${X.default.errors} === 0`))}function Cx({gen:t,evaluated:e,props:n,items:r}){n instanceof B.Name&&t.assign((0,B._)`${e}.props`,n),r instanceof B.Name&&t.assign((0,B._)`${e}.items`,r)}function ym(t,e,n,r){let{gen:s,schema:o,data:i,allErrors:a,opts:l,self:u}=t,{RULES:p}=u;if(o.$ref&&(l.ignoreKeywordsWithRef||!(0,Ut.schemaHasRulesButRef)(o,p))){s.block(()=>Em(t,"$ref",p.all.$ref.definition));return}l.jtd||Ox(t,e),s.block(()=>{for(let x of p.rules)g(x);g(p.post)});function g(x){(0,pc.shouldUseGroup)(o,x)&&(x.type?(s.if((0,Go.checkDataType)(x.type,i,l.strictNumbers)),wm(t,x),e.length===1&&e[0]===x.type&&n&&(s.else(),(0,Go.reportTypeError)(t)),s.endIf()):wm(t,x),a||s.if((0,B._)`${X.default.errors} === ${r||0}`))}}function wm(t,e){let{gen:n,schema:r,opts:{useDefaults:s}}=t;s&&(0,yx.assignDefaults)(t,e.type),n.block(()=>{for(let o of e.rules)(0,pc.shouldUseRule)(r,o)&&Em(t,o.keyword,o.definition,e.type)})}function Ox(t,e){t.schemaEnv.meta||!t.opts.strictTypes||(Nx(t,e),t.opts.allowUnionTypes||Lx(t,e),jx(t,t.dataTypes))}function Nx(t,e){if(e.length){if(!t.dataTypes.length){t.dataTypes=e;return}e.forEach(n=>{Rm(t.dataTypes,n)||hc(t,`type "${n}" not allowed by context "${t.dataTypes.join(",")}"`)}),Ux(t,e)}}function Lx(t,e){e.length>1&&!(e.length===2&&e.includes("null"))&&hc(t,"use allowUnionTypes to allow union type keyword")}function jx(t,e){let n=t.self.RULES.all;for(let r in n){let s=n[r];if(typeof s=="object"&&(0,pc.shouldUseRule)(t.schema,s)){let{type:o}=s.definition;o.length&&!o.some(i=>Dx(e,i))&&hc(t,`missing type "${o.join(",")}" for keyword "${r}"`)}}}function Dx(t,e){return t.includes(e)||e==="number"&&t.includes("integer")}function Rm(t,e){return t.includes(e)||e==="integer"&&t.includes("number")}function Ux(t,e){let n=[];for(let r of t.dataTypes)Rm(e,r)?n.push(r):e.includes("integer")&&r==="number"&&n.push("integer");t.dataTypes=n}function hc(t,e){let n=t.schemaEnv.baseId+t.errSchemaPath;e+=` at "${n}" (strictTypes)`,(0,Ut.checkStrictMode)(t,e,t.opts.strictTypes)}var Wo=class{constructor(e,n,r){if((0,ts.validateKeywordUsage)(e,n,r),this.gen=e.gen,this.allErrors=e.allErrors,this.keyword=r,this.data=e.data,this.schema=e.schema[r],this.$data=n.$data&&e.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,Ut.schemaRefOrVal)(e,this.schema,r,this.$data),this.schemaType=n.schemaType,this.parentSchema=e.schema,this.params={},this.it=e,this.def=n,this.$data)this.schemaCode=e.gen.const("vSchema",Pm(this.$data,e));else if(this.schemaCode=this.schemaValue,!(0,ts.validSchemaType)(this.schema,n.schemaType,n.allowUndefined))throw new Error(`${r} value must be ${JSON.stringify(n.schemaType)}`);("code"in n?n.trackErrors:n.errors!==!1)&&(this.errsCount=e.gen.const("_errs",X.default.errors))}result(e,n,r){this.failResult((0,B.not)(e),n,r)}failResult(e,n,r){this.gen.if(e),r?r():this.error(),n?(this.gen.else(),n(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(e,n){this.failResult((0,B.not)(e),void 0,n)}fail(e){if(e===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(e),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(e){if(!this.$data)return this.fail(e);let{schemaCode:n}=this;this.fail((0,B._)`${n} !== undefined && (${(0,B.or)(this.invalid$data(),e)})`)}error(e,n,r){if(n){this.setParams(n),this._error(e,r),this.setParams({});return}this._error(e,r)}_error(e,n){(e?es.reportExtraError:es.reportError)(this,this.def.error,n)}$dataError(){(0,es.reportError)(this,this.def.$dataError||es.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,es.resetErrorsCount)(this.gen,this.errsCount)}ok(e){this.allErrors||this.gen.if(e)}setParams(e,n){n?Object.assign(this.params,e):this.params=e}block$data(e,n,r=B.nil){this.gen.block(()=>{this.check$data(e,r),n()})}check$data(e=B.nil,n=B.nil){if(!this.$data)return;let{gen:r,schemaCode:s,schemaType:o,def:i}=this;r.if((0,B.or)((0,B._)`${s} === undefined`,n)),e!==B.nil&&r.assign(e,!0),(o.length||i.validateSchema)&&(r.elseIf(this.invalid$data()),this.$dataError(),e!==B.nil&&r.assign(e,!1)),r.else()}invalid$data(){let{gen:e,schemaCode:n,schemaType:r,def:s,it:o}=this;return(0,B.or)(i(),a());function i(){if(r.length){if(!(n instanceof B.Name))throw new Error("ajv implementation error");let l=Array.isArray(r)?r:[r];return(0,B._)`${(0,Go.checkDataTypes)(l,n,o.opts.strictNumbers,Go.DataType.Wrong)}`}return B.nil}function a(){if(s.validateSchema){let l=e.scopeValue("validate$data",{ref:s.validateSchema});return(0,B._)`!${l}(${n})`}return B.nil}}subschema(e,n){let r=(0,uc.getSubschema)(this.it,e);(0,uc.extendSubschemaData)(r,this.it,e),(0,uc.extendSubschemaMode)(r,e);let s={...this.it,...r,items:void 0,props:void 0};return xx(s,n),s}mergeEvaluated(e,n){let{it:r,gen:s}=this;r.opts.unevaluated&&(r.props!==!0&&e.props!==void 0&&(r.props=Ut.mergeEvaluated.props(s,e.props,r.props,n)),r.items!==!0&&e.items!==void 0&&(r.items=Ut.mergeEvaluated.items(s,e.items,r.items,n)))}mergeValidEvaluated(e,n){let{it:r,gen:s}=this;if(r.opts.unevaluated&&(r.props!==!0||r.items!==!0))return s.if(n,()=>this.mergeEvaluated(e,B.Name)),!0}};sn.KeywordCxt=Wo;function Em(t,e,n,r){let s=new Wo(t,n,e);"code"in n?n.code(s,r):s.$data&&n.validate?(0,ts.funcKeywordCode)(s,n):"macro"in n?(0,ts.macroKeywordCode)(s,n):(n.compile||n.validate)&&(0,ts.funcKeywordCode)(s,n)}var Mx=/^\/(?:[^~]|~0|~1)*$/,qx=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function Pm(t,{dataLevel:e,dataNames:n,dataPathArr:r}){let s,o;if(t==="")return X.default.rootData;if(t[0]==="/"){if(!Mx.test(t))throw new Error(`Invalid JSON-pointer: ${t}`);s=t,o=X.default.rootData}else{let u=qx.exec(t);if(!u)throw new Error(`Invalid JSON-pointer: ${t}`);let p=+u[1];if(s=u[2],s==="#"){if(p>=e)throw new Error(l("property/index",p));return r[e-p]}if(p>e)throw new Error(l("data",p));if(o=n[e-p],!s)return o}let i=o,a=s.split("/");for(let u of a)u&&(o=(0,B._)`${o}${(0,B.getProperty)((0,Ut.unescapeJsonPointer)(u))}`,i=(0,B._)`${i} && ${o}`);return i;function l(u,p){return`Cannot access ${u} ${p} levels up, current level is ${e}`}}sn.getData=Pm});var Jo=M(mc=>{"use strict";Object.defineProperty(mc,"__esModule",{value:!0});var fc=class extends Error{constructor(e){super("validation failed"),this.errors=e,this.ajv=this.validation=!0}};mc.default=fc});var rs=M(yc=>{"use strict";Object.defineProperty(yc,"__esModule",{value:!0});var gc=Qr(),bc=class extends Error{constructor(e,n,r,s){super(s||`can't resolve reference ${r} from id ${n}`),this.missingRef=(0,gc.resolveUrl)(e,n,r),this.missingSchema=(0,gc.normalizeId)((0,gc.getFullPath)(e,this.missingRef))}};yc.default=bc});var Zo=M(dt=>{"use strict";Object.defineProperty(dt,"__esModule",{value:!0});dt.resolveSchema=dt.getCompilingSchema=dt.resolveRef=dt.compileSchema=dt.SchemaEnv=void 0;var yt=te(),zx=Jo(),_n=Dt(),wt=Qr(),Am=ue(),Bx=ns(),nr=class{constructor(e){var n;this.refs={},this.dynamicAnchors={};let r;typeof e.schema=="object"&&(r=e.schema),this.schema=e.schema,this.schemaId=e.schemaId,this.root=e.root||this,this.baseId=(n=e.baseId)!==null&&n!==void 0?n:(0,wt.normalizeId)(r?.[e.schemaId||"$id"]),this.schemaPath=e.schemaPath,this.localRefs=e.localRefs,this.meta=e.meta,this.$async=r?.$async,this.refs={}}};dt.SchemaEnv=nr;function vc(t){let e=Im.call(this,t);if(e)return e;let n=(0,wt.getFullPath)(this.opts.uriResolver,t.root.baseId),{es5:r,lines:s}=this.opts.code,{ownProperties:o}=this.opts,i=new yt.CodeGen(this.scope,{es5:r,lines:s,ownProperties:o}),a;t.$async&&(a=i.scopeValue("Error",{ref:zx.default,code:(0,yt._)`require("ajv/dist/runtime/validation_error").default`}));let l=i.scopeName("validate");t.validateName=l;let u={gen:i,allErrors:this.opts.allErrors,data:_n.default.data,parentData:_n.default.parentData,parentDataProperty:_n.default.parentDataProperty,dataNames:[_n.default.data],dataPathArr:[yt.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:i.scopeValue("schema",this.opts.code.source===!0?{ref:t.schema,code:(0,yt.stringify)(t.schema)}:{ref:t.schema}),validateName:l,ValidationError:a,schema:t.schema,schemaEnv:t,rootId:n,baseId:t.baseId||n,schemaPath:yt.nil,errSchemaPath:t.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,yt._)`""`,opts:this.opts,self:this},p;try{this._compilations.add(t),(0,Bx.validateFunctionCode)(u),i.optimize(this.opts.code.optimize);let g=i.toString();p=`${i.scopeRefs(_n.default.scope)}return ${g}`,this.opts.code.process&&(p=this.opts.code.process(p,t));let b=new Function(`${_n.default.self}`,`${_n.default.scope}`,p)(this,this.scope.get());if(this.scope.value(l,{ref:b}),b.errors=null,b.schema=t.schema,b.schemaEnv=t,t.$async&&(b.$async=!0),this.opts.code.source===!0&&(b.source={validateName:l,validateCode:g,scopeValues:i._values}),this.opts.unevaluated){let{props:S,items:T}=u;b.evaluated={props:S instanceof yt.Name?void 0:S,items:T instanceof yt.Name?void 0:T,dynamicProps:S instanceof yt.Name,dynamicItems:T instanceof yt.Name},b.source&&(b.source.evaluated=(0,yt.stringify)(b.evaluated))}return t.validate=b,t}catch(g){throw delete t.validate,delete t.validateName,p&&this.logger.error("Error compiling schema, function code:",p),g}finally{this._compilations.delete(t)}}dt.compileSchema=vc;function Fx(t,e,n){var r;n=(0,wt.resolveUrl)(this.opts.uriResolver,e,n);let s=t.refs[n];if(s)return s;let o=Vx.call(this,t,n);if(o===void 0){let i=(r=t.localRefs)===null||r===void 0?void 0:r[n],{schemaId:a}=this.opts;i&&(o=new nr({schema:i,schemaId:a,root:t,baseId:e}))}if(o!==void 0)return t.refs[n]=Hx.call(this,o)}dt.resolveRef=Fx;function Hx(t){return(0,wt.inlineRef)(t.schema,this.opts.inlineRefs)?t.schema:t.validate?t:vc.call(this,t)}function Im(t){for(let e of this._compilations)if(Kx(e,t))return e}dt.getCompilingSchema=Im;function Kx(t,e){return t.schema===e.schema&&t.root===e.root&&t.baseId===e.baseId}function Vx(t,e){let n;for(;typeof(n=this.refs[e])=="string";)e=n;return n||this.schemas[e]||Yo.call(this,t,e)}function Yo(t,e){let n=this.opts.uriResolver.parse(e),r=(0,wt._getFullPath)(this.opts.uriResolver,n),s=(0,wt.getFullPath)(this.opts.uriResolver,t.baseId,void 0);if(Object.keys(t.schema).length>0&&r===s)return wc.call(this,n,t);let o=(0,wt.normalizeId)(r),i=this.refs[o]||this.schemas[o];if(typeof i=="string"){let a=Yo.call(this,t,i);return typeof a?.schema!="object"?void 0:wc.call(this,n,a)}if(typeof i?.schema=="object"){if(i.validate||vc.call(this,i),o===(0,wt.normalizeId)(e)){let{schema:a}=i,{schemaId:l}=this.opts,u=a[l];return u&&(s=(0,wt.resolveUrl)(this.opts.uriResolver,s,u)),new nr({schema:a,schemaId:l,root:t,baseId:s})}return wc.call(this,n,i)}}dt.resolveSchema=Yo;var Gx=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function wc(t,{baseId:e,schema:n,root:r}){var s;if(((s=t.fragment)===null||s===void 0?void 0:s[0])!=="/")return;for(let a of t.fragment.slice(1).split("/")){if(typeof n=="boolean")return;let l=n[(0,Am.unescapeFragment)(a)];if(l===void 0)return;n=l;let u=typeof n=="object"&&n[this.opts.schemaId];!Gx.has(a)&&u&&(e=(0,wt.resolveUrl)(this.opts.uriResolver,e,u))}let o;if(typeof n!="boolean"&&n.$ref&&!(0,Am.schemaHasRulesButRef)(n,this.RULES)){let a=(0,wt.resolveUrl)(this.opts.uriResolver,e,n.$ref);o=Yo.call(this,r,a)}let{schemaId:i}=this.opts;if(o=o||new nr({schema:n,schemaId:i,root:r,baseId:e}),o.schema!==o.root.schema)return o}});var Cm=M((mj,Wx)=>{Wx.exports={$id:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description:"Meta-schema for $data reference (JSON AnySchema extension proposal)",type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1}});var _c=M((gj,Um)=>{"use strict";var Jx=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),Nm=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u),kc=RegExp.prototype.test.bind(/^[\da-f]{2}$/iu),Lm=RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu),Yx=RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);function Sc(t){let e="",n=0,r=0;for(r=0;r<t.length;r++)if(n=t[r].charCodeAt(0),n!==48){if(!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return"";e+=t[r];break}for(r+=1;r<t.length;r++){if(n=t[r].charCodeAt(0),!(n>=48&&n<=57||n>=65&&n<=70||n>=97&&n<=102))return"";e+=t[r]}return e}var Zx=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function Om(t){return t.length=0,!0}function Xx(t,e,n){if(t.length){let r=Sc(t);if(r!=="")e.push(r);else return n.error=!0,!1;t.length=0}return!0}function Qx(t){let e=0,n={error:!1,address:"",zone:""},r=[],s=[],o=!1,i=!1,a=Xx;for(let l=0;l<t.length;l++){let u=t[l];if(!(u==="["||u==="]"))if(u===":"){if(o===!0&&(i=!0),!a(s,r,n))break;if(++e>7){n.error=!0;break}l>0&&t[l-1]===":"&&(o=!0),r.push(":");continue}else if(u==="%"){if(!a(s,r,n))break;a=Om}else{s.push(u);continue}}return s.length&&(a===Om?n.zone=s.join(""):i?r.push(s.join("")):r.push(Sc(s))),n.address=r.join(""),n}function jm(t){if(eT(t,":")<2)return{host:t,isIPV6:!1};let e=Qx(t);if(e.error)return{host:t,isIPV6:!1};{let n=e.address,r=e.address;return e.zone&&(n+="%"+e.zone,r+="%25"+e.zone),{host:n,isIPV6:!0,escapedHost:r}}}function eT(t,e){let n=0;for(let r=0;r<t.length;r++)t[r]===e&&n++;return n}function tT(t){let e=t,n=[],r=-1,s=0;for(;s=e.length;){if(s===1){if(e===".")break;if(e==="/"){n.push("/");break}else{n.push(e);break}}else if(s===2){if(e[0]==="."){if(e[1]===".")break;if(e[1]==="/"){e=e.slice(2);continue}}else if(e[0]==="/"&&(e[1]==="."||e[1]==="/")){n.push("/");break}}else if(s===3&&e==="/.."){n.length!==0&&n.pop(),n.push("/");break}if(e[0]==="."){if(e[1]==="."){if(e[2]==="/"){e=e.slice(3);continue}}else if(e[1]==="/"){e=e.slice(2);continue}}else if(e[0]==="/"&&e[1]==="."){if(e[2]==="/"){e=e.slice(2);continue}else if(e[2]==="."&&e[3]==="/"){e=e.slice(3),n.length!==0&&n.pop();continue}}if((r=e.indexOf("/",1))===-1){n.push(e);break}else n.push(e.slice(0,r)),e=e.slice(r)}return n.join("")}var nT={"@":"%40","/":"%2F","?":"%3F","#":"%23",":":"%3A"},rT=/[@/?#:]/g,sT=/[@/?#]/g;function Dm(t,e){let n=e?sT:rT;return n.lastIndex=0,t.replace(n,r=>nT[r])}function oT(t,e=!1){if(t.indexOf("%")===-1)return t;let n="";for(let r=0;r<t.length;r++){if(t[r]==="%"&&r+2<t.length){let s=t.slice(r+1,r+3);if(kc(s)){let o=s.toUpperCase(),i=String.fromCharCode(parseInt(o,16));e&&Lm(i)?n+=i:n+="%"+o,r+=2;continue}}n+=t[r]}return n}function iT(t){let e="";for(let n=0;n<t.length;n++){if(t[n]==="%"&&n+2<t.length){let r=t.slice(n+1,n+3);if(kc(r)){let s=r.toUpperCase(),o=String.fromCharCode(parseInt(s,16));o!=="."&&Lm(o)?e+=o:e+="%"+s,n+=2;continue}}Yx(t[n])?e+=t[n]:e+=escape(t[n])}return e}function aT(t){let e="";for(let n=0;n<t.length;n++){if(t[n]==="%"&&n+2<t.length){let r=t.slice(n+1,n+3);if(kc(r)){e+="%"+r.toUpperCase(),n+=2;continue}}e+=escape(t[n])}return e}function lT(t){let e=[];if(t.userinfo!==void 0&&(e.push(t.userinfo),e.push("@")),t.host!==void 0){let n=unescape(t.host);if(!Nm(n)){let r=jm(n);r.isIPV6===!0?n=`[${r.escapedHost}]`:n=Dm(n,!1)}e.push(n)}return(typeof t.port=="number"||typeof t.port=="string")&&(e.push(":"),e.push(String(t.port))),e.length?e.join(""):void 0}Um.exports={nonSimpleDomain:Zx,recomposeAuthority:lT,reescapeHostDelimiters:Dm,normalizePercentEncoding:oT,normalizePathEncoding:iT,escapePreservingEscapes:aT,removeDotSegments:tT,isIPv4:Nm,isUUID:Jx,normalizeIPv6:jm,stringArrayToHexStripped:Sc}});var Fm=M((bj,Bm)=>{"use strict";var{isUUID:cT}=_c(),dT=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,uT=["http","https","ws","wss","urn","urn:uuid"];function pT(t){return uT.indexOf(t)!==-1}function $c(t){return t.secure===!0?!0:t.secure===!1?!1:t.scheme?t.scheme.length===3&&(t.scheme[0]==="w"||t.scheme[0]==="W")&&(t.scheme[1]==="s"||t.scheme[1]==="S")&&(t.scheme[2]==="s"||t.scheme[2]==="S"):!1}function Mm(t){return t.host||(t.error=t.error||"HTTP URIs must have a host."),t}function qm(t){let e=String(t.scheme).toLowerCase()==="https";return(t.port===(e?443:80)||t.port==="")&&(t.port=void 0),t.path||(t.path="/"),t}function hT(t){return t.secure=$c(t),t.resourceName=(t.path||"/")+(t.query?"?"+t.query:""),t.path=void 0,t.query=void 0,t}function fT(t){if((t.port===($c(t)?443:80)||t.port==="")&&(t.port=void 0),typeof t.secure=="boolean"&&(t.scheme=t.secure?"wss":"ws",t.secure=void 0),t.resourceName){let[e,n]=t.resourceName.split("?");t.path=e&&e!=="/"?e:void 0,t.query=n,t.resourceName=void 0}return t.fragment=void 0,t}function mT(t,e){if(!t.path)return t.error="URN can not be parsed",t;let n=t.path.match(dT);if(n){let r=e.scheme||t.scheme||"urn";t.nid=n[1].toLowerCase(),t.nss=n[2];let s=`${r}:${e.nid||t.nid}`,o=xc(s);t.path=void 0,o&&(t=o.parse(t,e))}else t.error=t.error||"URN can not be parsed.";return t}function gT(t,e){if(t.nid===void 0)throw new Error("URN without nid cannot be serialized");let n=e.scheme||t.scheme||"urn",r=t.nid.toLowerCase(),s=`${n}:${e.nid||r}`,o=xc(s);o&&(t=o.serialize(t,e));let i=t,a=t.nss;return i.path=`${r||e.nid}:${a}`,e.skipEscape=!0,i}function bT(t,e){let n=t;return n.uuid=n.nss,n.nss=void 0,!e.tolerant&&(!n.uuid||!cT(n.uuid))&&(n.error=n.error||"UUID is not valid."),n}function yT(t){let e=t;return e.nss=(t.uuid||"").toLowerCase(),e}var zm={scheme:"http",domainHost:!0,parse:Mm,serialize:qm},wT={scheme:"https",domainHost:zm.domainHost,parse:Mm,serialize:qm},Xo={scheme:"ws",domainHost:!0,parse:hT,serialize:fT},vT={scheme:"wss",domainHost:Xo.domainHost,parse:Xo.parse,serialize:Xo.serialize},kT={scheme:"urn",parse:mT,serialize:gT,skipNormalize:!0},ST={scheme:"urn:uuid",parse:bT,serialize:yT,skipNormalize:!0},Qo={http:zm,https:wT,ws:Xo,wss:vT,urn:kT,"urn:uuid":ST};Object.setPrototypeOf(Qo,null);function xc(t){return t&&(Qo[t]||Qo[t.toLowerCase()])||void 0}Bm.exports={wsIsSecure:$c,SCHEMES:Qo,isValidSchemeName:pT,getSchemeHandler:xc}});var Wm=M((yj,ni)=>{"use strict";var{normalizeIPv6:_T,removeDotSegments:ss,recomposeAuthority:$T,normalizePercentEncoding:xT,normalizePathEncoding:TT,escapePreservingEscapes:RT,reescapeHostDelimiters:ET,isIPv4:PT,nonSimpleDomain:AT}=_c(),{SCHEMES:IT,getSchemeHandler:Km}=Fm();function CT(t,e){return typeof t=="string"?t=MT(t,e):typeof t=="object"&&(t=ti($n(t,e),e)),t}function OT(t,e,n){let r=n?Object.assign({scheme:"null"},n):{scheme:"null"},{parsed:s,malformedAuthorityOrPort:o}=ei(t,r),{parsed:i,malformedAuthorityOrPort:a}=ei(e,r);if(o||a)throw new Error(s.error||i.error||"URI is malformed.");let l=Vm(s,i,r,!0);return r.skipEscape=!0,$n(l,r)}function Vm(t,e,n,r){let s={};return r||(t=ti($n(t,n),n),e=ti($n(e,n),n)),n=n||{},!n.tolerant&&e.scheme?(s.scheme=e.scheme,s.userinfo=e.userinfo,s.host=e.host,s.port=e.port,s.path=ss(e.path||""),s.query=e.query):(e.userinfo!==void 0||e.host!==void 0||e.port!==void 0?(s.userinfo=e.userinfo,s.host=e.host,s.port=e.port,s.path=ss(e.path||""),s.query=e.query):(e.path?(e.path[0]==="/"?s.path=ss(e.path):((t.userinfo!==void 0||t.host!==void 0||t.port!==void 0)&&!t.path?s.path="/"+e.path:t.path?s.path=t.path.slice(0,t.path.lastIndexOf("/")+1)+e.path:s.path=e.path,s.path=ss(s.path)),s.query=e.query):(s.path=t.path,e.query!==void 0?s.query=e.query:s.query=t.query),s.userinfo=t.userinfo,s.host=t.host,s.port=t.port),s.scheme=t.scheme),s.fragment=e.fragment,s}function NT(t,e,n){let r=Hm(t,n),s=Hm(e,n);return r!==void 0&&s!==void 0&&r.toLowerCase()===s.toLowerCase()}function $n(t,e){let n={host:t.host,scheme:t.scheme,userinfo:t.userinfo,port:t.port,path:t.path,query:t.query,nid:t.nid,nss:t.nss,uuid:t.uuid,fragment:t.fragment,reference:t.reference,resourceName:t.resourceName,secure:t.secure,error:""},r=Object.assign({},e),s=[],o=Km(r.scheme||n.scheme);o&&o.serialize&&o.serialize(n,r),n.path!==void 0&&(r.skipEscape?n.path=xT(n.path):(n.path=RT(n.path),n.scheme!==void 0&&(n.path=n.path.split("%3A").join(":")))),r.reference!=="suffix"&&n.scheme&&s.push(n.scheme,":");let i=$T(n);if(i!==void 0&&(r.reference!=="suffix"&&s.push("//"),s.push(i),n.path&&n.path[0]!=="/"&&s.push("/")),n.path!==void 0){let a=n.path;!r.absolutePath&&(!o||!o.absolutePath)&&(a=ss(a)),i===void 0&&a[0]==="/"&&a[1]==="/"&&(a="/%2F"+a.slice(2)),s.push(a)}return n.query!==void 0&&s.push("?",n.query),n.fragment!==void 0&&s.push("#",n.fragment),s.join("")}var LT=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u,jT=/^(?:[^#/:?]+:)?\/\/([^/?#]*)/,DT=/^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;function UT(t,e){if(e[2]!==void 0&&t.path&&t.path[0]!=="/")return'URI path must start with "/" when authority is present.';if(typeof t.port=="number"&&(t.port<0||t.port>65535))return"URI port is malformed."}function ei(t,e){let n=Object.assign({},e),r={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0},s=!1,o=!1;n.reference==="suffix"&&(n.scheme?t=n.scheme+":"+t:t="//"+t);let i=t.match(jT);i!==null&&i[1].indexOf("\\")!==-1&&(r.error="URI authority must not contain a literal backslash.",s=!0);let a=t.match(DT);if(a!==null){let u=a[1],p=u.replace(/[\t\n\r]/g,"");p.length>=2&&(p.slice(0,2)!=="//"?(r.error=r.error||"URI authority must not contain a literal backslash.",s=!0):u.length!==p.length&&(r.error=r.error||"URI authority introducer must not contain whitespace.",s=!0))}let l=t.match(LT);if(l){r.scheme=l[1],r.userinfo=l[3],r.host=l[4],r.port=parseInt(l[5],10),r.path=l[6]||"",r.query=l[7],r.fragment=l[8],isNaN(r.port)&&(r.port=l[5]);let u=UT(r,l);if(u!==void 0&&(r.error=r.error||u,s=!0),r.host)if(PT(r.host)===!1){let x=_T(r.host);r.host=x.host.toLowerCase(),o=x.isIPV6}else o=!0;r.scheme===void 0&&r.userinfo===void 0&&r.host===void 0&&r.port===void 0&&r.query===void 0&&!r.path?r.reference="same-document":r.scheme===void 0?r.reference="relative":r.fragment===void 0?r.reference="absolute":r.reference="uri",n.reference&&n.reference!=="suffix"&&n.reference!==r.reference&&(r.error=r.error||"URI is not a "+n.reference+" reference.");let p=Km(n.scheme||r.scheme);if(!n.unicodeSupport&&(!p||!p.unicodeSupport)&&r.host&&(n.domainHost||p&&p.domainHost)&&o===!1&&AT(r.host))try{r.host=new URL("http://"+r.host).hostname}catch(g){r.error=r.error||"Host's domain name can not be converted to ASCII: "+g}if((!p||p&&!p.skipNormalize)&&(t.indexOf("%")!==-1&&(r.scheme!==void 0&&(r.scheme=unescape(r.scheme)),r.host!==void 0&&(r.host=ET(unescape(r.host),o))),r.path&&(r.path=TT(r.path)),r.fragment))try{r.fragment=encodeURI(decodeURIComponent(r.fragment))}catch{r.error=r.error||"URI malformed"}p&&p.parse&&p.parse(r,n)}else r.error=r.error||"URI can not be parsed.";return{parsed:r,malformedAuthorityOrPort:s}}function ti(t,e){return ei(t,e).parsed}function MT(t,e){return Gm(t,e).normalized}function Gm(t,e){let{parsed:n,malformedAuthorityOrPort:r}=ei(t,e);return{normalized:r?t:$n(n,e),malformedAuthorityOrPort:r}}function Hm(t,e){if(typeof t=="string"){let{normalized:n,malformedAuthorityOrPort:r}=Gm(t,e);return r?void 0:n}if(typeof t=="object")return $n(t,e)}var Tc={SCHEMES:IT,normalize:CT,resolve:OT,resolveComponent:Vm,equal:NT,serialize:$n,parse:ti};ni.exports=Tc;ni.exports.default=Tc;ni.exports.fastUri=Tc});var Ym=M(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});var Jm=Wm();Jm.code='require("ajv/dist/runtime/uri").default';Rc.default=Jm});var sg=M(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.CodeGen=Oe.Name=Oe.nil=Oe.stringify=Oe.str=Oe._=Oe.KeywordCxt=void 0;var qT=ns();Object.defineProperty(Oe,"KeywordCxt",{enumerable:!0,get:function(){return qT.KeywordCxt}});var rr=te();Object.defineProperty(Oe,"_",{enumerable:!0,get:function(){return rr._}});Object.defineProperty(Oe,"str",{enumerable:!0,get:function(){return rr.str}});Object.defineProperty(Oe,"stringify",{enumerable:!0,get:function(){return rr.stringify}});Object.defineProperty(Oe,"nil",{enumerable:!0,get:function(){return rr.nil}});Object.defineProperty(Oe,"Name",{enumerable:!0,get:function(){return rr.Name}});Object.defineProperty(Oe,"CodeGen",{enumerable:!0,get:function(){return rr.CodeGen}});var zT=Jo(),tg=rs(),BT=tc(),os=Zo(),FT=te(),is=Qr(),ri=Xr(),Pc=ue(),Zm=Cm(),HT=Ym(),ng=(t,e)=>new RegExp(t,e);ng.code="new RegExp";var KT=["removeAdditional","useDefaults","coerceTypes"],VT=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),GT={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},WT={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},Xm=200;function JT(t){var e,n,r,s,o,i,a,l,u,p,g,x,b,S,T,R,P,N,D,W,K,Pe,Le,qt,zt;let cn=t.strict,Bt=(e=t.code)===null||e===void 0?void 0:e.optimize,St=Bt===!0||Bt===void 0?1:Bt||0,vs=(r=(n=t.code)===null||n===void 0?void 0:n.regExp)!==null&&r!==void 0?r:ng,Pi=(s=t.uriResolver)!==null&&s!==void 0?s:HT.default;return{strictSchema:(i=(o=t.strictSchema)!==null&&o!==void 0?o:cn)!==null&&i!==void 0?i:!0,strictNumbers:(l=(a=t.strictNumbers)!==null&&a!==void 0?a:cn)!==null&&l!==void 0?l:!0,strictTypes:(p=(u=t.strictTypes)!==null&&u!==void 0?u:cn)!==null&&p!==void 0?p:"log",strictTuples:(x=(g=t.strictTuples)!==null&&g!==void 0?g:cn)!==null&&x!==void 0?x:"log",strictRequired:(S=(b=t.strictRequired)!==null&&b!==void 0?b:cn)!==null&&S!==void 0?S:!1,code:t.code?{...t.code,optimize:St,regExp:vs}:{optimize:St,regExp:vs},loopRequired:(T=t.loopRequired)!==null&&T!==void 0?T:Xm,loopEnum:(R=t.loopEnum)!==null&&R!==void 0?R:Xm,meta:(P=t.meta)!==null&&P!==void 0?P:!0,messages:(N=t.messages)!==null&&N!==void 0?N:!0,inlineRefs:(D=t.inlineRefs)!==null&&D!==void 0?D:!0,schemaId:(W=t.schemaId)!==null&&W!==void 0?W:"$id",addUsedSchema:(K=t.addUsedSchema)!==null&&K!==void 0?K:!0,validateSchema:(Pe=t.validateSchema)!==null&&Pe!==void 0?Pe:!0,validateFormats:(Le=t.validateFormats)!==null&&Le!==void 0?Le:!0,unicodeRegExp:(qt=t.unicodeRegExp)!==null&&qt!==void 0?qt:!0,int32range:(zt=t.int32range)!==null&&zt!==void 0?zt:!0,uriResolver:Pi}}var as=class{constructor(e={}){this.schemas={},this.refs={},this.formats=Object.create(null),this._compilations=new Set,this._loading={},this._cache=new Map,e=this.opts={...e,...JT(e)};let{es5:n,lines:r}=this.opts.code;this.scope=new FT.ValueScope({scope:{},prefixes:VT,es5:n,lines:r}),this.logger=tR(e.logger);let s=e.validateFormats;e.validateFormats=!1,this.RULES=(0,BT.getRules)(),Qm.call(this,GT,e,"NOT SUPPORTED"),Qm.call(this,WT,e,"DEPRECATED","warn"),this._metaOpts=QT.call(this),e.formats&&ZT.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),e.keywords&&XT.call(this,e.keywords),typeof e.meta=="object"&&this.addMetaSchema(e.meta),YT.call(this),e.validateFormats=s}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){let{$data:e,meta:n,schemaId:r}=this.opts,s=Zm;r==="id"&&(s={...Zm},s.id=s.$id,delete s.$id),n&&e&&this.addMetaSchema(s,s[r],!1)}defaultMeta(){let{meta:e,schemaId:n}=this.opts;return this.opts.defaultMeta=typeof e=="object"?e[n]||e:void 0}validate(e,n){let r;if(typeof e=="string"){if(r=this.getSchema(e),!r)throw new Error(`no schema with key or ref "${e}"`)}else r=this.compile(e);let s=r(n);return"$async"in r||(this.errors=r.errors),s}compile(e,n){let r=this._addSchema(e,n);return r.validate||this._compileSchemaEnv(r)}compileAsync(e,n){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");let{loadSchema:r}=this.opts;return s.call(this,e,n);async function s(p,g){await o.call(this,p.$schema);let x=this._addSchema(p,g);return x.validate||i.call(this,x)}async function o(p){p&&!this.getSchema(p)&&await s.call(this,{$ref:p},!0)}async function i(p){try{return this._compileSchemaEnv(p)}catch(g){if(!(g instanceof tg.default))throw g;return a.call(this,g),await l.call(this,g.missingSchema),i.call(this,p)}}function a({missingSchema:p,missingRef:g}){if(this.refs[p])throw new Error(`AnySchema ${p} is loaded but ${g} cannot be resolved`)}async function l(p){let g=await u.call(this,p);this.refs[p]||await o.call(this,g.$schema),this.refs[p]||this.addSchema(g,p,n)}async function u(p){let g=this._loading[p];if(g)return g;try{return await(this._loading[p]=r(p))}finally{delete this._loading[p]}}}addSchema(e,n,r,s=this.opts.validateSchema){if(Array.isArray(e)){for(let i of e)this.addSchema(i,void 0,r,s);return this}let o;if(typeof e=="object"){let{schemaId:i}=this.opts;if(o=e[i],o!==void 0&&typeof o!="string")throw new Error(`schema ${i} must be string`)}return n=(0,is.normalizeId)(n||o),this._checkUnique(n),this.schemas[n]=this._addSchema(e,r,n,s,!0),this}addMetaSchema(e,n,r=this.opts.validateSchema){return this.addSchema(e,n,!0,r),this}validateSchema(e,n){if(typeof e=="boolean")return!0;let r;if(r=e.$schema,r!==void 0&&typeof r!="string")throw new Error("$schema must be a string");if(r=r||this.opts.defaultMeta||this.defaultMeta(),!r)return this.logger.warn("meta-schema not available"),this.errors=null,!0;let s=this.validate(r,e);if(!s&&n){let o="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(o);else throw new Error(o)}return s}getSchema(e){let n;for(;typeof(n=eg.call(this,e))=="string";)e=n;if(n===void 0){let{schemaId:r}=this.opts,s=new os.SchemaEnv({schema:{},schemaId:r});if(n=os.resolveSchema.call(this,s,e),!n)return;this.refs[e]=n}return n.validate||this._compileSchemaEnv(n)}removeSchema(e){if(e instanceof RegExp)return this._removeAllSchemas(this.schemas,e),this._removeAllSchemas(this.refs,e),this;switch(typeof e){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{let n=eg.call(this,e);return typeof n=="object"&&this._cache.delete(n.schema),delete this.schemas[e],delete this.refs[e],this}case"object":{let n=e;this._cache.delete(n);let r=e[this.opts.schemaId];return r&&(r=(0,is.normalizeId)(r),delete this.schemas[r],delete this.refs[r]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(e){for(let n of e)this.addKeyword(n);return this}addKeyword(e,n){let r;if(typeof e=="string")r=e,typeof n=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),n.keyword=r);else if(typeof e=="object"&&n===void 0){if(n=e,r=n.keyword,Array.isArray(r)&&!r.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(rR.call(this,r,n),!n)return(0,Pc.eachItem)(r,o=>Ec.call(this,o)),this;oR.call(this,n);let s={...n,type:(0,ri.getJSONTypes)(n.type),schemaType:(0,ri.getJSONTypes)(n.schemaType)};return(0,Pc.eachItem)(r,s.type.length===0?o=>Ec.call(this,o,s):o=>s.type.forEach(i=>Ec.call(this,o,s,i))),this}getKeyword(e){let n=this.RULES.all[e];return typeof n=="object"?n.definition:!!n}removeKeyword(e){let{RULES:n}=this;delete n.keywords[e],delete n.all[e];for(let r of n.rules){let s=r.rules.findIndex(o=>o.keyword===e);s>=0&&r.rules.splice(s,1)}return this}addFormat(e,n){return typeof n=="string"&&(n=new RegExp(n)),this.formats[e]=n,this}errorsText(e=this.errors,{separator:n=", ",dataVar:r="data"}={}){return!e||e.length===0?"No errors":e.map(s=>`${r}${s.instancePath} ${s.message}`).reduce((s,o)=>s+n+o)}$dataMetaSchema(e,n){let r=this.RULES.all;e=JSON.parse(JSON.stringify(e));for(let s of n){let o=s.split("/").slice(1),i=e;for(let a of o)i=i[a];for(let a in r){let l=r[a];if(typeof l!="object")continue;let{$data:u}=l.definition,p=i[a];u&&p&&(i[a]=rg(p))}}return e}_removeAllSchemas(e,n){for(let r in e){let s=e[r];(!n||n.test(r))&&(typeof s=="string"?delete e[r]:s&&!s.meta&&(this._cache.delete(s.schema),delete e[r]))}}_addSchema(e,n,r,s=this.opts.validateSchema,o=this.opts.addUsedSchema){let i,{schemaId:a}=this.opts;if(typeof e=="object")i=e[a];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof e!="boolean")throw new Error("schema must be object or boolean")}let l=this._cache.get(e);if(l!==void 0)return l;r=(0,is.normalizeId)(i||r);let u=is.getSchemaRefs.call(this,e,r);return l=new os.SchemaEnv({schema:e,schemaId:a,meta:n,baseId:r,localRefs:u}),this._cache.set(l.schema,l),o&&!r.startsWith("#")&&(r&&this._checkUnique(r),this.refs[r]=l),s&&this.validateSchema(e,!0),l}_checkUnique(e){if(this.schemas[e]||this.refs[e])throw new Error(`schema with key or id "${e}" already exists`)}_compileSchemaEnv(e){if(e.meta?this._compileMetaSchema(e):os.compileSchema.call(this,e),!e.validate)throw new Error("ajv implementation error");return e.validate}_compileMetaSchema(e){let n=this.opts;this.opts=this._metaOpts;try{os.compileSchema.call(this,e)}finally{this.opts=n}}};as.ValidationError=zT.default;as.MissingRefError=tg.default;Oe.default=as;function Qm(t,e,n,r="error"){for(let s in t){let o=s;o in e&&this.logger[r](`${n}: option ${s}. ${t[o]}`)}}function eg(t){return t=(0,is.normalizeId)(t),this.schemas[t]||this.refs[t]}function YT(){let t=this.opts.schemas;if(t)if(Array.isArray(t))this.addSchema(t);else for(let e in t)this.addSchema(t[e],e)}function ZT(){for(let t in this.opts.formats){let e=this.opts.formats[t];e&&this.addFormat(t,e)}}function XT(t){if(Array.isArray(t)){this.addVocabulary(t);return}this.logger.warn("keywords option as map is deprecated, pass array");for(let e in t){let n=t[e];n.keyword||(n.keyword=e),this.addKeyword(n)}}function QT(){let t={...this.opts};for(let e of KT)delete t[e];return t}var eR={log(){},warn(){},error(){}};function tR(t){if(t===!1)return eR;if(t===void 0)return console;if(t.log&&t.warn&&t.error)return t;throw new Error("logger must implement log, warn and error methods")}var nR=/^[a-z_$][a-z0-9_$:-]*$/i;function rR(t,e){let{RULES:n}=this;if((0,Pc.eachItem)(t,r=>{if(n.keywords[r])throw new Error(`Keyword ${r} is already defined`);if(!nR.test(r))throw new Error(`Keyword ${r} has invalid name`)}),!!e&&e.$data&&!("code"in e||"validate"in e))throw new Error('$data keyword must have "code" or "validate" function')}function Ec(t,e,n){var r;let s=e?.post;if(n&&s)throw new Error('keyword with "post" flag cannot have "type"');let{RULES:o}=this,i=s?o.post:o.rules.find(({type:l})=>l===n);if(i||(i={type:n,rules:[]},o.rules.push(i)),o.keywords[t]=!0,!e)return;let a={keyword:t,definition:{...e,type:(0,ri.getJSONTypes)(e.type),schemaType:(0,ri.getJSONTypes)(e.schemaType)}};e.before?sR.call(this,i,a,e.before):i.rules.push(a),o.all[t]=a,(r=e.implements)===null||r===void 0||r.forEach(l=>this.addKeyword(l))}function sR(t,e,n){let r=t.rules.findIndex(s=>s.keyword===n);r>=0?t.rules.splice(r,0,e):(t.rules.push(e),this.logger.warn(`rule ${n} is not defined`))}function oR(t){let{metaSchema:e}=t;e!==void 0&&(t.$data&&this.opts.$data&&(e=rg(e)),t.validateSchema=this.compile(e,!0))}var iR={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function rg(t){return{anyOf:[t,iR]}}});var og=M(Ac=>{"use strict";Object.defineProperty(Ac,"__esModule",{value:!0});var aR={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};Ac.default=aR});var cg=M(xn=>{"use strict";Object.defineProperty(xn,"__esModule",{value:!0});xn.callRef=xn.getValidate=void 0;var lR=rs(),ig=ct(),Xe=te(),sr=Dt(),ag=Zo(),si=ue(),cR={keyword:"$ref",schemaType:"string",code(t){let{gen:e,schema:n,it:r}=t,{baseId:s,schemaEnv:o,validateName:i,opts:a,self:l}=r,{root:u}=o;if((n==="#"||n==="#/")&&s===u.baseId)return g();let p=ag.resolveRef.call(l,u,s,n);if(p===void 0)throw new lR.default(r.opts.uriResolver,s,n);if(p instanceof ag.SchemaEnv)return x(p);return b(p);function g(){if(o===u)return oi(t,i,o,o.$async);let S=e.scopeValue("root",{ref:u});return oi(t,(0,Xe._)`${S}.validate`,u,u.$async)}function x(S){let T=lg(t,S);oi(t,T,S,S.$async)}function b(S){let T=e.scopeValue("schema",a.code.source===!0?{ref:S,code:(0,Xe.stringify)(S)}:{ref:S}),R=e.name("valid"),P=t.subschema({schema:S,dataTypes:[],schemaPath:Xe.nil,topSchemaRef:T,errSchemaPath:n},R);t.mergeEvaluated(P),t.ok(R)}}};function lg(t,e){let{gen:n}=t;return e.validate?n.scopeValue("validate",{ref:e.validate}):(0,Xe._)`${n.scopeValue("wrapper",{ref:e})}.validate`}xn.getValidate=lg;function oi(t,e,n,r){let{gen:s,it:o}=t,{allErrors:i,schemaEnv:a,opts:l}=o,u=l.passContext?sr.default.this:Xe.nil;r?p():g();function p(){if(!a.$async)throw new Error("async schema referenced by sync schema");let S=s.let("valid");s.try(()=>{s.code((0,Xe._)`await ${(0,ig.callValidateCode)(t,e,u)}`),b(e),i||s.assign(S,!0)},T=>{s.if((0,Xe._)`!(${T} instanceof ${o.ValidationError})`,()=>s.throw(T)),x(T),i||s.assign(S,!1)}),t.ok(S)}function g(){t.result((0,ig.callValidateCode)(t,e,u),()=>b(e),()=>x(e))}function x(S){let T=(0,Xe._)`${S}.errors`;s.assign(sr.default.vErrors,(0,Xe._)`${sr.default.vErrors} === null ? ${T} : ${sr.default.vErrors}.concat(${T})`),s.assign(sr.default.errors,(0,Xe._)`${sr.default.vErrors}.length`)}function b(S){var T;if(!o.opts.unevaluated)return;let R=(T=n?.validate)===null||T===void 0?void 0:T.evaluated;if(o.props!==!0)if(R&&!R.dynamicProps)R.props!==void 0&&(o.props=si.mergeEvaluated.props(s,R.props,o.props));else{let P=s.var("props",(0,Xe._)`${S}.evaluated.props`);o.props=si.mergeEvaluated.props(s,P,o.props,Xe.Name)}if(o.items!==!0)if(R&&!R.dynamicItems)R.items!==void 0&&(o.items=si.mergeEvaluated.items(s,R.items,o.items));else{let P=s.var("items",(0,Xe._)`${S}.evaluated.items`);o.items=si.mergeEvaluated.items(s,P,o.items,Xe.Name)}}}xn.callRef=oi;xn.default=cR});var dg=M(Ic=>{"use strict";Object.defineProperty(Ic,"__esModule",{value:!0});var dR=og(),uR=cg(),pR=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",dR.default,uR.default];Ic.default=pR});var ug=M(Cc=>{"use strict";Object.defineProperty(Cc,"__esModule",{value:!0});var ii=te(),on=ii.operators,ai={maximum:{okStr:"<=",ok:on.LTE,fail:on.GT},minimum:{okStr:">=",ok:on.GTE,fail:on.LT},exclusiveMaximum:{okStr:"<",ok:on.LT,fail:on.GTE},exclusiveMinimum:{okStr:">",ok:on.GT,fail:on.LTE}},hR={message:({keyword:t,schemaCode:e})=>(0,ii.str)`must be ${ai[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,ii._)`{comparison: ${ai[t].okStr}, limit: ${e}}`},fR={keyword:Object.keys(ai),type:"number",schemaType:"number",$data:!0,error:hR,code(t){let{keyword:e,data:n,schemaCode:r}=t;t.fail$data((0,ii._)`${n} ${ai[e].fail} ${r} || isNaN(${n})`)}};Cc.default=fR});var pg=M(Oc=>{"use strict";Object.defineProperty(Oc,"__esModule",{value:!0});var ls=te(),mR={message:({schemaCode:t})=>(0,ls.str)`must be multiple of ${t}`,params:({schemaCode:t})=>(0,ls._)`{multipleOf: ${t}}`},gR={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:mR,code(t){let{gen:e,data:n,schemaCode:r,it:s}=t,o=s.opts.multipleOfPrecision,i=e.let("res"),a=o?(0,ls._)`Math.abs(Math.round(${i}) - ${i}) > 1e-${o}`:(0,ls._)`${i} !== parseInt(${i})`;t.fail$data((0,ls._)`(${r} === 0 || (${i} = ${n}/${r}, ${a}))`)}};Oc.default=gR});var fg=M(Nc=>{"use strict";Object.defineProperty(Nc,"__esModule",{value:!0});function hg(t){let e=t.length,n=0,r=0,s;for(;r<e;)n++,s=t.charCodeAt(r++),s>=55296&&s<=56319&&r<e&&(s=t.charCodeAt(r),(s&64512)===56320&&r++);return n}Nc.default=hg;hg.code='require("ajv/dist/runtime/ucs2length").default'});var mg=M(Lc=>{"use strict";Object.defineProperty(Lc,"__esModule",{value:!0});var Tn=te(),bR=ue(),yR=fg(),wR={message({keyword:t,schemaCode:e}){let n=t==="maxLength"?"more":"fewer";return(0,Tn.str)`must NOT have ${n} than ${e} characters`},params:({schemaCode:t})=>(0,Tn._)`{limit: ${t}}`},vR={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:wR,code(t){let{keyword:e,data:n,schemaCode:r,it:s}=t,o=e==="maxLength"?Tn.operators.GT:Tn.operators.LT,i=s.opts.unicode===!1?(0,Tn._)`${n}.length`:(0,Tn._)`${(0,bR.useFunc)(t.gen,yR.default)}(${n})`;t.fail$data((0,Tn._)`${i} ${o} ${r}`)}};Lc.default=vR});var gg=M(jc=>{"use strict";Object.defineProperty(jc,"__esModule",{value:!0});var kR=ct(),SR=ue(),or=te(),_R={message:({schemaCode:t})=>(0,or.str)`must match pattern "${t}"`,params:({schemaCode:t})=>(0,or._)`{pattern: ${t}}`},$R={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:_R,code(t){let{gen:e,data:n,$data:r,schema:s,schemaCode:o,it:i}=t,a=i.opts.unicodeRegExp?"u":"";if(r){let{regExp:l}=i.opts.code,u=l.code==="new RegExp"?(0,or._)`new RegExp`:(0,SR.useFunc)(e,l),p=e.let("valid");e.try(()=>e.assign(p,(0,or._)`${u}(${o}, ${a}).test(${n})`),()=>e.assign(p,!1)),t.fail$data((0,or._)`!${p}`)}else{let l=(0,kR.usePattern)(t,s);t.fail$data((0,or._)`!${l}.test(${n})`)}}};jc.default=$R});var bg=M(Dc=>{"use strict";Object.defineProperty(Dc,"__esModule",{value:!0});var cs=te(),xR={message({keyword:t,schemaCode:e}){let n=t==="maxProperties"?"more":"fewer";return(0,cs.str)`must NOT have ${n} than ${e} properties`},params:({schemaCode:t})=>(0,cs._)`{limit: ${t}}`},TR={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:xR,code(t){let{keyword:e,data:n,schemaCode:r}=t,s=e==="maxProperties"?cs.operators.GT:cs.operators.LT;t.fail$data((0,cs._)`Object.keys(${n}).length ${s} ${r}`)}};Dc.default=TR});var yg=M(Uc=>{"use strict";Object.defineProperty(Uc,"__esModule",{value:!0});var ds=ct(),us=te(),RR=ue(),ER={message:({params:{missingProperty:t}})=>(0,us.str)`must have required property '${t}'`,params:({params:{missingProperty:t}})=>(0,us._)`{missingProperty: ${t}}`},PR={keyword:"required",type:"object",schemaType:"array",$data:!0,error:ER,code(t){let{gen:e,schema:n,schemaCode:r,data:s,$data:o,it:i}=t,{opts:a}=i;if(!o&&n.length===0)return;let l=n.length>=a.loopRequired;if(i.allErrors?u():p(),a.strictRequired){let b=t.parentSchema.properties,{definedProperties:S}=t.it;for(let T of n)if(b?.[T]===void 0&&!S.has(T)){let R=i.schemaEnv.baseId+i.errSchemaPath,P=`required property "${T}" is not defined at "${R}" (strictRequired)`;(0,RR.checkStrictMode)(i,P,i.opts.strictRequired)}}function u(){if(l||o)t.block$data(us.nil,g);else for(let b of n)(0,ds.checkReportMissingProp)(t,b)}function p(){let b=e.let("missing");if(l||o){let S=e.let("valid",!0);t.block$data(S,()=>x(b,S)),t.ok(S)}else e.if((0,ds.checkMissingProp)(t,n,b)),(0,ds.reportMissingProp)(t,b),e.else()}function g(){e.forOf("prop",r,b=>{t.setParams({missingProperty:b}),e.if((0,ds.noPropertyInData)(e,s,b,a.ownProperties),()=>t.error())})}function x(b,S){t.setParams({missingProperty:b}),e.forOf(b,r,()=>{e.assign(S,(0,ds.propertyInData)(e,s,b,a.ownProperties)),e.if((0,us.not)(S),()=>{t.error(),e.break()})},us.nil)}}};Uc.default=PR});var wg=M(Mc=>{"use strict";Object.defineProperty(Mc,"__esModule",{value:!0});var ps=te(),AR={message({keyword:t,schemaCode:e}){let n=t==="maxItems"?"more":"fewer";return(0,ps.str)`must NOT have ${n} than ${e} items`},params:({schemaCode:t})=>(0,ps._)`{limit: ${t}}`},IR={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:AR,code(t){let{keyword:e,data:n,schemaCode:r}=t,s=e==="maxItems"?ps.operators.GT:ps.operators.LT;t.fail$data((0,ps._)`${n}.length ${s} ${r}`)}};Mc.default=IR});var li=M(qc=>{"use strict";Object.defineProperty(qc,"__esModule",{value:!0});var vg=cc();vg.code='require("ajv/dist/runtime/equal").default';qc.default=vg});var kg=M(Bc=>{"use strict";Object.defineProperty(Bc,"__esModule",{value:!0});var zc=Xr(),Ne=te(),CR=ue(),OR=li(),NR={message:({params:{i:t,j:e}})=>(0,Ne.str)`must NOT have duplicate items (items ## ${e} and ${t} are identical)`,params:({params:{i:t,j:e}})=>(0,Ne._)`{i: ${t}, j: ${e}}`},LR={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:NR,code(t){let{gen:e,data:n,$data:r,schema:s,parentSchema:o,schemaCode:i,it:a}=t;if(!r&&!s)return;let l=e.let("valid"),u=o.items?(0,zc.getSchemaTypes)(o.items):[];t.block$data(l,p,(0,Ne._)`${i} === false`),t.ok(l);function p(){let S=e.let("i",(0,Ne._)`${n}.length`),T=e.let("j");t.setParams({i:S,j:T}),e.assign(l,!0),e.if((0,Ne._)`${S} > 1`,()=>(g()?x:b)(S,T))}function g(){return u.length>0&&!u.some(S=>S==="object"||S==="array")}function x(S,T){let R=e.name("item"),P=(0,zc.checkDataTypes)(u,R,a.opts.strictNumbers,zc.DataType.Wrong),N=e.const("indices",(0,Ne._)`{}`);e.for((0,Ne._)`;${S}--;`,()=>{e.let(R,(0,Ne._)`${n}[${S}]`),e.if(P,(0,Ne._)`continue`),u.length>1&&e.if((0,Ne._)`typeof ${R} == "string"`,(0,Ne._)`${R} += "_"`),e.if((0,Ne._)`typeof ${N}[${R}] == "number"`,()=>{e.assign(T,(0,Ne._)`${N}[${R}]`),t.error(),e.assign(l,!1).break()}).code((0,Ne._)`${N}[${R}] = ${S}`)})}function b(S,T){let R=(0,CR.useFunc)(e,OR.default),P=e.name("outer");e.label(P).for((0,Ne._)`;${S}--;`,()=>e.for((0,Ne._)`${T} = ${S}; ${T}--;`,()=>e.if((0,Ne._)`${R}(${n}[${S}], ${n}[${T}])`,()=>{t.error(),e.assign(l,!1).break(P)})))}}};Bc.default=LR});var Sg=M(Hc=>{"use strict";Object.defineProperty(Hc,"__esModule",{value:!0});var Fc=te(),jR=ue(),DR=li(),UR={message:"must be equal to constant",params:({schemaCode:t})=>(0,Fc._)`{allowedValue: ${t}}`},MR={keyword:"const",$data:!0,error:UR,code(t){let{gen:e,data:n,$data:r,schemaCode:s,schema:o}=t;r||o&&typeof o=="object"?t.fail$data((0,Fc._)`!${(0,jR.useFunc)(e,DR.default)}(${n}, ${s})`):t.fail((0,Fc._)`${o} !== ${n}`)}};Hc.default=MR});var _g=M(Kc=>{"use strict";Object.defineProperty(Kc,"__esModule",{value:!0});var hs=te(),qR=ue(),zR=li(),BR={message:"must be equal to one of the allowed values",params:({schemaCode:t})=>(0,hs._)`{allowedValues: ${t}}`},FR={keyword:"enum",schemaType:"array",$data:!0,error:BR,code(t){let{gen:e,data:n,$data:r,schema:s,schemaCode:o,it:i}=t;if(!r&&s.length===0)throw new Error("enum must have non-empty array");let a=s.length>=i.opts.loopEnum,l,u=()=>l??(l=(0,qR.useFunc)(e,zR.default)),p;if(a||r)p=e.let("valid"),t.block$data(p,g);else{if(!Array.isArray(s))throw new Error("ajv implementation error");let b=e.const("vSchema",o);p=(0,hs.or)(...s.map((S,T)=>x(b,T)))}t.pass(p);function g(){e.assign(p,!1),e.forOf("v",o,b=>e.if((0,hs._)`${u()}(${n}, ${b})`,()=>e.assign(p,!0).break()))}function x(b,S){let T=s[S];return typeof T=="object"&&T!==null?(0,hs._)`${u()}(${n}, ${b}[${S}])`:(0,hs._)`${n} === ${T}`}}};Kc.default=FR});var $g=M(Vc=>{"use strict";Object.defineProperty(Vc,"__esModule",{value:!0});var HR=ug(),KR=pg(),VR=mg(),GR=gg(),WR=bg(),JR=yg(),YR=wg(),ZR=kg(),XR=Sg(),QR=_g(),eE=[HR.default,KR.default,VR.default,GR.default,WR.default,JR.default,YR.default,ZR.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},XR.default,QR.default];Vc.default=eE});var Wc=M(fs=>{"use strict";Object.defineProperty(fs,"__esModule",{value:!0});fs.validateAdditionalItems=void 0;var Rn=te(),Gc=ue(),tE={message:({params:{len:t}})=>(0,Rn.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Rn._)`{limit: ${t}}`},nE={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:tE,code(t){let{parentSchema:e,it:n}=t,{items:r}=e;if(!Array.isArray(r)){(0,Gc.checkStrictMode)(n,'"additionalItems" is ignored when "items" is not an array of schemas');return}xg(t,r)}};function xg(t,e){let{gen:n,schema:r,data:s,keyword:o,it:i}=t;i.items=!0;let a=n.const("len",(0,Rn._)`${s}.length`);if(r===!1)t.setParams({len:e.length}),t.pass((0,Rn._)`${a} <= ${e.length}`);else if(typeof r=="object"&&!(0,Gc.alwaysValidSchema)(i,r)){let u=n.var("valid",(0,Rn._)`${a} <= ${e.length}`);n.if((0,Rn.not)(u),()=>l(u)),t.ok(u)}function l(u){n.forRange("i",e.length,a,p=>{t.subschema({keyword:o,dataProp:p,dataPropType:Gc.Type.Num},u),i.allErrors||n.if((0,Rn.not)(u),()=>n.break())})}}fs.validateAdditionalItems=xg;fs.default=nE});var Jc=M(ms=>{"use strict";Object.defineProperty(ms,"__esModule",{value:!0});ms.validateTuple=void 0;var Tg=te(),ci=ue(),rE=ct(),sE={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(t){let{schema:e,it:n}=t;if(Array.isArray(e))return Rg(t,"additionalItems",e);n.items=!0,!(0,ci.alwaysValidSchema)(n,e)&&t.ok((0,rE.validateArray)(t))}};function Rg(t,e,n=t.schema){let{gen:r,parentSchema:s,data:o,keyword:i,it:a}=t;p(s),a.opts.unevaluated&&n.length&&a.items!==!0&&(a.items=ci.mergeEvaluated.items(r,n.length,a.items));let l=r.name("valid"),u=r.const("len",(0,Tg._)`${o}.length`);n.forEach((g,x)=>{(0,ci.alwaysValidSchema)(a,g)||(r.if((0,Tg._)`${u} > ${x}`,()=>t.subschema({keyword:i,schemaProp:x,dataProp:x},l)),t.ok(l))});function p(g){let{opts:x,errSchemaPath:b}=a,S=n.length,T=S===g.minItems&&(S===g.maxItems||g[e]===!1);if(x.strictTuples&&!T){let R=`"${i}" is ${S}-tuple, but minItems or maxItems/${e} are not specified or different at path "${b}"`;(0,ci.checkStrictMode)(a,R,x.strictTuples)}}}ms.validateTuple=Rg;ms.default=sE});var Eg=M(Yc=>{"use strict";Object.defineProperty(Yc,"__esModule",{value:!0});var oE=Jc(),iE={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:t=>(0,oE.validateTuple)(t,"items")};Yc.default=iE});var Ag=M(Zc=>{"use strict";Object.defineProperty(Zc,"__esModule",{value:!0});var Pg=te(),aE=ue(),lE=ct(),cE=Wc(),dE={message:({params:{len:t}})=>(0,Pg.str)`must NOT have more than ${t} items`,params:({params:{len:t}})=>(0,Pg._)`{limit: ${t}}`},uE={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:dE,code(t){let{schema:e,parentSchema:n,it:r}=t,{prefixItems:s}=n;r.items=!0,!(0,aE.alwaysValidSchema)(r,e)&&(s?(0,cE.validateAdditionalItems)(t,s):t.ok((0,lE.validateArray)(t)))}};Zc.default=uE});var Ig=M(Xc=>{"use strict";Object.defineProperty(Xc,"__esModule",{value:!0});var ut=te(),di=ue(),pE={message:({params:{min:t,max:e}})=>e===void 0?(0,ut.str)`must contain at least ${t} valid item(s)`:(0,ut.str)`must contain at least ${t} and no more than ${e} valid item(s)`,params:({params:{min:t,max:e}})=>e===void 0?(0,ut._)`{minContains: ${t}}`:(0,ut._)`{minContains: ${t}, maxContains: ${e}}`},hE={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:pE,code(t){let{gen:e,schema:n,parentSchema:r,data:s,it:o}=t,i,a,{minContains:l,maxContains:u}=r;o.opts.next?(i=l===void 0?1:l,a=u):i=1;let p=e.const("len",(0,ut._)`${s}.length`);if(t.setParams({min:i,max:a}),a===void 0&&i===0){(0,di.checkStrictMode)(o,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(a!==void 0&&i>a){(0,di.checkStrictMode)(o,'"minContains" > "maxContains" is always invalid'),t.fail();return}if((0,di.alwaysValidSchema)(o,n)){let T=(0,ut._)`${p} >= ${i}`;a!==void 0&&(T=(0,ut._)`${T} && ${p} <= ${a}`),t.pass(T);return}o.items=!0;let g=e.name("valid");a===void 0&&i===1?b(g,()=>e.if(g,()=>e.break())):i===0?(e.let(g,!0),a!==void 0&&e.if((0,ut._)`${s}.length > 0`,x)):(e.let(g,!1),x()),t.result(g,()=>t.reset());function x(){let T=e.name("_valid"),R=e.let("count",0);b(T,()=>e.if(T,()=>S(R)))}function b(T,R){e.forRange("i",0,p,P=>{t.subschema({keyword:"contains",dataProp:P,dataPropType:di.Type.Num,compositeRule:!0},T),R()})}function S(T){e.code((0,ut._)`${T}++`),a===void 0?e.if((0,ut._)`${T} >= ${i}`,()=>e.assign(g,!0).break()):(e.if((0,ut._)`${T} > ${a}`,()=>e.assign(g,!1).break()),i===1?e.assign(g,!0):e.if((0,ut._)`${T} >= ${i}`,()=>e.assign(g,!0)))}}};Xc.default=hE});var Ng=M(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.validateSchemaDeps=Et.validatePropertyDeps=Et.error=void 0;var Qc=te(),fE=ue(),gs=ct();Et.error={message:({params:{property:t,depsCount:e,deps:n}})=>{let r=e===1?"property":"properties";return(0,Qc.str)`must have ${r} ${n} when property ${t} is present`},params:({params:{property:t,depsCount:e,deps:n,missingProperty:r}})=>(0,Qc._)`{property: ${t},
|
|
1964
1964
|
missingProperty: ${r},
|
|
1965
1965
|
depsCount: ${e},
|
|
1966
|
-
deps: ${n}}`};var mE={keyword:"dependencies",type:"object",schemaType:"object",error:Et.error,code(t){let[e,n]=gE(t);Cg(t,e),Og(t,n)}};function gE({schema:t}){let e={},n={};for(let r in t){if(r==="__proto__")continue;let s=Array.isArray(t[r])?e:n;s[r]=t[r]}return[e,n]}function Cg(t,e=t.schema){let{gen:n,data:r,it:s}=t;if(Object.keys(e).length===0)return;let o=n.let("missing");for(let i in e){let a=e[i];if(a.length===0)continue;let l=(0,gs.propertyInData)(n,r,i,s.opts.ownProperties);t.setParams({property:i,depsCount:a.length,deps:a.join(", ")}),s.allErrors?n.if(l,()=>{for(let u of a)(0,gs.checkReportMissingProp)(t,u)}):(n.if((0,Qc._)`${l} && (${(0,gs.checkMissingProp)(t,a,o)})`),(0,gs.reportMissingProp)(t,o),n.else())}}Et.validatePropertyDeps=Cg;function Og(t,e=t.schema){let{gen:n,data:r,keyword:s,it:o}=t,i=n.name("valid");for(let a in e)(0,fE.alwaysValidSchema)(o,e[a])||(n.if((0,gs.propertyInData)(n,r,a,o.opts.ownProperties),()=>{let l=t.subschema({keyword:s,schemaProp:a},i);t.mergeValidEvaluated(l,i)},()=>n.var(i,!0)),t.ok(i))}Et.validateSchemaDeps=Og;Et.default=mE});var jg=M(ed=>{"use strict";Object.defineProperty(ed,"__esModule",{value:!0});var Lg=te(),bE=ue(),yE={message:"property name must be valid",params:({params:t})=>(0,Lg._)`{propertyName: ${t.propertyName}}`},wE={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:yE,code(t){let{gen:e,schema:n,data:r,it:s}=t;if((0,bE.alwaysValidSchema)(s,n))return;let o=e.name("valid");e.forIn("key",r,i=>{t.setParams({propertyName:i}),t.subschema({keyword:"propertyNames",data:i,dataTypes:["string"],propertyName:i,compositeRule:!0},o),e.if((0,Lg.not)(o),()=>{t.error(!0),s.allErrors||e.break()})}),t.ok(o)}};ed.default=wE});var nd=M(td=>{"use strict";Object.defineProperty(td,"__esModule",{value:!0});var ui=ct(),vt=te(),vE=Dt(),pi=ue(),kE={message:"must NOT have additional properties",params:({params:t})=>(0,vt._)`{additionalProperty: ${t.additionalProperty}}`},SE={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:kE,code(t){let{gen:e,schema:n,parentSchema:r,data:s,errsCount:o,it:i}=t;if(!o)throw new Error("ajv implementation error");let{allErrors:a,opts:l}=i;if(i.props=!0,l.removeAdditional!=="all"&&(0,pi.alwaysValidSchema)(i,n))return;let u=(0,ui.allSchemaProperties)(r.properties),p=(0,ui.allSchemaProperties)(r.patternProperties);g(),t.ok((0,vt._)`${o} === ${vE.default.errors}`);function g(){e.forIn("key",s,R=>{!u.length&&!p.length?S(R):e.if(x(R),()=>S(R))})}function x(R){let P;if(u.length>8){let N=(0,pi.schemaRefOrVal)(i,r.properties,"properties");P=(0,ui.isOwnProperty)(e,N,R)}else u.length?P=(0,vt.or)(...u.map(N=>(0,vt._)`${R} === ${N}`)):P=vt.nil;return p.length&&(P=(0,vt.or)(P,...p.map(N=>(0,vt._)`${(0,ui.usePattern)(t,N)}.test(${R})`))),(0,vt.not)(P)}function b(R){e.code((0,vt._)`delete ${s}[${R}]`)}function S(R){if(l.removeAdditional==="all"||l.removeAdditional&&n===!1){b(R);return}if(n===!1){t.setParams({additionalProperty:R}),t.error(),a||e.break();return}if(typeof n=="object"&&!(0,pi.alwaysValidSchema)(i,n)){let P=e.name("valid");l.removeAdditional==="failing"?(T(R,P,!1),e.if((0,vt.not)(P),()=>{t.reset(),b(R)})):(T(R,P),a||e.if((0,vt.not)(P),()=>e.break()))}}function T(R,P,N){let D={keyword:"additionalProperties",dataProp:R,dataPropType:pi.Type.Str};N===!1&&Object.assign(D,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(D,P)}}};td.default=SE});var Mg=M(sd=>{"use strict";Object.defineProperty(sd,"__esModule",{value:!0});var _E=ns(),Dg=ct(),rd=ue(),Ug=nd(),$E={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,parentSchema:r,data:s,it:o}=t;o.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&Ug.default.code(new _E.KeywordCxt(o,Ug.default,"additionalProperties"));let i=(0,Dg.allSchemaProperties)(n);for(let g of i)o.definedProperties.add(g);o.opts.unevaluated&&i.length&&o.props!==!0&&(o.props=rd.mergeEvaluated.props(e,(0,rd.toHash)(i),o.props));let a=i.filter(g=>!(0,rd.alwaysValidSchema)(o,n[g]));if(a.length===0)return;let l=e.name("valid");for(let g of a)u(g)?p(g):(e.if((0,Dg.propertyInData)(e,s,g,o.opts.ownProperties)),p(g),o.allErrors||e.else().var(l,!0),e.endIf()),t.it.definedProperties.add(g),t.ok(l);function u(g){return o.opts.useDefaults&&!o.compositeRule&&n[g].default!==void 0}function p(g){t.subschema({keyword:"properties",schemaProp:g,dataProp:g},l)}}};sd.default=$E});var Fg=M(od=>{"use strict";Object.defineProperty(od,"__esModule",{value:!0});var qg=ct(),hi=te(),zg=ue(),Bg=ue(),xE={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,data:r,parentSchema:s,it:o}=t,{opts:i}=o,a=(0,qg.allSchemaProperties)(n),l=a.filter(T=>(0,zg.alwaysValidSchema)(o,n[T]));if(a.length===0||l.length===a.length&&(!o.opts.unevaluated||o.props===!0))return;let u=i.strictSchema&&!i.allowMatchingProperties&&s.properties,p=e.name("valid");o.props!==!0&&!(o.props instanceof hi.Name)&&(o.props=(0,Bg.evaluatedPropsToName)(e,o.props));let{props:g}=o;x();function x(){for(let T of a)u&&b(T),o.allErrors?S(T):(e.var(p,!0),S(T),e.if(p))}function b(T){for(let R in u)new RegExp(T).test(R)&&(0,zg.checkStrictMode)(o,`property ${R} matches pattern ${T} (use allowMatchingProperties)`)}function S(T){e.forIn("key",r,R=>{e.if((0,hi._)`${(0,qg.usePattern)(t,T)}.test(${R})`,()=>{let P=l.includes(T);P||t.subschema({keyword:"patternProperties",schemaProp:T,dataProp:R,dataPropType:Bg.Type.Str},p),o.opts.unevaluated&&g!==!0?e.assign((0,hi._)`${g}[${R}]`,!0):!P&&!o.allErrors&&e.if((0,hi.not)(p),()=>e.break())})})}}};od.default=xE});var Hg=M(id=>{"use strict";Object.defineProperty(id,"__esModule",{value:!0});var TE=ue(),RE={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:n,it:r}=t;if((0,TE.alwaysValidSchema)(r,n)){t.fail();return}let s=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},s),t.failResult(s,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};id.default=RE});var Kg=M(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});var EE=ct(),PE={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:EE.validateUnion,error:{message:"must match a schema in anyOf"}};ad.default=PE});var Vg=M(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});var fi=te(),AE=ue(),IE={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,fi._)`{passingSchemas: ${t.passing}}`},CE={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:IE,code(t){let{gen:e,schema:n,parentSchema:r,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&r.discriminator)return;let o=n,i=e.let("valid",!1),a=e.let("passing",null),l=e.name("_valid");t.setParams({passing:a}),e.block(u),t.result(i,()=>t.reset(),()=>t.error(!0));function u(){o.forEach((p,g)=>{let x;(0,AE.alwaysValidSchema)(s,p)?e.var(l,!0):x=t.subschema({keyword:"oneOf",schemaProp:g,compositeRule:!0},l),g>0&&e.if((0,fi._)`${l} && ${i}`).assign(i,!1).assign(a,(0,fi._)`[${a}, ${g}]`).else(),e.if(l,()=>{e.assign(i,!0),e.assign(a,g),x&&t.mergeEvaluated(x,fi.Name)})})}}};ld.default=CE});var Gg=M(cd=>{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});var OE=ue(),NE={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");let s=e.name("valid");n.forEach((o,i)=>{if((0,OE.alwaysValidSchema)(r,o))return;let a=t.subschema({keyword:"allOf",schemaProp:i},s);t.ok(s),t.mergeEvaluated(a)})}};cd.default=NE});var Yg=M(dd=>{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});var mi=te(),Jg=ue(),LE={message:({params:t})=>(0,mi.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,mi._)`{failingKeyword: ${t.ifClause}}`},jE={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:LE,code(t){let{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,Jg.checkStrictMode)(r,'"if" without "then" and "else" is ignored');let s=Wg(r,"then"),o=Wg(r,"else");if(!s&&!o)return;let i=e.let("valid",!0),a=e.name("_valid");if(l(),t.reset(),s&&o){let p=e.let("ifClause");t.setParams({ifClause:p}),e.if(a,u("then",p),u("else",p))}else s?e.if(a,u("then")):e.if((0,mi.not)(a),u("else"));t.pass(i,()=>t.error(!0));function l(){let p=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);t.mergeEvaluated(p)}function u(p,g){return()=>{let x=t.subschema({keyword:p},a);e.assign(i,a),t.mergeValidEvaluated(x,i),g?e.assign(g,(0,mi._)`${p}`):t.setParams({ifClause:p})}}}};function Wg(t,e){let n=t.schema[e];return n!==void 0&&!(0,Jg.alwaysValidSchema)(t,n)}dd.default=jE});var Zg=M(ud=>{"use strict";Object.defineProperty(ud,"__esModule",{value:!0});var DE=ue(),UE={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,DE.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};ud.default=UE});var Xg=M(pd=>{"use strict";Object.defineProperty(pd,"__esModule",{value:!0});var ME=Wc(),qE=Eg(),zE=Jc(),BE=Ag(),FE=Ig(),HE=Ng(),KE=jg(),VE=nd(),GE=Mg(),WE=Fg(),JE=Hg(),YE=Kg(),ZE=Vg(),XE=Gg(),QE=Yg(),e0=Zg();function t0(t=!1){let e=[JE.default,YE.default,ZE.default,XE.default,QE.default,e0.default,KE.default,VE.default,HE.default,GE.default,WE.default];return t?e.push(qE.default,BE.default):e.push(ME.default,zE.default),e.push(FE.default),e}pd.default=t0});var Qg=M(hd=>{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});var _e=te(),n0={message:({schemaCode:t})=>(0,_e.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,_e._)`{format: ${t}}`},r0={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:n0,code(t,e){let{gen:n,data:r,$data:s,schema:o,schemaCode:i,it:a}=t,{opts:l,errSchemaPath:u,schemaEnv:p,self:g}=a;if(!l.validateFormats)return;s?x():b();function x(){let S=n.scopeValue("formats",{ref:g.formats,code:l.code.formats}),T=n.const("fDef",(0,_e._)`${S}[${i}]`),R=n.let("fType"),P=n.let("format");n.if((0,_e._)`typeof ${T} == "object" && !(${T} instanceof RegExp)`,()=>n.assign(R,(0,_e._)`${T}.type || "string"`).assign(P,(0,_e._)`${T}.validate`),()=>n.assign(R,(0,_e._)`"string"`).assign(P,T)),t.fail$data((0,_e.or)(N(),D()));function N(){return l.strictSchema===!1?_e.nil:(0,_e._)`${i} && !${P}`}function D(){let W=p.$async?(0,_e._)`(${T}.async ? await ${P}(${r}) : ${P}(${r}))`:(0,_e._)`${P}(${r})`,K=(0,_e._)`(typeof ${P} == "function" ? ${W} : ${P}.test(${r}))`;return(0,_e._)`${P} && ${P} !== true && ${R} === ${e} && !${K}`}}function b(){let S=g.formats[o];if(!S){N();return}if(S===!0)return;let[T,R,P]=D(S);T===e&&t.pass(W());function N(){if(l.strictSchema===!1){g.logger.warn(K());return}throw new Error(K());function K(){return`unknown format "${o}" ignored in schema at path "${u}"`}}function D(K){let Pe=K instanceof RegExp?(0,_e.regexpCode)(K):l.code.formats?(0,_e._)`${l.code.formats}${(0,_e.getProperty)(o)}`:void 0,Le=n.scopeValue("formats",{key:o,ref:K,code:Pe});return typeof K=="object"&&!(K instanceof RegExp)?[K.type||"string",K.validate,(0,_e._)`${Le}.validate`]:["string",K,Le]}function W(){if(typeof S=="object"&&!(S instanceof RegExp)&&S.async){if(!p.$async)throw new Error("async format in sync schema");return(0,_e._)`await ${P}(${r})`}return typeof R=="function"?(0,_e._)`${P}(${r})`:(0,_e._)`${P}.test(${r})`}}}};hd.default=r0});var eb=M(fd=>{"use strict";Object.defineProperty(fd,"__esModule",{value:!0});var s0=Qg(),o0=[s0.default];fd.default=o0});var tb=M(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.contentVocabulary=ir.metadataVocabulary=void 0;ir.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];ir.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var rb=M(md=>{"use strict";Object.defineProperty(md,"__esModule",{value:!0});var i0=dg(),a0=$g(),l0=Xg(),c0=eb(),nb=tb(),d0=[i0.default,a0.default,(0,l0.default)(),c0.default,nb.metadataVocabulary,nb.contentVocabulary];md.default=d0});var ob=M(gi=>{"use strict";Object.defineProperty(gi,"__esModule",{value:!0});gi.DiscrError=void 0;var sb;(function(t){t.Tag="tag",t.Mapping="mapping"})(sb||(gi.DiscrError=sb={}))});var ab=M(bd=>{"use strict";Object.defineProperty(bd,"__esModule",{value:!0});var ar=te(),gd=ob(),ib=Zo(),u0=rs(),p0=ue(),h0={message:({params:{discrError:t,tagName:e}})=>t===gd.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,ar._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},f0={keyword:"discriminator",type:"object",schemaType:"object",error:h0,code(t){let{gen:e,data:n,schema:r,parentSchema:s,it:o}=t,{oneOf:i}=s;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");let a=r.propertyName;if(typeof a!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!i)throw new Error("discriminator: requires oneOf keyword");let l=e.let("valid",!1),u=e.const("tag",(0,ar._)`${n}${(0,ar.getProperty)(a)}`);e.if((0,ar._)`typeof ${u} == "string"`,()=>p(),()=>t.error(!1,{discrError:gd.DiscrError.Tag,tag:u,tagName:a})),t.ok(l);function p(){let b=x();e.if(!1);for(let S in b)e.elseIf((0,ar._)`${u} === ${S}`),e.assign(l,g(b[S]));e.else(),t.error(!1,{discrError:gd.DiscrError.Mapping,tag:u,tagName:a}),e.endIf()}function g(b){let S=e.name("valid"),T=t.subschema({keyword:"oneOf",schemaProp:b},S);return t.mergeEvaluated(T,ar.Name),S}function x(){var b;let S={},T=P(s),R=!0;for(let W=0;W<i.length;W++){let K=i[W];if(K?.$ref&&!(0,p0.schemaHasRulesButRef)(K,o.self.RULES)){let Le=K.$ref;if(K=ib.resolveRef.call(o.self,o.schemaEnv.root,o.baseId,Le),K instanceof ib.SchemaEnv&&(K=K.schema),K===void 0)throw new u0.default(o.opts.uriResolver,o.baseId,Le)}let Pe=(b=K?.properties)===null||b===void 0?void 0:b[a];if(typeof Pe!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);R=R&&(T||P(K)),N(Pe,W)}if(!R)throw new Error(`discriminator: "${a}" must be required`);return S;function P({required:W}){return Array.isArray(W)&&W.includes(a)}function N(W,K){if(W.const)D(W.const,K);else if(W.enum)for(let Pe of W.enum)D(Pe,K);else throw new Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function D(W,K){if(typeof W!="string"||W in S)throw new Error(`discriminator: "${a}" values must be unique strings`);S[W]=K}}}};bd.default=f0});var lb=M((i1,m0)=>{m0.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var wd=M((ye,yd)=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.MissingRefError=ye.ValidationError=ye.CodeGen=ye.Name=ye.nil=ye.stringify=ye.str=ye._=ye.KeywordCxt=ye.Ajv=void 0;var g0=sg(),b0=rb(),y0=ab(),cb=lb(),w0=["/properties"],bi="http://json-schema.org/draft-07/schema",lr=class extends g0.default{_addVocabularies(){super._addVocabularies(),b0.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(y0.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(cb,w0):cb;this.addMetaSchema(e,bi,!1),this.refs["http://json-schema.org/schema"]=bi}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(bi)?bi:void 0)}};ye.Ajv=lr;yd.exports=ye=lr;yd.exports.Ajv=lr;Object.defineProperty(ye,"__esModule",{value:!0});ye.default=lr;var v0=ns();Object.defineProperty(ye,"KeywordCxt",{enumerable:!0,get:function(){return v0.KeywordCxt}});var cr=te();Object.defineProperty(ye,"_",{enumerable:!0,get:function(){return cr._}});Object.defineProperty(ye,"str",{enumerable:!0,get:function(){return cr.str}});Object.defineProperty(ye,"stringify",{enumerable:!0,get:function(){return cr.stringify}});Object.defineProperty(ye,"nil",{enumerable:!0,get:function(){return cr.nil}});Object.defineProperty(ye,"Name",{enumerable:!0,get:function(){return cr.Name}});Object.defineProperty(ye,"CodeGen",{enumerable:!0,get:function(){return cr.CodeGen}});var k0=Jo();Object.defineProperty(ye,"ValidationError",{enumerable:!0,get:function(){return k0.default}});var S0=rs();Object.defineProperty(ye,"MissingRefError",{enumerable:!0,get:function(){return S0.default}})});var bb=M(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.formatNames=At.fastFormats=At.fullFormats=void 0;function Pt(t,e){return{validate:t,compare:e}}At.fullFormats={date:Pt(hb,_d),time:Pt(kd(!0),$d),"date-time":Pt(db(!0),mb),"iso-time":Pt(kd(),fb),"iso-date-time":Pt(db(),gb),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:E0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:L0,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:P0,int32:{type:"number",validate:C0},int64:{type:"number",validate:O0},float:{type:"number",validate:pb},double:{type:"number",validate:pb},password:!0,binary:!0};At.fastFormats={...At.fullFormats,date:Pt(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,_d),time:Pt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,$d),"date-time":Pt(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,mb),"iso-time":Pt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,fb),"iso-date-time":Pt(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,gb),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};At.formatNames=Object.keys(At.fullFormats);function _0(t){return t%4===0&&(t%100!==0||t%400===0)}var $0=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,x0=[0,31,28,31,30,31,30,31,31,30,31,30,31];function hb(t){let e=$0.exec(t);if(!e)return!1;let n=+e[1],r=+e[2],s=+e[3];return r>=1&&r<=12&&s>=1&&s<=(r===2&&_0(n)?29:x0[r])}function _d(t,e){if(t&&e)return t>e?1:t<e?-1:0}var vd=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function kd(t){return function(n){let r=vd.exec(n);if(!r)return!1;let s=+r[1],o=+r[2],i=+r[3],a=r[4],l=r[5]==="-"?-1:1,u=+(r[6]||0),p=+(r[7]||0);if(u>23||p>59||t&&!a)return!1;if(s<=23&&o<=59&&i<60)return!0;let g=o-p*l,x=s-u*l-(g<0?1:0);return(x===23||x===-1)&&(g===59||g===-1)&&i<61}}function $d(t,e){if(!(t&&e))return;let n=new Date("2020-01-01T"+t).valueOf(),r=new Date("2020-01-01T"+e).valueOf();if(n&&r)return n-r}function fb(t,e){if(!(t&&e))return;let n=vd.exec(t),r=vd.exec(e);if(n&&r)return t=n[1]+n[2]+n[3],e=r[1]+r[2]+r[3],t>e?1:t<e?-1:0}var Sd=/t|\s/i;function db(t){let e=kd(t);return function(r){let s=r.split(Sd);return s.length===2&&hb(s[0])&&e(s[1])}}function mb(t,e){if(!(t&&e))return;let n=new Date(t).valueOf(),r=new Date(e).valueOf();if(n&&r)return n-r}function gb(t,e){if(!(t&&e))return;let[n,r]=t.split(Sd),[s,o]=e.split(Sd),i=_d(n,s);if(i!==void 0)return i||$d(r,o)}var T0=/\/|:/,R0=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function E0(t){return T0.test(t)&&R0.test(t)}var ub=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function P0(t){return ub.lastIndex=0,ub.test(t)}var A0=-(2**31),I0=2**31-1;function C0(t){return Number.isInteger(t)&&t<=I0&&t>=A0}function O0(t){return Number.isInteger(t)}function pb(){return!0}var N0=/[^\\]\\Z/;function L0(t){if(N0.test(t))return!1;try{return new RegExp(t),!0}catch{return!1}}});var yb=M(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.formatLimitDefinition=void 0;var j0=wd(),kt=te(),an=kt.operators,yi={formatMaximum:{okStr:"<=",ok:an.LTE,fail:an.GT},formatMinimum:{okStr:">=",ok:an.GTE,fail:an.LT},formatExclusiveMaximum:{okStr:"<",ok:an.LT,fail:an.GTE},formatExclusiveMinimum:{okStr:">",ok:an.GT,fail:an.LTE}},D0={message:({keyword:t,schemaCode:e})=>(0,kt.str)`should be ${yi[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,kt._)`{comparison: ${yi[t].okStr}, limit: ${e}}`};dr.formatLimitDefinition={keyword:Object.keys(yi),type:"string",schemaType:"string",$data:!0,error:D0,code(t){let{gen:e,data:n,schemaCode:r,keyword:s,it:o}=t,{opts:i,self:a}=o;if(!i.validateFormats)return;let l=new j0.KeywordCxt(o,a.RULES.all.format.definition,"format");l.$data?u():p();function u(){let x=e.scopeValue("formats",{ref:a.formats,code:i.code.formats}),b=e.const("fmt",(0,kt._)`${x}[${l.schemaCode}]`);t.fail$data((0,kt.or)((0,kt._)`typeof ${b} != "object"`,(0,kt._)`${b} instanceof RegExp`,(0,kt._)`typeof ${b}.compare != "function"`,g(b)))}function p(){let x=l.schema,b=a.formats[x];if(!b||b===!0)return;if(typeof b!="object"||b instanceof RegExp||typeof b.compare!="function")throw new Error(`"${s}": format "${x}" does not define "compare" function`);let S=e.scopeValue("formats",{key:x,ref:b,code:i.code.formats?(0,kt._)`${i.code.formats}${(0,kt.getProperty)(x)}`:void 0});t.fail$data(g(S))}function g(x){return(0,kt._)`${x}.compare(${n}, ${r}) ${yi[s].fail} 0`}},dependencies:["format"]};var U0=t=>(t.addKeyword(dr.formatLimitDefinition),t);dr.default=U0});var Sb=M((bs,kb)=>{"use strict";Object.defineProperty(bs,"__esModule",{value:!0});var ur=bb(),M0=yb(),xd=te(),wb=new xd.Name("fullFormats"),q0=new xd.Name("fastFormats"),Td=(t,e={keywords:!0})=>{if(Array.isArray(e))return vb(t,e,ur.fullFormats,wb),t;let[n,r]=e.mode==="fast"?[ur.fastFormats,q0]:[ur.fullFormats,wb],s=e.formats||ur.formatNames;return vb(t,s,n,r),e.keywords&&(0,M0.default)(t),t};Td.get=(t,e="full")=>{let r=(e==="fast"?ur.fastFormats:ur.fullFormats)[t];if(!r)throw new Error(`Unknown format "${t}"`);return r};function vb(t,e,n,r){var s,o;(s=(o=t.opts.code).formats)!==null&&s!==void 0||(o.formats=(0,xd._)`require("ajv-formats/dist/formats").${r}`);for(let i of e)t.addFormat(i,n[i])}kb.exports=bs=Td;Object.defineProperty(bs,"__esModule",{value:!0});bs.default=Td});function z0(){let t=new _b.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,$b.default)(t),t}var _b,$b,wi,xb=j(()=>{_b=zd(wd(),1),$b=zd(Sb(),1);wi=class{constructor(e){this._ajv=e??z0()}getValidator(e){let n="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return r=>n(r)?{valid:!0,data:r,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}}});var vi,Tb=j(()=>{Wn();vi=class{constructor(e){this._server=e}requestStream(e,n,r){return this._server.requestStream(e,n,r)}createMessageStream(e,n){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let s=e.messages[e.messages.length-1],o=Array.isArray(s.content)?s.content:[s.content],i=o.some(p=>p.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,l=a?Array.isArray(a.content)?a.content:[a.content]:[],u=l.some(p=>p.type==="tool_use");if(i){if(o.some(p=>p.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let p=new Set(l.filter(x=>x.type==="tool_use").map(x=>x.id)),g=new Set(o.filter(x=>x.type==="tool_result").map(x=>x.toolUseId));if(p.size!==g.size||![...p].every(x=>g.has(x)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},qr,n)}elicitInputStream(e,n){let r=this._server.getClientCapabilities(),s=e.mode??"form";switch(s){case"url":{if(!r?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!r?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let o=s==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:o},Gn,n)}async getTask(e,n){return this._server.getTask({taskId:e},n)}async getTaskResult(e,n,r){return this._server.getTaskResult({taskId:e},n,r)}async listTasks(e,n){return this._server.listTasks(e?{cursor:e}:void 0,n)}async cancelTask(e,n){return this._server.cancelTask({taskId:e},n)}}});function Rb(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${n} does not support task creation for tools/call (required for ${e})`);break;default:break}}function Eb(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${n} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var Pb=j(()=>{});var ki,Ab=j(()=>{Of();Wn();xb();Ar();Tb();Pb();ki=class extends jo{constructor(e,n){super(n),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Mr.options.map((r,s)=>[r,s])),this.isMessageIgnored=(r,s)=>{let o=this._loggingLevels.get(s);return o?this.LOG_LEVEL_SEVERITY.get(r)<this.LOG_LEVEL_SEVERITY.get(o):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new wi,this.setRequestHandler(qa,r=>this._oninitialize(r)),this.setNotificationHandler(za,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Wa,async(r,s)=>{let o=s.sessionId||s.requestInfo?.headers["mcp-session-id"]||void 0,{level:i}=r.params,a=Mr.safeParse(i);return a.success&&this._loggingLevels.set(o,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new vi(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Cf(this._capabilities,e)}setRequestHandler(e,n){let s=Jt(e)?.method;if(!s)throw new Error("Schema is missing a method literal");let o=Bn(s);if(typeof o!="string")throw new Error("Schema method literal must be a string");if(o==="tools/call"){let a=async(l,u)=>{let p=Wt(Vn,l);if(!p.success){let S=p.error instanceof Error?p.error.message:String(p.error);throw new z(V.InvalidParams,`Invalid tools/call request: ${S}`)}let{params:g}=p.data,x=await Promise.resolve(n(l,u));if(g.task){let S=Wt(Hn,x);if(!S.success){let T=S.error instanceof Error?S.error.message:String(S.error);throw new z(V.InvalidParams,`Invalid task creation result: ${T}`)}return S.data}let b=Wt($o,x);if(!b.success){let S=b.error instanceof Error?b.error.message:String(b.error);throw new z(V.InvalidParams,`Invalid tools/call result: ${S}`)}return b.data};return super.setRequestHandler(e,a)}return super.setRequestHandler(e,n)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){Eb(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&Rb(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let n=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:Ah.includes(n)?n:La,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},ao)}async createMessage(e,n){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let r=e.messages[e.messages.length-1],s=Array.isArray(r.content)?r.content:[r.content],o=s.some(u=>u.type==="tool_result"),i=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=i?Array.isArray(i.content)?i.content:[i.content]:[],l=a.some(u=>u.type==="tool_use");if(o){if(s.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!l)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(l){let u=new Set(a.filter(g=>g.type==="tool_use").map(g=>g.id)),p=new Set(s.filter(g=>g.type==="tool_result").map(g=>g.toolUseId));if(u.size!==p.size||![...u].every(g=>p.has(g)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},Ja,n):this.request({method:"sampling/createMessage",params:e},qr,n)}async elicitInput(e,n){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let s=e;return this.request({method:"elicitation/create",params:s},Gn,n)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let s=e.mode==="form"?e:{...e,mode:"form"},o=await this.request({method:"elicitation/create",params:s},Gn,n);if(o.action==="accept"&&o.content&&s.requestedSchema)try{let a=this._jsonSchemaValidator.getValidator(s.requestedSchema)(o.content);if(!a.valid)throw new z(V.InvalidParams,`Elicitation response content does not match requested schema: ${a.errorMessage}`)}catch(i){throw i instanceof z?i:new z(V.InternalError,`Error validating elicitation response: ${i instanceof Error?i.message:String(i)}`)}return o}}}createElicitationCompletionNotifier(e,n){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},n)}async listRoots(e,n){return this.request({method:"roots/list",params:e},Ya,n)}async sendLoggingMessage(e,n){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,n))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}});function Rd(t){return!!t&&typeof t=="object"&&Cb in t}function Ob(t){return t[Cb]?.complete}var Cb,Ib,Nb=j(()=>{Cb=Symbol.for("mcp.completable");(function(t){t.Completable="McpCompletable"})(Ib||(Ib={}))});var Lb=j(()=>{});function F0(t){let e=[];if(t.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(t.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${t.length})`]};if(t.includes(" ")&&e.push("Tool name contains spaces, which may cause parsing issues"),t.includes(",")&&e.push("Tool name contains commas, which may cause parsing issues"),(t.startsWith("-")||t.endsWith("-"))&&e.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(t.startsWith(".")||t.endsWith("."))&&e.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!B0.test(t)){let n=t.split("").filter(r=>!/[A-Za-z0-9._-]/.test(r)).filter((r,s,o)=>o.indexOf(r)===s);return e.push(`Tool name contains invalid characters: ${n.map(r=>`"${r}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:e}}return{isValid:!0,warnings:e}}function H0(t,e){if(e.length>0){console.warn(`Tool name validation warning for "${t}":`);for(let n of e)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function Ed(t){let e=F0(t);return H0(t,e.warnings),e.isValid}var B0,jb=j(()=>{B0=/^[A-Za-z0-9._-]{1,128}$/});var Si,Db=j(()=>{Si=class{constructor(e){this._mcpServer=e}registerToolTask(e,n,r){let s={taskSupport:"required",...n.execution};if(s.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,s,n._meta,r)}}});import{ZodOptional as K0}from"zod";function qb(t){return t!==null&&typeof t=="object"&&"parse"in t&&typeof t.parse=="function"&&"safeParse"in t&&typeof t.safeParse=="function"}function zb(t){return"_def"in t||"_zod"in t||qb(t)}function Pd(t){return typeof t!="object"||t===null||zb(t)?!1:Object.keys(t).length===0?!0:Object.values(t).some(qb)}function Ub(t){if(t){if(Pd(t))return gn(t);if(!zb(t))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return t}}function G0(t){let e=Jt(t);return e?Object.entries(e).map(([n,r])=>{let s=Eh(r),o=Ph(r);return{name:n,description:s,required:!o}}):[]}function ln(t){let n=Jt(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let r=Bn(n);if(typeof r=="string")return r;throw new Error("Schema method literal must be a string")}function Mb(t){return{completion:{values:t.slice(0,100),total:t.length,hasMore:t.length>100}}}var _i,V0,ys,Bb=j(()=>{Ab();Ar();Ol();Wn();Nb();Lb();jb();Db();_i=class{constructor(e,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new ki(e,n)}get experimental(){return this._experimental||(this._experimental={tasks:new Si(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(_o)),this.server.assertCanSetRequestHandler(ln(Vn)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(_o,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,n])=>{let r={name:e,title:n.title,description:n.description,inputSchema:(()=>{let s=zn(n.inputSchema);return s?Al(s,{strictUnions:!0,pipeStrategy:"input"}):V0})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let s=zn(n.outputSchema);s&&(r.outputSchema=Al(s,{strictUnions:!0,pipeStrategy:"output"}))}return r})})),this.server.setRequestHandler(Vn,async(e,n)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new z(V.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Tool ${e.params.name} disabled`);let s=!!e.params.task,o=r.execution?.taskSupport,i="createTask"in r.handler;if((o==="required"||o==="optional")&&!i)throw new z(V.InternalError,`Tool ${e.params.name} has taskSupport '${o}' but was not registered with registerToolTask`);if(o==="required"&&!s)throw new z(V.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(o==="optional"&&!s&&i)return await this.handleAutomaticTaskPolling(r,e,n);let a=await this.validateToolInput(r,e.params.arguments,e.params.name),l=await this.executeToolHandler(r,a,n);return s||await this.validateToolOutput(r,l,e.params.name),l}catch(r){if(r instanceof z&&r.code===V.UrlElicitationRequired)throw r;return this.createToolError(r instanceof Error?r.message:String(r))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,n,r){if(!e.inputSchema)return;let o=zn(e.inputSchema)??e.inputSchema,i=await no(o,n);if(!i.success){let a="error"in i?i.error:"Unknown error",l=ro(a);throw new z(V.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${l}`)}return i.data}async validateToolOutput(e,n,r){if(!e.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new z(V.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let s=zn(e.outputSchema),o=await no(s,n.structuredContent);if(!o.success){let i="error"in o?o.error:"Unknown error",a=ro(i);throw new z(V.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${a}`)}}async executeToolHandler(e,n,r){let s=e.handler;if("createTask"in s){if(!r.taskStore)throw new Error("No task store provided.");let i={...r,taskStore:r.taskStore};if(e.inputSchema){let a=s;return await Promise.resolve(a.createTask(n,i))}else{let a=s;return await Promise.resolve(a.createTask(i))}}if(e.inputSchema){let i=s;return await Promise.resolve(i(n,r))}else{let i=s;return await Promise.resolve(i(r))}}async handleAutomaticTaskPolling(e,n,r){if(!r.taskStore)throw new Error("No task store provided for task-capable tool.");let s=await this.validateToolInput(e,n.params.arguments,n.params.name),o=e.handler,i={...r,taskStore:r.taskStore},a=s?await Promise.resolve(o.createTask(s,i)):await Promise.resolve(o.createTask(i)),l=a.task.taskId,u=a.task,p=u.pollInterval??5e3;for(;u.status!=="completed"&&u.status!=="failed"&&u.status!=="cancelled";){await new Promise(x=>setTimeout(x,p));let g=await r.taskStore.getTask(l);if(!g)throw new z(V.InternalError,`Task ${l} not found during polling`);u=g}return await r.taskStore.getTaskResult(l)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(ln(xo)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(xo,async e=>{switch(e.params.ref.type){case"ref/prompt":return Vh(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return Gh(e),this.handleResourceCompletion(e,e.params.ref);default:throw new z(V.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,n){let r=this._registeredPrompts[n.name];if(!r)throw new z(V.InvalidParams,`Prompt ${n.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Prompt ${n.name} disabled`);if(!r.argsSchema)return ys;let o=Jt(r.argsSchema)?.[e.params.argument.name];if(!Rd(o))return ys;let i=Ob(o);if(!i)return ys;let a=await i(e.params.argument.value,e.params.context);return Mb(a)}async handleResourceCompletion(e,n){let r=Object.values(this._registeredResourceTemplates).find(i=>i.resourceTemplate.uriTemplate.toString()===n.uri);if(!r){if(this._registeredResources[n.uri])return ys;throw new z(V.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let s=r.resourceTemplate.completeCallback(e.params.argument.name);if(!s)return ys;let o=await s(e.params.argument.value,e.params.context);return Mb(o)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(yo)),this.server.assertCanSetRequestHandler(ln(wo)),this.server.assertCanSetRequestHandler(ln(vo)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(yo,async(e,n)=>{let r=Object.entries(this._registeredResources).filter(([o,i])=>i.enabled).map(([o,i])=>({uri:o,name:i.name,...i.metadata})),s=[];for(let o of Object.values(this._registeredResourceTemplates)){if(!o.resourceTemplate.listCallback)continue;let i=await o.resourceTemplate.listCallback(n);for(let a of i.resources)s.push({...o.metadata,...a})}return{resources:[...r,...s]}}),this.server.setRequestHandler(wo,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,r])=>({name:n,uriTemplate:r.resourceTemplate.uriTemplate.toString(),...r.metadata}))})),this.server.setRequestHandler(vo,async(e,n)=>{let r=new URL(e.params.uri),s=this._registeredResources[r.toString()];if(s){if(!s.enabled)throw new z(V.InvalidParams,`Resource ${r} disabled`);return s.readCallback(r,n)}for(let o of Object.values(this._registeredResourceTemplates)){let i=o.resourceTemplate.uriTemplate.match(r.toString());if(i)return o.readCallback(r,i,n)}throw new z(V.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(ko)),this.server.assertCanSetRequestHandler(ln(So)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ko,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,n])=>({name:e,title:n.title,description:n.description,arguments:n.argsSchema?G0(n.argsSchema):void 0}))})),this.server.setRequestHandler(So,async(e,n)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new z(V.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let s=zn(r.argsSchema),o=await no(s,e.params.arguments);if(!o.success){let l="error"in o?o.error:"Unknown error",u=ro(l);throw new z(V.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${u}`)}let i=o.data,a=r.callback;return await Promise.resolve(a(i,n))}else{let s=r.callback;return await Promise.resolve(s(n))}}),this._promptHandlersInitialized=!0)}resource(e,n,...r){let s;typeof r[0]=="object"&&(s=r.shift());let o=r[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(e,void 0,n,s,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,void 0,n,s,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}registerResource(e,n,r,s){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let o=this._createRegisteredResource(e,r.title,n,r,s);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let o=this._createRegisteredResourceTemplate(e,r.title,n,r,s);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}}_createRegisteredResource(e,n,r,s,o){let i={name:e,title:n,metadata:s,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({uri:null}),update:a=>{typeof a.uri<"u"&&a.uri!==r&&(delete this._registeredResources[r],a.uri&&(this._registeredResources[a.uri]=i)),typeof a.name<"u"&&(i.name=a.name),typeof a.title<"u"&&(i.title=a.title),typeof a.metadata<"u"&&(i.metadata=a.metadata),typeof a.callback<"u"&&(i.readCallback=a.callback),typeof a.enabled<"u"&&(i.enabled=a.enabled),this.sendResourceListChanged()}};return this._registeredResources[r]=i,i}_createRegisteredResourceTemplate(e,n,r,s,o){let i={resourceTemplate:r,title:n,metadata:s,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:u=>{typeof u.name<"u"&&u.name!==e&&(delete this._registeredResourceTemplates[e],u.name&&(this._registeredResourceTemplates[u.name]=i)),typeof u.title<"u"&&(i.title=u.title),typeof u.template<"u"&&(i.resourceTemplate=u.template),typeof u.metadata<"u"&&(i.metadata=u.metadata),typeof u.callback<"u"&&(i.readCallback=u.callback),typeof u.enabled<"u"&&(i.enabled=u.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=i;let a=r.uriTemplate.variableNames;return Array.isArray(a)&&a.some(u=>!!r.completeCallback(u))&&this.setCompletionRequestHandler(),i}_createRegisteredPrompt(e,n,r,s,o){let i={title:n,description:r,argsSchema:s===void 0?void 0:gn(s),callback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:a=>{typeof a.name<"u"&&a.name!==e&&(delete this._registeredPrompts[e],a.name&&(this._registeredPrompts[a.name]=i)),typeof a.title<"u"&&(i.title=a.title),typeof a.description<"u"&&(i.description=a.description),typeof a.argsSchema<"u"&&(i.argsSchema=gn(a.argsSchema)),typeof a.callback<"u"&&(i.callback=a.callback),typeof a.enabled<"u"&&(i.enabled=a.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=i,s&&Object.values(s).some(l=>{let u=l instanceof K0?l._def?.innerType:l;return Rd(u)})&&this.setCompletionRequestHandler(),i}_createRegisteredTool(e,n,r,s,o,i,a,l,u){Ed(e);let p={title:n,description:r,inputSchema:Ub(s),outputSchema:Ub(o),annotations:i,execution:a,_meta:l,handler:u,enabled:!0,disable:()=>p.update({enabled:!1}),enable:()=>p.update({enabled:!0}),remove:()=>p.update({name:null}),update:g=>{typeof g.name<"u"&&g.name!==e&&(typeof g.name=="string"&&Ed(g.name),delete this._registeredTools[e],g.name&&(this._registeredTools[g.name]=p)),typeof g.title<"u"&&(p.title=g.title),typeof g.description<"u"&&(p.description=g.description),typeof g.paramsSchema<"u"&&(p.inputSchema=gn(g.paramsSchema)),typeof g.outputSchema<"u"&&(p.outputSchema=gn(g.outputSchema)),typeof g.callback<"u"&&(p.handler=g.callback),typeof g.annotations<"u"&&(p.annotations=g.annotations),typeof g._meta<"u"&&(p._meta=g._meta),typeof g.enabled<"u"&&(p.enabled=g.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=p,this.setToolRequestHandlers(),this.sendToolListChanged(),p}tool(e,...n){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let r,s,o,i;if(typeof n[0]=="string"&&(r=n.shift()),n.length>1){let l=n[0];if(Pd(l))s=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!Pd(n[0])&&(i=n.shift());else if(typeof l=="object"&&l!==null){if(Object.values(l).some(u=>typeof u=="object"&&u!==null))throw new Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);i=n.shift()}}let a=n[0];return this._createRegisteredTool(e,void 0,r,s,o,i,{taskSupport:"forbidden"},void 0,a)}registerTool(e,n,r){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let{title:s,description:o,inputSchema:i,outputSchema:a,annotations:l,_meta:u}=n;return this._createRegisteredTool(e,s,o,i,a,l,{taskSupport:"forbidden"},u,r)}prompt(e,...n){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let r;typeof n[0]=="string"&&(r=n.shift());let s;n.length>1&&(s=n.shift());let o=n[0],i=this._createRegisteredPrompt(e,void 0,r,s,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),i}registerPrompt(e,n,r){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let{title:s,description:o,argsSchema:i}=n,a=this._createRegisteredPrompt(e,s,o,i,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),a}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,n){return this.server.sendLoggingMessage(e,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}},V0={type:"object",properties:{}};ys={completion:{values:[],hasMore:!1}}});function J0(t){return Uh.parse(JSON.parse(t))}function Fb(t){return JSON.stringify(t)+`
|
|
1966
|
+
deps: ${n}}`};var mE={keyword:"dependencies",type:"object",schemaType:"object",error:Et.error,code(t){let[e,n]=gE(t);Cg(t,e),Og(t,n)}};function gE({schema:t}){let e={},n={};for(let r in t){if(r==="__proto__")continue;let s=Array.isArray(t[r])?e:n;s[r]=t[r]}return[e,n]}function Cg(t,e=t.schema){let{gen:n,data:r,it:s}=t;if(Object.keys(e).length===0)return;let o=n.let("missing");for(let i in e){let a=e[i];if(a.length===0)continue;let l=(0,gs.propertyInData)(n,r,i,s.opts.ownProperties);t.setParams({property:i,depsCount:a.length,deps:a.join(", ")}),s.allErrors?n.if(l,()=>{for(let u of a)(0,gs.checkReportMissingProp)(t,u)}):(n.if((0,Qc._)`${l} && (${(0,gs.checkMissingProp)(t,a,o)})`),(0,gs.reportMissingProp)(t,o),n.else())}}Et.validatePropertyDeps=Cg;function Og(t,e=t.schema){let{gen:n,data:r,keyword:s,it:o}=t,i=n.name("valid");for(let a in e)(0,fE.alwaysValidSchema)(o,e[a])||(n.if((0,gs.propertyInData)(n,r,a,o.opts.ownProperties),()=>{let l=t.subschema({keyword:s,schemaProp:a},i);t.mergeValidEvaluated(l,i)},()=>n.var(i,!0)),t.ok(i))}Et.validateSchemaDeps=Og;Et.default=mE});var jg=M(ed=>{"use strict";Object.defineProperty(ed,"__esModule",{value:!0});var Lg=te(),bE=ue(),yE={message:"property name must be valid",params:({params:t})=>(0,Lg._)`{propertyName: ${t.propertyName}}`},wE={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:yE,code(t){let{gen:e,schema:n,data:r,it:s}=t;if((0,bE.alwaysValidSchema)(s,n))return;let o=e.name("valid");e.forIn("key",r,i=>{t.setParams({propertyName:i}),t.subschema({keyword:"propertyNames",data:i,dataTypes:["string"],propertyName:i,compositeRule:!0},o),e.if((0,Lg.not)(o),()=>{t.error(!0),s.allErrors||e.break()})}),t.ok(o)}};ed.default=wE});var nd=M(td=>{"use strict";Object.defineProperty(td,"__esModule",{value:!0});var ui=ct(),vt=te(),vE=Dt(),pi=ue(),kE={message:"must NOT have additional properties",params:({params:t})=>(0,vt._)`{additionalProperty: ${t.additionalProperty}}`},SE={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:kE,code(t){let{gen:e,schema:n,parentSchema:r,data:s,errsCount:o,it:i}=t;if(!o)throw new Error("ajv implementation error");let{allErrors:a,opts:l}=i;if(i.props=!0,l.removeAdditional!=="all"&&(0,pi.alwaysValidSchema)(i,n))return;let u=(0,ui.allSchemaProperties)(r.properties),p=(0,ui.allSchemaProperties)(r.patternProperties);g(),t.ok((0,vt._)`${o} === ${vE.default.errors}`);function g(){e.forIn("key",s,R=>{!u.length&&!p.length?S(R):e.if(x(R),()=>S(R))})}function x(R){let P;if(u.length>8){let N=(0,pi.schemaRefOrVal)(i,r.properties,"properties");P=(0,ui.isOwnProperty)(e,N,R)}else u.length?P=(0,vt.or)(...u.map(N=>(0,vt._)`${R} === ${N}`)):P=vt.nil;return p.length&&(P=(0,vt.or)(P,...p.map(N=>(0,vt._)`${(0,ui.usePattern)(t,N)}.test(${R})`))),(0,vt.not)(P)}function b(R){e.code((0,vt._)`delete ${s}[${R}]`)}function S(R){if(l.removeAdditional==="all"||l.removeAdditional&&n===!1){b(R);return}if(n===!1){t.setParams({additionalProperty:R}),t.error(),a||e.break();return}if(typeof n=="object"&&!(0,pi.alwaysValidSchema)(i,n)){let P=e.name("valid");l.removeAdditional==="failing"?(T(R,P,!1),e.if((0,vt.not)(P),()=>{t.reset(),b(R)})):(T(R,P),a||e.if((0,vt.not)(P),()=>e.break()))}}function T(R,P,N){let D={keyword:"additionalProperties",dataProp:R,dataPropType:pi.Type.Str};N===!1&&Object.assign(D,{compositeRule:!0,createErrors:!1,allErrors:!1}),t.subschema(D,P)}}};td.default=SE});var Mg=M(sd=>{"use strict";Object.defineProperty(sd,"__esModule",{value:!0});var _E=ns(),Dg=ct(),rd=ue(),Ug=nd(),$E={keyword:"properties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,parentSchema:r,data:s,it:o}=t;o.opts.removeAdditional==="all"&&r.additionalProperties===void 0&&Ug.default.code(new _E.KeywordCxt(o,Ug.default,"additionalProperties"));let i=(0,Dg.allSchemaProperties)(n);for(let g of i)o.definedProperties.add(g);o.opts.unevaluated&&i.length&&o.props!==!0&&(o.props=rd.mergeEvaluated.props(e,(0,rd.toHash)(i),o.props));let a=i.filter(g=>!(0,rd.alwaysValidSchema)(o,n[g]));if(a.length===0)return;let l=e.name("valid");for(let g of a)u(g)?p(g):(e.if((0,Dg.propertyInData)(e,s,g,o.opts.ownProperties)),p(g),o.allErrors||e.else().var(l,!0),e.endIf()),t.it.definedProperties.add(g),t.ok(l);function u(g){return o.opts.useDefaults&&!o.compositeRule&&n[g].default!==void 0}function p(g){t.subschema({keyword:"properties",schemaProp:g,dataProp:g},l)}}};sd.default=$E});var Fg=M(od=>{"use strict";Object.defineProperty(od,"__esModule",{value:!0});var qg=ct(),hi=te(),zg=ue(),Bg=ue(),xE={keyword:"patternProperties",type:"object",schemaType:"object",code(t){let{gen:e,schema:n,data:r,parentSchema:s,it:o}=t,{opts:i}=o,a=(0,qg.allSchemaProperties)(n),l=a.filter(T=>(0,zg.alwaysValidSchema)(o,n[T]));if(a.length===0||l.length===a.length&&(!o.opts.unevaluated||o.props===!0))return;let u=i.strictSchema&&!i.allowMatchingProperties&&s.properties,p=e.name("valid");o.props!==!0&&!(o.props instanceof hi.Name)&&(o.props=(0,Bg.evaluatedPropsToName)(e,o.props));let{props:g}=o;x();function x(){for(let T of a)u&&b(T),o.allErrors?S(T):(e.var(p,!0),S(T),e.if(p))}function b(T){for(let R in u)new RegExp(T).test(R)&&(0,zg.checkStrictMode)(o,`property ${R} matches pattern ${T} (use allowMatchingProperties)`)}function S(T){e.forIn("key",r,R=>{e.if((0,hi._)`${(0,qg.usePattern)(t,T)}.test(${R})`,()=>{let P=l.includes(T);P||t.subschema({keyword:"patternProperties",schemaProp:T,dataProp:R,dataPropType:Bg.Type.Str},p),o.opts.unevaluated&&g!==!0?e.assign((0,hi._)`${g}[${R}]`,!0):!P&&!o.allErrors&&e.if((0,hi.not)(p),()=>e.break())})})}}};od.default=xE});var Hg=M(id=>{"use strict";Object.defineProperty(id,"__esModule",{value:!0});var TE=ue(),RE={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(t){let{gen:e,schema:n,it:r}=t;if((0,TE.alwaysValidSchema)(r,n)){t.fail();return}let s=e.name("valid");t.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},s),t.failResult(s,()=>t.reset(),()=>t.error())},error:{message:"must NOT be valid"}};id.default=RE});var Kg=M(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});var EE=ct(),PE={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:EE.validateUnion,error:{message:"must match a schema in anyOf"}};ad.default=PE});var Vg=M(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});var fi=te(),AE=ue(),IE={message:"must match exactly one schema in oneOf",params:({params:t})=>(0,fi._)`{passingSchemas: ${t.passing}}`},CE={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:IE,code(t){let{gen:e,schema:n,parentSchema:r,it:s}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");if(s.opts.discriminator&&r.discriminator)return;let o=n,i=e.let("valid",!1),a=e.let("passing",null),l=e.name("_valid");t.setParams({passing:a}),e.block(u),t.result(i,()=>t.reset(),()=>t.error(!0));function u(){o.forEach((p,g)=>{let x;(0,AE.alwaysValidSchema)(s,p)?e.var(l,!0):x=t.subschema({keyword:"oneOf",schemaProp:g,compositeRule:!0},l),g>0&&e.if((0,fi._)`${l} && ${i}`).assign(i,!1).assign(a,(0,fi._)`[${a}, ${g}]`).else(),e.if(l,()=>{e.assign(i,!0),e.assign(a,g),x&&t.mergeEvaluated(x,fi.Name)})})}}};ld.default=CE});var Gg=M(cd=>{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});var OE=ue(),NE={keyword:"allOf",schemaType:"array",code(t){let{gen:e,schema:n,it:r}=t;if(!Array.isArray(n))throw new Error("ajv implementation error");let s=e.name("valid");n.forEach((o,i)=>{if((0,OE.alwaysValidSchema)(r,o))return;let a=t.subschema({keyword:"allOf",schemaProp:i},s);t.ok(s),t.mergeEvaluated(a)})}};cd.default=NE});var Yg=M(dd=>{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});var mi=te(),Jg=ue(),LE={message:({params:t})=>(0,mi.str)`must match "${t.ifClause}" schema`,params:({params:t})=>(0,mi._)`{failingKeyword: ${t.ifClause}}`},jE={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:LE,code(t){let{gen:e,parentSchema:n,it:r}=t;n.then===void 0&&n.else===void 0&&(0,Jg.checkStrictMode)(r,'"if" without "then" and "else" is ignored');let s=Wg(r,"then"),o=Wg(r,"else");if(!s&&!o)return;let i=e.let("valid",!0),a=e.name("_valid");if(l(),t.reset(),s&&o){let p=e.let("ifClause");t.setParams({ifClause:p}),e.if(a,u("then",p),u("else",p))}else s?e.if(a,u("then")):e.if((0,mi.not)(a),u("else"));t.pass(i,()=>t.error(!0));function l(){let p=t.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},a);t.mergeEvaluated(p)}function u(p,g){return()=>{let x=t.subschema({keyword:p},a);e.assign(i,a),t.mergeValidEvaluated(x,i),g?e.assign(g,(0,mi._)`${p}`):t.setParams({ifClause:p})}}}};function Wg(t,e){let n=t.schema[e];return n!==void 0&&!(0,Jg.alwaysValidSchema)(t,n)}dd.default=jE});var Zg=M(ud=>{"use strict";Object.defineProperty(ud,"__esModule",{value:!0});var DE=ue(),UE={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:t,parentSchema:e,it:n}){e.if===void 0&&(0,DE.checkStrictMode)(n,`"${t}" without "if" is ignored`)}};ud.default=UE});var Xg=M(pd=>{"use strict";Object.defineProperty(pd,"__esModule",{value:!0});var ME=Wc(),qE=Eg(),zE=Jc(),BE=Ag(),FE=Ig(),HE=Ng(),KE=jg(),VE=nd(),GE=Mg(),WE=Fg(),JE=Hg(),YE=Kg(),ZE=Vg(),XE=Gg(),QE=Yg(),e0=Zg();function t0(t=!1){let e=[JE.default,YE.default,ZE.default,XE.default,QE.default,e0.default,KE.default,VE.default,HE.default,GE.default,WE.default];return t?e.push(qE.default,BE.default):e.push(ME.default,zE.default),e.push(FE.default),e}pd.default=t0});var Qg=M(hd=>{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});var _e=te(),n0={message:({schemaCode:t})=>(0,_e.str)`must match format "${t}"`,params:({schemaCode:t})=>(0,_e._)`{format: ${t}}`},r0={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:n0,code(t,e){let{gen:n,data:r,$data:s,schema:o,schemaCode:i,it:a}=t,{opts:l,errSchemaPath:u,schemaEnv:p,self:g}=a;if(!l.validateFormats)return;s?x():b();function x(){let S=n.scopeValue("formats",{ref:g.formats,code:l.code.formats}),T=n.const("fDef",(0,_e._)`${S}[${i}]`),R=n.let("fType"),P=n.let("format");n.if((0,_e._)`typeof ${T} == "object" && !(${T} instanceof RegExp)`,()=>n.assign(R,(0,_e._)`${T}.type || "string"`).assign(P,(0,_e._)`${T}.validate`),()=>n.assign(R,(0,_e._)`"string"`).assign(P,T)),t.fail$data((0,_e.or)(N(),D()));function N(){return l.strictSchema===!1?_e.nil:(0,_e._)`${i} && !${P}`}function D(){let W=p.$async?(0,_e._)`(${T}.async ? await ${P}(${r}) : ${P}(${r}))`:(0,_e._)`${P}(${r})`,K=(0,_e._)`(typeof ${P} == "function" ? ${W} : ${P}.test(${r}))`;return(0,_e._)`${P} && ${P} !== true && ${R} === ${e} && !${K}`}}function b(){let S=g.formats[o];if(!S){N();return}if(S===!0)return;let[T,R,P]=D(S);T===e&&t.pass(W());function N(){if(l.strictSchema===!1){g.logger.warn(K());return}throw new Error(K());function K(){return`unknown format "${o}" ignored in schema at path "${u}"`}}function D(K){let Pe=K instanceof RegExp?(0,_e.regexpCode)(K):l.code.formats?(0,_e._)`${l.code.formats}${(0,_e.getProperty)(o)}`:void 0,Le=n.scopeValue("formats",{key:o,ref:K,code:Pe});return typeof K=="object"&&!(K instanceof RegExp)?[K.type||"string",K.validate,(0,_e._)`${Le}.validate`]:["string",K,Le]}function W(){if(typeof S=="object"&&!(S instanceof RegExp)&&S.async){if(!p.$async)throw new Error("async format in sync schema");return(0,_e._)`await ${P}(${r})`}return typeof R=="function"?(0,_e._)`${P}(${r})`:(0,_e._)`${P}.test(${r})`}}}};hd.default=r0});var eb=M(fd=>{"use strict";Object.defineProperty(fd,"__esModule",{value:!0});var s0=Qg(),o0=[s0.default];fd.default=o0});var tb=M(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.contentVocabulary=ir.metadataVocabulary=void 0;ir.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];ir.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var rb=M(md=>{"use strict";Object.defineProperty(md,"__esModule",{value:!0});var i0=dg(),a0=$g(),l0=Xg(),c0=eb(),nb=tb(),d0=[i0.default,a0.default,(0,l0.default)(),c0.default,nb.metadataVocabulary,nb.contentVocabulary];md.default=d0});var ob=M(gi=>{"use strict";Object.defineProperty(gi,"__esModule",{value:!0});gi.DiscrError=void 0;var sb;(function(t){t.Tag="tag",t.Mapping="mapping"})(sb||(gi.DiscrError=sb={}))});var ab=M(bd=>{"use strict";Object.defineProperty(bd,"__esModule",{value:!0});var ar=te(),gd=ob(),ib=Zo(),u0=rs(),p0=ue(),h0={message:({params:{discrError:t,tagName:e}})=>t===gd.DiscrError.Tag?`tag "${e}" must be string`:`value of tag "${e}" must be in oneOf`,params:({params:{discrError:t,tag:e,tagName:n}})=>(0,ar._)`{error: ${t}, tag: ${n}, tagValue: ${e}}`},f0={keyword:"discriminator",type:"object",schemaType:"object",error:h0,code(t){let{gen:e,data:n,schema:r,parentSchema:s,it:o}=t,{oneOf:i}=s;if(!o.opts.discriminator)throw new Error("discriminator: requires discriminator option");let a=r.propertyName;if(typeof a!="string")throw new Error("discriminator: requires propertyName");if(r.mapping)throw new Error("discriminator: mapping is not supported");if(!i)throw new Error("discriminator: requires oneOf keyword");let l=e.let("valid",!1),u=e.const("tag",(0,ar._)`${n}${(0,ar.getProperty)(a)}`);e.if((0,ar._)`typeof ${u} == "string"`,()=>p(),()=>t.error(!1,{discrError:gd.DiscrError.Tag,tag:u,tagName:a})),t.ok(l);function p(){let b=x();e.if(!1);for(let S in b)e.elseIf((0,ar._)`${u} === ${S}`),e.assign(l,g(b[S]));e.else(),t.error(!1,{discrError:gd.DiscrError.Mapping,tag:u,tagName:a}),e.endIf()}function g(b){let S=e.name("valid"),T=t.subschema({keyword:"oneOf",schemaProp:b},S);return t.mergeEvaluated(T,ar.Name),S}function x(){var b;let S={},T=P(s),R=!0;for(let W=0;W<i.length;W++){let K=i[W];if(K?.$ref&&!(0,p0.schemaHasRulesButRef)(K,o.self.RULES)){let Le=K.$ref;if(K=ib.resolveRef.call(o.self,o.schemaEnv.root,o.baseId,Le),K instanceof ib.SchemaEnv&&(K=K.schema),K===void 0)throw new u0.default(o.opts.uriResolver,o.baseId,Le)}let Pe=(b=K?.properties)===null||b===void 0?void 0:b[a];if(typeof Pe!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${a}"`);R=R&&(T||P(K)),N(Pe,W)}if(!R)throw new Error(`discriminator: "${a}" must be required`);return S;function P({required:W}){return Array.isArray(W)&&W.includes(a)}function N(W,K){if(W.const)D(W.const,K);else if(W.enum)for(let Pe of W.enum)D(Pe,K);else throw new Error(`discriminator: "properties/${a}" must have "const" or "enum"`)}function D(W,K){if(typeof W!="string"||W in S)throw new Error(`discriminator: "${a}" values must be unique strings`);S[W]=K}}}};bd.default=f0});var lb=M((iD,m0)=>{m0.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var wd=M((ye,yd)=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.MissingRefError=ye.ValidationError=ye.CodeGen=ye.Name=ye.nil=ye.stringify=ye.str=ye._=ye.KeywordCxt=ye.Ajv=void 0;var g0=sg(),b0=rb(),y0=ab(),cb=lb(),w0=["/properties"],bi="http://json-schema.org/draft-07/schema",lr=class extends g0.default{_addVocabularies(){super._addVocabularies(),b0.default.forEach(e=>this.addVocabulary(e)),this.opts.discriminator&&this.addKeyword(y0.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let e=this.opts.$data?this.$dataMetaSchema(cb,w0):cb;this.addMetaSchema(e,bi,!1),this.refs["http://json-schema.org/schema"]=bi}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(bi)?bi:void 0)}};ye.Ajv=lr;yd.exports=ye=lr;yd.exports.Ajv=lr;Object.defineProperty(ye,"__esModule",{value:!0});ye.default=lr;var v0=ns();Object.defineProperty(ye,"KeywordCxt",{enumerable:!0,get:function(){return v0.KeywordCxt}});var cr=te();Object.defineProperty(ye,"_",{enumerable:!0,get:function(){return cr._}});Object.defineProperty(ye,"str",{enumerable:!0,get:function(){return cr.str}});Object.defineProperty(ye,"stringify",{enumerable:!0,get:function(){return cr.stringify}});Object.defineProperty(ye,"nil",{enumerable:!0,get:function(){return cr.nil}});Object.defineProperty(ye,"Name",{enumerable:!0,get:function(){return cr.Name}});Object.defineProperty(ye,"CodeGen",{enumerable:!0,get:function(){return cr.CodeGen}});var k0=Jo();Object.defineProperty(ye,"ValidationError",{enumerable:!0,get:function(){return k0.default}});var S0=rs();Object.defineProperty(ye,"MissingRefError",{enumerable:!0,get:function(){return S0.default}})});var bb=M(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.formatNames=At.fastFormats=At.fullFormats=void 0;function Pt(t,e){return{validate:t,compare:e}}At.fullFormats={date:Pt(hb,_d),time:Pt(kd(!0),$d),"date-time":Pt(db(!0),mb),"iso-time":Pt(kd(),fb),"iso-date-time":Pt(db(),gb),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:E0,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:L0,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:P0,int32:{type:"number",validate:C0},int64:{type:"number",validate:O0},float:{type:"number",validate:pb},double:{type:"number",validate:pb},password:!0,binary:!0};At.fastFormats={...At.fullFormats,date:Pt(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,_d),time:Pt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,$d),"date-time":Pt(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,mb),"iso-time":Pt(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,fb),"iso-date-time":Pt(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,gb),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};At.formatNames=Object.keys(At.fullFormats);function _0(t){return t%4===0&&(t%100!==0||t%400===0)}var $0=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,x0=[0,31,28,31,30,31,30,31,31,30,31,30,31];function hb(t){let e=$0.exec(t);if(!e)return!1;let n=+e[1],r=+e[2],s=+e[3];return r>=1&&r<=12&&s>=1&&s<=(r===2&&_0(n)?29:x0[r])}function _d(t,e){if(t&&e)return t>e?1:t<e?-1:0}var vd=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function kd(t){return function(n){let r=vd.exec(n);if(!r)return!1;let s=+r[1],o=+r[2],i=+r[3],a=r[4],l=r[5]==="-"?-1:1,u=+(r[6]||0),p=+(r[7]||0);if(u>23||p>59||t&&!a)return!1;if(s<=23&&o<=59&&i<60)return!0;let g=o-p*l,x=s-u*l-(g<0?1:0);return(x===23||x===-1)&&(g===59||g===-1)&&i<61}}function $d(t,e){if(!(t&&e))return;let n=new Date("2020-01-01T"+t).valueOf(),r=new Date("2020-01-01T"+e).valueOf();if(n&&r)return n-r}function fb(t,e){if(!(t&&e))return;let n=vd.exec(t),r=vd.exec(e);if(n&&r)return t=n[1]+n[2]+n[3],e=r[1]+r[2]+r[3],t>e?1:t<e?-1:0}var Sd=/t|\s/i;function db(t){let e=kd(t);return function(r){let s=r.split(Sd);return s.length===2&&hb(s[0])&&e(s[1])}}function mb(t,e){if(!(t&&e))return;let n=new Date(t).valueOf(),r=new Date(e).valueOf();if(n&&r)return n-r}function gb(t,e){if(!(t&&e))return;let[n,r]=t.split(Sd),[s,o]=e.split(Sd),i=_d(n,s);if(i!==void 0)return i||$d(r,o)}var T0=/\/|:/,R0=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function E0(t){return T0.test(t)&&R0.test(t)}var ub=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function P0(t){return ub.lastIndex=0,ub.test(t)}var A0=-(2**31),I0=2**31-1;function C0(t){return Number.isInteger(t)&&t<=I0&&t>=A0}function O0(t){return Number.isInteger(t)}function pb(){return!0}var N0=/[^\\]\\Z/;function L0(t){if(N0.test(t))return!1;try{return new RegExp(t),!0}catch{return!1}}});var yb=M(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.formatLimitDefinition=void 0;var j0=wd(),kt=te(),an=kt.operators,yi={formatMaximum:{okStr:"<=",ok:an.LTE,fail:an.GT},formatMinimum:{okStr:">=",ok:an.GTE,fail:an.LT},formatExclusiveMaximum:{okStr:"<",ok:an.LT,fail:an.GTE},formatExclusiveMinimum:{okStr:">",ok:an.GT,fail:an.LTE}},D0={message:({keyword:t,schemaCode:e})=>(0,kt.str)`should be ${yi[t].okStr} ${e}`,params:({keyword:t,schemaCode:e})=>(0,kt._)`{comparison: ${yi[t].okStr}, limit: ${e}}`};dr.formatLimitDefinition={keyword:Object.keys(yi),type:"string",schemaType:"string",$data:!0,error:D0,code(t){let{gen:e,data:n,schemaCode:r,keyword:s,it:o}=t,{opts:i,self:a}=o;if(!i.validateFormats)return;let l=new j0.KeywordCxt(o,a.RULES.all.format.definition,"format");l.$data?u():p();function u(){let x=e.scopeValue("formats",{ref:a.formats,code:i.code.formats}),b=e.const("fmt",(0,kt._)`${x}[${l.schemaCode}]`);t.fail$data((0,kt.or)((0,kt._)`typeof ${b} != "object"`,(0,kt._)`${b} instanceof RegExp`,(0,kt._)`typeof ${b}.compare != "function"`,g(b)))}function p(){let x=l.schema,b=a.formats[x];if(!b||b===!0)return;if(typeof b!="object"||b instanceof RegExp||typeof b.compare!="function")throw new Error(`"${s}": format "${x}" does not define "compare" function`);let S=e.scopeValue("formats",{key:x,ref:b,code:i.code.formats?(0,kt._)`${i.code.formats}${(0,kt.getProperty)(x)}`:void 0});t.fail$data(g(S))}function g(x){return(0,kt._)`${x}.compare(${n}, ${r}) ${yi[s].fail} 0`}},dependencies:["format"]};var U0=t=>(t.addKeyword(dr.formatLimitDefinition),t);dr.default=U0});var Sb=M((bs,kb)=>{"use strict";Object.defineProperty(bs,"__esModule",{value:!0});var ur=bb(),M0=yb(),xd=te(),wb=new xd.Name("fullFormats"),q0=new xd.Name("fastFormats"),Td=(t,e={keywords:!0})=>{if(Array.isArray(e))return vb(t,e,ur.fullFormats,wb),t;let[n,r]=e.mode==="fast"?[ur.fastFormats,q0]:[ur.fullFormats,wb],s=e.formats||ur.formatNames;return vb(t,s,n,r),e.keywords&&(0,M0.default)(t),t};Td.get=(t,e="full")=>{let r=(e==="fast"?ur.fastFormats:ur.fullFormats)[t];if(!r)throw new Error(`Unknown format "${t}"`);return r};function vb(t,e,n,r){var s,o;(s=(o=t.opts.code).formats)!==null&&s!==void 0||(o.formats=(0,xd._)`require("ajv-formats/dist/formats").${r}`);for(let i of e)t.addFormat(i,n[i])}kb.exports=bs=Td;Object.defineProperty(bs,"__esModule",{value:!0});bs.default=Td});function z0(){let t=new _b.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,$b.default)(t),t}var _b,$b,wi,xb=j(()=>{_b=zd(wd(),1),$b=zd(Sb(),1);wi=class{constructor(e){this._ajv=e??z0()}getValidator(e){let n="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return r=>n(r)?{valid:!0,data:r,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}}});var vi,Tb=j(()=>{Wn();vi=class{constructor(e){this._server=e}requestStream(e,n,r){return this._server.requestStream(e,n,r)}createMessageStream(e,n){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let s=e.messages[e.messages.length-1],o=Array.isArray(s.content)?s.content:[s.content],i=o.some(p=>p.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,l=a?Array.isArray(a.content)?a.content:[a.content]:[],u=l.some(p=>p.type==="tool_use");if(i){if(o.some(p=>p.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let p=new Set(l.filter(x=>x.type==="tool_use").map(x=>x.id)),g=new Set(o.filter(x=>x.type==="tool_result").map(x=>x.toolUseId));if(p.size!==g.size||![...p].every(x=>g.has(x)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},qr,n)}elicitInputStream(e,n){let r=this._server.getClientCapabilities(),s=e.mode??"form";switch(s){case"url":{if(!r?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!r?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let o=s==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:o},Gn,n)}async getTask(e,n){return this._server.getTask({taskId:e},n)}async getTaskResult(e,n,r){return this._server.getTaskResult({taskId:e},n,r)}async listTasks(e,n){return this._server.listTasks(e?{cursor:e}:void 0,n)}async cancelTask(e,n){return this._server.cancelTask({taskId:e},n)}}});function Rb(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${n} does not support task creation for tools/call (required for ${e})`);break;default:break}}function Eb(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${n} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var Pb=j(()=>{});var ki,Ab=j(()=>{Of();Wn();xb();Ar();Tb();Pb();ki=class extends jo{constructor(e,n){super(n),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Mr.options.map((r,s)=>[r,s])),this.isMessageIgnored=(r,s)=>{let o=this._loggingLevels.get(s);return o?this.LOG_LEVEL_SEVERITY.get(r)<this.LOG_LEVEL_SEVERITY.get(o):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new wi,this.setRequestHandler(qa,r=>this._oninitialize(r)),this.setNotificationHandler(za,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Wa,async(r,s)=>{let o=s.sessionId||s.requestInfo?.headers["mcp-session-id"]||void 0,{level:i}=r.params,a=Mr.safeParse(i);return a.success&&this._loggingLevels.set(o,a.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new vi(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Cf(this._capabilities,e)}setRequestHandler(e,n){let s=Jt(e)?.method;if(!s)throw new Error("Schema is missing a method literal");let o=Bn(s);if(typeof o!="string")throw new Error("Schema method literal must be a string");if(o==="tools/call"){let a=async(l,u)=>{let p=Wt(Vn,l);if(!p.success){let S=p.error instanceof Error?p.error.message:String(p.error);throw new z(V.InvalidParams,`Invalid tools/call request: ${S}`)}let{params:g}=p.data,x=await Promise.resolve(n(l,u));if(g.task){let S=Wt(Hn,x);if(!S.success){let T=S.error instanceof Error?S.error.message:String(S.error);throw new z(V.InvalidParams,`Invalid task creation result: ${T}`)}return S.data}let b=Wt($o,x);if(!b.success){let S=b.error instanceof Error?b.error.message:String(b.error);throw new z(V.InvalidParams,`Invalid tools/call result: ${S}`)}return b.data};return super.setRequestHandler(e,a)}return super.setRequestHandler(e,n)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){Eb(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&Rb(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let n=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:Ah.includes(n)?n:La,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},ao)}async createMessage(e,n){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let r=e.messages[e.messages.length-1],s=Array.isArray(r.content)?r.content:[r.content],o=s.some(u=>u.type==="tool_result"),i=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=i?Array.isArray(i.content)?i.content:[i.content]:[],l=a.some(u=>u.type==="tool_use");if(o){if(s.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!l)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(l){let u=new Set(a.filter(g=>g.type==="tool_use").map(g=>g.id)),p=new Set(s.filter(g=>g.type==="tool_result").map(g=>g.toolUseId));if(u.size!==p.size||![...u].every(g=>p.has(g)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},Ja,n):this.request({method:"sampling/createMessage",params:e},qr,n)}async elicitInput(e,n){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let s=e;return this.request({method:"elicitation/create",params:s},Gn,n)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let s=e.mode==="form"?e:{...e,mode:"form"},o=await this.request({method:"elicitation/create",params:s},Gn,n);if(o.action==="accept"&&o.content&&s.requestedSchema)try{let a=this._jsonSchemaValidator.getValidator(s.requestedSchema)(o.content);if(!a.valid)throw new z(V.InvalidParams,`Elicitation response content does not match requested schema: ${a.errorMessage}`)}catch(i){throw i instanceof z?i:new z(V.InternalError,`Error validating elicitation response: ${i instanceof Error?i.message:String(i)}`)}return o}}}createElicitationCompletionNotifier(e,n){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},n)}async listRoots(e,n){return this.request({method:"roots/list",params:e},Ya,n)}async sendLoggingMessage(e,n){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,n))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}});function Rd(t){return!!t&&typeof t=="object"&&Cb in t}function Ob(t){return t[Cb]?.complete}var Cb,Ib,Nb=j(()=>{Cb=Symbol.for("mcp.completable");(function(t){t.Completable="McpCompletable"})(Ib||(Ib={}))});var Lb=j(()=>{});function F0(t){let e=[];if(t.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(t.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${t.length})`]};if(t.includes(" ")&&e.push("Tool name contains spaces, which may cause parsing issues"),t.includes(",")&&e.push("Tool name contains commas, which may cause parsing issues"),(t.startsWith("-")||t.endsWith("-"))&&e.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(t.startsWith(".")||t.endsWith("."))&&e.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!B0.test(t)){let n=t.split("").filter(r=>!/[A-Za-z0-9._-]/.test(r)).filter((r,s,o)=>o.indexOf(r)===s);return e.push(`Tool name contains invalid characters: ${n.map(r=>`"${r}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:e}}return{isValid:!0,warnings:e}}function H0(t,e){if(e.length>0){console.warn(`Tool name validation warning for "${t}":`);for(let n of e)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function Ed(t){let e=F0(t);return H0(t,e.warnings),e.isValid}var B0,jb=j(()=>{B0=/^[A-Za-z0-9._-]{1,128}$/});var Si,Db=j(()=>{Si=class{constructor(e){this._mcpServer=e}registerToolTask(e,n,r){let s={taskSupport:"required",...n.execution};if(s.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,s,n._meta,r)}}});import{ZodOptional as K0}from"zod";function qb(t){return t!==null&&typeof t=="object"&&"parse"in t&&typeof t.parse=="function"&&"safeParse"in t&&typeof t.safeParse=="function"}function zb(t){return"_def"in t||"_zod"in t||qb(t)}function Pd(t){return typeof t!="object"||t===null||zb(t)?!1:Object.keys(t).length===0?!0:Object.values(t).some(qb)}function Ub(t){if(t){if(Pd(t))return gn(t);if(!zb(t))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return t}}function G0(t){let e=Jt(t);return e?Object.entries(e).map(([n,r])=>{let s=Eh(r),o=Ph(r);return{name:n,description:s,required:!o}}):[]}function ln(t){let n=Jt(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let r=Bn(n);if(typeof r=="string")return r;throw new Error("Schema method literal must be a string")}function Mb(t){return{completion:{values:t.slice(0,100),total:t.length,hasMore:t.length>100}}}var _i,V0,ys,Bb=j(()=>{Ab();Ar();Ol();Wn();Nb();Lb();jb();Db();_i=class{constructor(e,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new ki(e,n)}get experimental(){return this._experimental||(this._experimental={tasks:new Si(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(_o)),this.server.assertCanSetRequestHandler(ln(Vn)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(_o,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,n])=>{let r={name:e,title:n.title,description:n.description,inputSchema:(()=>{let s=zn(n.inputSchema);return s?Al(s,{strictUnions:!0,pipeStrategy:"input"}):V0})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let s=zn(n.outputSchema);s&&(r.outputSchema=Al(s,{strictUnions:!0,pipeStrategy:"output"}))}return r})})),this.server.setRequestHandler(Vn,async(e,n)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new z(V.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Tool ${e.params.name} disabled`);let s=!!e.params.task,o=r.execution?.taskSupport,i="createTask"in r.handler;if((o==="required"||o==="optional")&&!i)throw new z(V.InternalError,`Tool ${e.params.name} has taskSupport '${o}' but was not registered with registerToolTask`);if(o==="required"&&!s)throw new z(V.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(o==="optional"&&!s&&i)return await this.handleAutomaticTaskPolling(r,e,n);let a=await this.validateToolInput(r,e.params.arguments,e.params.name),l=await this.executeToolHandler(r,a,n);return s||await this.validateToolOutput(r,l,e.params.name),l}catch(r){if(r instanceof z&&r.code===V.UrlElicitationRequired)throw r;return this.createToolError(r instanceof Error?r.message:String(r))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,n,r){if(!e.inputSchema)return;let o=zn(e.inputSchema)??e.inputSchema,i=await no(o,n);if(!i.success){let a="error"in i?i.error:"Unknown error",l=ro(a);throw new z(V.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${l}`)}return i.data}async validateToolOutput(e,n,r){if(!e.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new z(V.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let s=zn(e.outputSchema),o=await no(s,n.structuredContent);if(!o.success){let i="error"in o?o.error:"Unknown error",a=ro(i);throw new z(V.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${a}`)}}async executeToolHandler(e,n,r){let s=e.handler;if("createTask"in s){if(!r.taskStore)throw new Error("No task store provided.");let i={...r,taskStore:r.taskStore};if(e.inputSchema){let a=s;return await Promise.resolve(a.createTask(n,i))}else{let a=s;return await Promise.resolve(a.createTask(i))}}if(e.inputSchema){let i=s;return await Promise.resolve(i(n,r))}else{let i=s;return await Promise.resolve(i(r))}}async handleAutomaticTaskPolling(e,n,r){if(!r.taskStore)throw new Error("No task store provided for task-capable tool.");let s=await this.validateToolInput(e,n.params.arguments,n.params.name),o=e.handler,i={...r,taskStore:r.taskStore},a=s?await Promise.resolve(o.createTask(s,i)):await Promise.resolve(o.createTask(i)),l=a.task.taskId,u=a.task,p=u.pollInterval??5e3;for(;u.status!=="completed"&&u.status!=="failed"&&u.status!=="cancelled";){await new Promise(x=>setTimeout(x,p));let g=await r.taskStore.getTask(l);if(!g)throw new z(V.InternalError,`Task ${l} not found during polling`);u=g}return await r.taskStore.getTaskResult(l)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(ln(xo)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(xo,async e=>{switch(e.params.ref.type){case"ref/prompt":return Vh(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return Gh(e),this.handleResourceCompletion(e,e.params.ref);default:throw new z(V.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,n){let r=this._registeredPrompts[n.name];if(!r)throw new z(V.InvalidParams,`Prompt ${n.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Prompt ${n.name} disabled`);if(!r.argsSchema)return ys;let o=Jt(r.argsSchema)?.[e.params.argument.name];if(!Rd(o))return ys;let i=Ob(o);if(!i)return ys;let a=await i(e.params.argument.value,e.params.context);return Mb(a)}async handleResourceCompletion(e,n){let r=Object.values(this._registeredResourceTemplates).find(i=>i.resourceTemplate.uriTemplate.toString()===n.uri);if(!r){if(this._registeredResources[n.uri])return ys;throw new z(V.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let s=r.resourceTemplate.completeCallback(e.params.argument.name);if(!s)return ys;let o=await s(e.params.argument.value,e.params.context);return Mb(o)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(yo)),this.server.assertCanSetRequestHandler(ln(wo)),this.server.assertCanSetRequestHandler(ln(vo)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(yo,async(e,n)=>{let r=Object.entries(this._registeredResources).filter(([o,i])=>i.enabled).map(([o,i])=>({uri:o,name:i.name,...i.metadata})),s=[];for(let o of Object.values(this._registeredResourceTemplates)){if(!o.resourceTemplate.listCallback)continue;let i=await o.resourceTemplate.listCallback(n);for(let a of i.resources)s.push({...o.metadata,...a})}return{resources:[...r,...s]}}),this.server.setRequestHandler(wo,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,r])=>({name:n,uriTemplate:r.resourceTemplate.uriTemplate.toString(),...r.metadata}))})),this.server.setRequestHandler(vo,async(e,n)=>{let r=new URL(e.params.uri),s=this._registeredResources[r.toString()];if(s){if(!s.enabled)throw new z(V.InvalidParams,`Resource ${r} disabled`);return s.readCallback(r,n)}for(let o of Object.values(this._registeredResourceTemplates)){let i=o.resourceTemplate.uriTemplate.match(r.toString());if(i)return o.readCallback(r,i,n)}throw new z(V.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(ln(ko)),this.server.assertCanSetRequestHandler(ln(So)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ko,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,n])=>({name:e,title:n.title,description:n.description,arguments:n.argsSchema?G0(n.argsSchema):void 0}))})),this.server.setRequestHandler(So,async(e,n)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new z(V.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new z(V.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let s=zn(r.argsSchema),o=await no(s,e.params.arguments);if(!o.success){let l="error"in o?o.error:"Unknown error",u=ro(l);throw new z(V.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${u}`)}let i=o.data,a=r.callback;return await Promise.resolve(a(i,n))}else{let s=r.callback;return await Promise.resolve(s(n))}}),this._promptHandlersInitialized=!0)}resource(e,n,...r){let s;typeof r[0]=="object"&&(s=r.shift());let o=r[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(e,void 0,n,s,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,void 0,n,s,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}registerResource(e,n,r,s){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let o=this._createRegisteredResource(e,r.title,n,r,s);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let o=this._createRegisteredResourceTemplate(e,r.title,n,r,s);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}}_createRegisteredResource(e,n,r,s,o){let i={name:e,title:n,metadata:s,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({uri:null}),update:a=>{typeof a.uri<"u"&&a.uri!==r&&(delete this._registeredResources[r],a.uri&&(this._registeredResources[a.uri]=i)),typeof a.name<"u"&&(i.name=a.name),typeof a.title<"u"&&(i.title=a.title),typeof a.metadata<"u"&&(i.metadata=a.metadata),typeof a.callback<"u"&&(i.readCallback=a.callback),typeof a.enabled<"u"&&(i.enabled=a.enabled),this.sendResourceListChanged()}};return this._registeredResources[r]=i,i}_createRegisteredResourceTemplate(e,n,r,s,o){let i={resourceTemplate:r,title:n,metadata:s,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:u=>{typeof u.name<"u"&&u.name!==e&&(delete this._registeredResourceTemplates[e],u.name&&(this._registeredResourceTemplates[u.name]=i)),typeof u.title<"u"&&(i.title=u.title),typeof u.template<"u"&&(i.resourceTemplate=u.template),typeof u.metadata<"u"&&(i.metadata=u.metadata),typeof u.callback<"u"&&(i.readCallback=u.callback),typeof u.enabled<"u"&&(i.enabled=u.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=i;let a=r.uriTemplate.variableNames;return Array.isArray(a)&&a.some(u=>!!r.completeCallback(u))&&this.setCompletionRequestHandler(),i}_createRegisteredPrompt(e,n,r,s,o){let i={title:n,description:r,argsSchema:s===void 0?void 0:gn(s),callback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:a=>{typeof a.name<"u"&&a.name!==e&&(delete this._registeredPrompts[e],a.name&&(this._registeredPrompts[a.name]=i)),typeof a.title<"u"&&(i.title=a.title),typeof a.description<"u"&&(i.description=a.description),typeof a.argsSchema<"u"&&(i.argsSchema=gn(a.argsSchema)),typeof a.callback<"u"&&(i.callback=a.callback),typeof a.enabled<"u"&&(i.enabled=a.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=i,s&&Object.values(s).some(l=>{let u=l instanceof K0?l._def?.innerType:l;return Rd(u)})&&this.setCompletionRequestHandler(),i}_createRegisteredTool(e,n,r,s,o,i,a,l,u){Ed(e);let p={title:n,description:r,inputSchema:Ub(s),outputSchema:Ub(o),annotations:i,execution:a,_meta:l,handler:u,enabled:!0,disable:()=>p.update({enabled:!1}),enable:()=>p.update({enabled:!0}),remove:()=>p.update({name:null}),update:g=>{typeof g.name<"u"&&g.name!==e&&(typeof g.name=="string"&&Ed(g.name),delete this._registeredTools[e],g.name&&(this._registeredTools[g.name]=p)),typeof g.title<"u"&&(p.title=g.title),typeof g.description<"u"&&(p.description=g.description),typeof g.paramsSchema<"u"&&(p.inputSchema=gn(g.paramsSchema)),typeof g.outputSchema<"u"&&(p.outputSchema=gn(g.outputSchema)),typeof g.callback<"u"&&(p.handler=g.callback),typeof g.annotations<"u"&&(p.annotations=g.annotations),typeof g._meta<"u"&&(p._meta=g._meta),typeof g.enabled<"u"&&(p.enabled=g.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=p,this.setToolRequestHandlers(),this.sendToolListChanged(),p}tool(e,...n){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let r,s,o,i;if(typeof n[0]=="string"&&(r=n.shift()),n.length>1){let l=n[0];if(Pd(l))s=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!Pd(n[0])&&(i=n.shift());else if(typeof l=="object"&&l!==null){if(Object.values(l).some(u=>typeof u=="object"&&u!==null))throw new Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);i=n.shift()}}let a=n[0];return this._createRegisteredTool(e,void 0,r,s,o,i,{taskSupport:"forbidden"},void 0,a)}registerTool(e,n,r){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let{title:s,description:o,inputSchema:i,outputSchema:a,annotations:l,_meta:u}=n;return this._createRegisteredTool(e,s,o,i,a,l,{taskSupport:"forbidden"},u,r)}prompt(e,...n){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let r;typeof n[0]=="string"&&(r=n.shift());let s;n.length>1&&(s=n.shift());let o=n[0],i=this._createRegisteredPrompt(e,void 0,r,s,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),i}registerPrompt(e,n,r){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let{title:s,description:o,argsSchema:i}=n,a=this._createRegisteredPrompt(e,s,o,i,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),a}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,n){return this.server.sendLoggingMessage(e,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}},V0={type:"object",properties:{}};ys={completion:{values:[],hasMore:!1}}});function J0(t){return Uh.parse(JSON.parse(t))}function Fb(t){return JSON.stringify(t)+`
|
|
1967
1967
|
`}var W0,$i,Hb=j(()=>{Wn();W0=10*1024*1024,$i=class{constructor(e){this._maxBufferSize=e?.maxBufferSize??W0}append(e){if((this._buffer?.length??0)+e.length>this._maxBufferSize)throw this.clear(),new Error(`ReadBuffer exceeded maximum size of ${this._maxBufferSize} bytes`);this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
|
|
1968
1968
|
`);if(e===-1)return null;let n=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),J0(n)}clear(){this._buffer=void 0}}});import Kb from"node:process";var xi,Vb=j(()=>{Hb();xi=class{constructor(e=Kb.stdin,n=Kb.stdout,r){this._stdin=e,this._stdout=n,this._started=!1,this._ondata=s=>{try{this._readBuffer.append(s),this.processReadBuffer()}catch(o){this.onerror?.(o),this.close().catch(()=>{})}},this._onerror=s=>{this.onerror?.(s)},this._readBuffer=new $i({maxBufferSize:r?.maxBufferSize})}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(n=>{let r=Fb(e);this._stdout.write(r)?n():this._stdout.once("drain",n)})}}});var Gb,Wb=j(()=>{Gb=[]});var ry={};qd(ry,{AUTHORING_MCP_SERVER_NAME:()=>Xb,AUTHORING_MCP_SERVER_VERSION:()=>Qb,AUTHORING_RESOURCES:()=>nP,AUTHORING_TOOLS:()=>tP,AUTHORING_TOOLS_PUBLIC:()=>ny,buildAuthoringMcpServer:()=>ty,resolveSamplesDir:()=>ey,runAuthoringMcpServer:()=>rP});import{promises as Y0}from"node:fs";import{isAbsolute as Z0,resolve as Ti,sep as X0}from"node:path";import{z as q}from"zod";function Zb(){return Yb??=import("../mcp/grounding.js").then(e=>e,()=>null),Yb}function ey(t,e){if(e===void 0)return Ti(process.cwd(),t??"samples");let n=Ti(e);if(t===void 0)return n;if(Z0(t))return null;let r=Ti(n,t);return r===n||r.startsWith(n+X0)?r:null}function ve(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async function eP(t,e={}){let n=e.fetchImpl??fetch;try{let r=await n(`${t.baseUrl.replace(/\/+$/,"")}/v1/extensions`,{headers:{Authorization:`Bearer ${t.token}`,Accept:"application/json"}});return r.ok?((await r.json()).extensions??[]).map(o=>o.hookId).filter(o=>typeof o=="string"):null}catch{return null}}async function ty(t={}){async function e(){if(t.resolveTenant)return t.resolveTenant();let b=await pt(t.baseUrl);if(!b)throw new Error("not signed in \u2014 run `turbobase auth login` (or set a single stored instance).");return{baseUrl:b.baseUrl,token:b.token}}let n=t.grounding??{},r=await Zb(),s=null;if(r)try{let b=await e();s={surface:"mcp-authoring",baseUrl:b.baseUrl,token:b.token}}catch{s=null}let o=r&&s?await r.loadActiveSources(s,n):[],i={...n,loadActiveSourcesImpl:async()=>o},a=[],l=[];if(r&&s){try{a=await r.listMcpPromptSkills(s,i)}catch{a=[]}try{l=(await r.listRecipesForSurface(s,i)).map(b=>({id:b.id,record_type:b.record_type,intent:b.intent}))}catch{l=[]}}let u=s?await eP(s,n):null,p=new _i({name:Xb,version:Qb},r?{instructions:r.renderAuthoringInstructions({baseUrl:t.displayBaseUrl??s?.baseUrl??t.baseUrl??"this instance",sources:o,recipeIntents:l,promptNames:a.map(b=>b.id),deployedExtensions:u,docsToken:n.docsToken??r.docsPublicToken()})}:void 0);if(r&&s){let b=s;for(let S of a)p.registerPrompt(S.id,{title:S.name,description:S.description},async()=>{let T=await r.getMcpPromptSkill(b,S.id,n);if(!T)throw new Error(`unknown prompt: ${S.id}`);return{description:T.description,messages:[{role:"user",content:{type:"text",text:(T.prompts??[]).join(`
|
|
1969
1969
|
|
|
@@ -2648,8 +2648,11 @@ Three ways to actually read rows:
|
|
|
2648
2648
|
**\`mcp:data\`** permission as a bearer at that same data-MCP endpoint. Reads run
|
|
2649
2649
|
as the administrator who minted it, under that person's row-level permissions.
|
|
2650
2650
|
It is never granted by default \u2014 an administrator ticks it deliberately when
|
|
2651
|
-
minting \u2014 and a token carrying
|
|
2652
|
-
write setting says.
|
|
2651
|
+
minting \u2014 and a token carrying THAT PERMISSION ALONE cannot change anything,
|
|
2652
|
+
whatever the instance's MCP write setting says. Changing data over the same
|
|
2653
|
+
endpoint takes a second permission, **\`mcp:write\`**, which an administrator
|
|
2654
|
+
ticks alongside the read one and never instead of it, AND the instance's MCP
|
|
2655
|
+
write setting on. Ask for one when there is nobody to complete a sign-in, or
|
|
2653
2656
|
when a session expiring mid-job would strand the work.
|
|
2654
2657
|
|
|
2655
2658
|
**\`permission denied for table <x>\` usually means NOT SIGNED IN.** With no
|
|
@@ -3663,7 +3666,7 @@ ${s.map(Ev).join(`
|
|
|
3663
3666
|
`))}async function Up(t,e,n=Mn){let r=[...new Set(t.map(a=>a.trim()).filter(Boolean))];r.length===0&&k("name at least one skill slug. `turbobase skills list` shows them.");let s=await qn(e,n);if(!await Qs(`Publish ${r.length} skill(s)?`,"Yes \u2014 publish them","their text is injected into every matching turn from now on",e))return;let i;try{i=await Z("publishing",()=>s.skillsPublish(r))}catch(a){J(a,"skills:publish","publish a skill"),k(`publish failed: ${a instanceof Error?a.message:String(a)}`)}y(f.green(`published ${i.published.length} skill(s) \u2014 live now.`)),i.unknown.length>0&&(L(f.yellow(`no such skill: ${i.unknown.join(", ")}`)),process.exitCode=1),L(f.dim(`release v${i.version.version_no} \xB7 undo with: turbobase skills unpublish ${i.published.join(" ")}`))}async function Mp(t,e,n=Mn){let r=[...new Set(t.map(a=>a.trim()).filter(Boolean))];r.length===0&&k("name at least one skill slug. `turbobase skills list` shows them.");let s=await qn(e,n);if(!await Qs(`Move ${r.length} skill(s) back to draft?`,"Yes \u2014 unpublish them","they stop being injected immediately; the text and its history are kept",e))return;let i;try{i=await Z("unpublishing",()=>s.skillsUnpublish(r))}catch(a){J(a,"skills:publish","unpublish a skill"),k(`unpublish failed: ${a instanceof Error?a.message:String(a)}`)}y(f.green(`unpublished ${i.unpublished.length} skill(s) \u2014 retracted now.`)),L(f.dim(`release v${i.version.version_no} \xB7 re-publish with: turbobase skills publish ${i.unpublished.join(" ")}`)),i.unknown.length>0&&(L(f.yellow(`no such skill: ${i.unknown.join(", ")}`)),process.exitCode=1)}async function qp(t,e,n=Mn){let r=Number(t);(!Number.isInteger(r)||r<1)&&k(`--version must be a release number (got '${t}'). \`turbobase skills releases\` lists them.`);let s=await qn(e,n);if(await Qs(`Roll the skills back to release v${r}?`,"Yes \u2014 restore that release","content only: a skill an operator has since unpublished stays off",e))try{let i=await Z("rolling back",()=>s.skillsRollback(r));y(f.green(`rolled back to v${i.version.version_no}.`))}catch(i){J(i,"skills:publish","roll back a skills release"),k(`rollback failed: ${i instanceof Error?i.message:String(i)}`)}}async function zp(t,e=Mn){let n=await qn(t,e),r;try{r=await Z("reading the releases",()=>n.skillsReleases())}catch(s){J(s,"skills:publish","read the skills releases"),k(`could not read the releases: ${s instanceof Error?s.message:String(s)}`)}if(r.items.length===0){L("no releases yet.");return}for(let s of r.items){let o=s.is_current?f.green("*"):" ",i=s.release_note?` \u2014 ${s.release_note}`:"";y(`${o} v${s.version_no} ${s.skill_count} skill(s) ${f.dim(s.published_at)}${s.published_by?f.dim(` by ${s.published_by}`):""}${f.dim(i)}`)}}async function Bp(t,e,n=Mn){let r=[...new Set((t??[]).map(u=>u.trim()).filter(Boolean))];r.length===0&&k("name at least one skill to delete. `turbobase skills list` shows the slugs.");let s=await qn(e,n);if(!await Qs(r.length===1?`Delete the skill '${r[0]}'?`:`Delete ${r.length} skills?
|
|
3664
3667
|
${r.join(`
|
|
3665
3668
|
`)}`,"Yes \u2014 delete them","permanent: the rows and their text are removed. Prior releases keep their own copy.",e))return;let i=[],a=[];for(let u of r)try{i.push(await Z(`deleting ${u}`,()=>s.skillsDelete(u)))}catch(p){if(p instanceof Q&&p.status===404){a.push(u);continue}i.length>0&&L(f.dim(`deleted before the error: ${i.map(g=>g.slug).join(", ")}`)),J(p,"skills:publish","delete a skill"),k(`delete failed on '${u}': ${p instanceof Error?p.message:String(p)}`)}i.length>0&&y(f.green(`deleted ${i.length} skill(s).`));let l=i.filter(u=>u.wasPublished).map(u=>u.slug);l.length>0&&L(f.yellow(`Published until now, so no longer injected: ${l.join(", ")}`)),a.length>0&&(L(f.yellow(`no such skill: ${a.join(", ")}`)),process.exitCode=1)}import{promises as Fp}from"node:fs";import{join as ek,relative as tk,resolve as nk,sep as rk}from"node:path";var sk=new Set(["node_modules","dist","build","coverage",".git",".claude",".turbobase",".next",".svelte-kit",".vercel",".cache"]),ok=new Set([".mcp.json",".env"]);function ik(t){return ok.has(t)||t.startsWith(".env.")&&t!==".env.example"}function ak(t){return Buffer.compare(Buffer.from(t.toString("utf8"),"utf8"),t)===0}function lk(t){return t.includes(0)}async function Hp(t){let e=nk(t),n={},r=[],s=[],o=[];async function i(a){let l=await Fp.readdir(a,{withFileTypes:!0});for(let u of l){let p=ek(a,u.name);if(sk.has(u.name))continue;if(u.isDirectory()){await i(p);continue}if(!u.isFile())continue;let g=tk(e,p).split(rk).join("/");if(ik(u.name)){s.push(g);continue}let x=await Fp.readFile(p);if(!ak(x)){r.push(g);continue}lk(x)&&o.push(g),n[g]=x.toString("utf8")}}return await i(e),{files:n,skipped:r,secrets:s,unstorable:o}}import{randomBytes as ck}from"node:crypto";var dk="/_tb/app-assets",uk=16,pk=/^[0-9a-f]{32}$/;function Kp(){return ck(uk).toString("hex")}function hk(t){return pk.test(t)}function Vp(t){if(!hk(t))throw new Error(`not a build id: ${t}`);return`${dk}/${t}/`}var Gp=7;Sa();var _a=50*1024*1024;import eo from"node:fs/promises";import Tr from"node:path";var $a={esbuild:"0.28.1","isolated-vm":"6.1.2"},xa="@turbobase/isolated-vm-prebuilds";function Ta(t,e){return`${t}-${e}`}function Ra(t=process.versions){return`abi${t.modules}`}var Wp=["darwin-x64","win32-arm64"];async function Jp(t){let e=t.platform??process.platform,n=t.arch??process.arch,r=Ta(e,n),s=Tr.join(t.home,"node_modules"),o=Tr.join(s,...xa.split("/"),"prebuilds",r),i=Tr.join(s,"isolated-vm","prebuilds",r),a;try{a=await eo.readdir(o)}catch{return[]}let l=[];await eo.mkdir(i,{recursive:!0});for(let u of a){if(!u.endsWith(".node"))continue;let p=Tr.join(i,u);try{await eo.copyFile(Tr.join(o,u),p,eo.constants?.COPYFILE_EXCL??1),l.push(u)}catch{}}return l}import{homedir as fk}from"node:os";import{join as Yp}from"node:path";import{promises as Ea}from"node:fs";function Xp(){let t=process.env.TURBOBASE_HOME??Yp(fk(),".turbobase");return{dir:t,file:Yp(t,"sandboxes.json")}}var mk={s:1e3,m:6e4,h:36e5,d:864e5};function gk(t){let e=/^\s*(\d+)\s*([smhd])\s*$/.exec(t);if(!e)throw new Error(`invalid --ttl '${t}': expected <number><unit> where unit is s|m|h|d (e.g. 72h, 30m, 7d).`);let n=Number(e[1]);if(!Number.isFinite(n)||n<=0)throw new Error(`invalid --ttl '${t}': duration must be a positive integer.`);return n*mk[e[2]]}function bk(t,e=Date.now()){return new Date(e+gk(t)).toISOString()}function yk(t,e=Date.now()){let n=Date.parse(t);return Number.isNaN(n)?!0:n<=e}function wk(t){let e=/^\s*(\d+(?:\.\d+)?)\s*%?\s*$/.exec(t);if(!e)throw new Error(`invalid --sample '${t}': expected a percent like 2% (or a bare number).`);let n=Number(e[1]);if(!Number.isFinite(n)||n<0||n>100)throw new Error(`invalid --sample '${t}': percent must be between 0 and 100.`);return n/100}function vk(t,e){if(e>=1)return[...t];if(e<=0||t.length===0)return[];let n=Math.max(1,Math.round(1/e)),r=[];for(let s=0;s<t.length;s+=n)r.push(t[s]);return r}var kk="[REDACTED]",Rr=class extends Error{constructor(e){super(e),this.name="SandboxDataCopyUnavailableError"}},Pa=class extends Error{table;column;constructor(e,n,r){super(`Refusing to copy ${e}.${n} into a sandbox: ${r}. A sandbox must never hold un-redacted PII \u2014 classify the column 'safe' (non-PII) or let redaction mask it, then retry.`),this.name="UnredactedPiiError",this.table=e,this.column=n}};function Sk(t,e,n){let r={};for(let[s,o]of Object.entries(e)){let i=n[s];if(i===void 0)throw new Pa(t,s,"column has no PII classification (unknown = unsafe)");i==="pii"?r[s]=o==null?o:kk:r[s]=o}return r}function _k(t,e,n){return e.map(r=>Sk(t,r,n))}var Zp=new Set(["localhost","127.0.0.1","::1","0.0.0.0"]),$k=["oraclecloud.com","us-ashburn-1","amazonaws.com","rds.","supabase.co","turbobase.app","turbobase.io"];function xk(t){let e=t.trim();try{let s=new URL(e);if(s.hostname)return s.hostname.toLowerCase()}catch{}let n=e.replace(/^[a-z]+:\/\//i,""),r=(n.split("/")[0]??n).split("@").pop()??n;return(r.split(":")[0]??r).toLowerCase()}function Aa(t){if(!t||!t.trim())throw new Error("local-only guard: empty database target \u2014 refusing to proceed.");let e=t.toLowerCase();for(let r of $k)if(e.includes(r))throw new Error(`local-only guard: target '${t}' looks like a cloud/prod context (matched '${r}'). \`turbobase sandbox create\` is LOCAL-ONLY and will never touch a cloud database.`);let n=xk(t);if(!Zp.has(n))throw new Error(`local-only guard: target host '${n}' is not a recognised local Postgres (${[...Zp].join(", ")}). \`turbobase sandbox create\` is LOCAL-ONLY.`)}function Tk(t,e=Rk){return`sbx-${t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,24)||"tenant"}-${e()}`}function Rk(){return Math.floor(Math.random()*16777215).toString(16).padStart(6,"0")}function Ek(t){return`turbobase_${t.replace(/[^a-z0-9]+/gi,"_").toLowerCase()}`}function Pk(t,e){return`${(e??process.env.TURBOBASE_SANDBOX_BASE_URL??"http://localhost:5173").replace(/\/+$/,"")}/?sandbox=${encodeURIComponent(t)}`}async function Ia(){let{file:t}=Xp();try{let e=await Ea.readFile(t,"utf8"),n=JSON.parse(e);return Array.isArray(n)?n:[]}catch(e){if(e.code==="ENOENT")return[];throw e}}async function Qp(t){let{dir:e,file:n}=Xp();await Ea.mkdir(e,{recursive:!0}),await Ea.writeFile(n,`${JSON.stringify(t,null,2)}
|
|
3666
|
-
`,{mode:384})}async function Ak(t){let e=await Ia();e.push(t),await Qp(e)}async function eh(t){let e=await Ia(),n=e.findIndex(s=>s.name===t);if(n===-1)return null;let[r]=e.splice(n,1);return await Qp(e),r??null}async function to(){return Ia()}function Ca(t,e=Date.now()){let n=[],r=[];for(let s of t)yk(s.expiresAt,e)?r.push(s):n.push(s);return{active:n,expired:r}}async function th(t,e){Aa(t.target());let n=t.dataCopyUnavailable?.();if(n)throw new Rr(n);let r=wk(e.sample),s=e.now??Date.now(),o=(e.nameGen??(u=>Tk(u)))(e.fromTenant),i=Ek(o);await t.createDatabase(i),await t.replayMigrations(i);let a=await t.readSourceTables(e.fromTenant);for(let u of a){let p=vk(u.rows,r),g=_k(u.table,p,u.classification);g.length>0&&await t.copyRows(i,u.table,g)}let l={name:o,fromTenant:e.fromTenant,database:i,createdAt:new Date(s).toISOString(),expiresAt:bk(e.ttl,s),sampleFraction:r,url:Pk(o,e.baseUrl)};return await Ak(l),l}async function nh(t,e){Aa(t.target());let r=(await to()).find(s=>s.name===e);return r?(await t.dropDatabase(r.database),await eh(e),r):null}async function Oa(t,e=Date.now()){Aa(t.target());let n=await to(),{expired:r}=Ca(n,e),s=[];for(let o of r){try{await t.dropDatabase(o.database)}catch{continue}await eh(o.name),s.push(o)}return s}var Er={pat:{prefix:"tb_pat_",defaultScopes:["extensions:deploy"],allowedScopes:["extensions:deploy","catalog:read","mcp:authoring","analyzer:run","releases:write","solutions:write","skills:publish","docs:publish","mcp:data"],defaultTtlDays:90,mintable:!0,label:"Personal access token"},catalog:{prefix:"tb_cat_",defaultScopes:["catalog:read"],allowedScopes:["catalog:read"],defaultTtlDays:null,mintable:!0,label:"AI / catalog token"}},SC=Object.keys(Er).filter(t=>Er[t].mintable);var xC=Er.pat.prefix,Ik=Object.entries(Er).map(([t,e])=>[e.prefix,t]),Ck=/^[A-Za-z0-9_-]{20,}$/;function Ok(t){if(typeof t!="string")return null;for(let[e,n]of Ik)if(t.startsWith(e)&&Ck.test(t.slice(e.length)))return n;return null}function rh(t){return Ok(t)==="pat"}mr();var Nk=8e3,Lk={revoked:"the instance REVOKED this token \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",expired:"this token has EXPIRED \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",unknown:"this instance has never seen this token \u2014 it was deleted, or it belongs to a DIFFERENT instance; check the base-url before minting a new PAT",suspended:"the user this token belongs to is SUSPENDED \u2014 an instance administrator has to restore the account; a new token will not help",malformed:"the stored credential is not shaped like a Turbobase PAT (tb_pat_\u2026) \u2014 sign in again",missing:"no token reached the instance \u2014 sign in again",transient:"the instance could not verify the token right now (a storage error, not a decision about the token) \u2014 retry"};function jk(t){return Lk[t]??`the instance rejected this token (${t}) \u2014 run \`turbobase auth login\` to store a fresh PAT`}async function Dk(t,e,n=fetch){let r;try{r=await n(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(Nk)})}catch(o){return{state:"unreachable",detail:o instanceof Error?o.message:String(o)}}if(r.status===200||r.status===403)return{state:"accepted"};if(r.status===401){let o=await r.json().catch(()=>null);return{state:"rejected",reason:typeof o?.reason=="string"&&o.reason?o.reason:"unknown"}}return(r.headers.get("content-type")??"").includes("application/json")?{state:"accepted"}:{state:"unreachable",detail:`HTTP ${r.status} \u2014 this host does not serve the /v1 API`}}function sh(t){return t.state==="accepted"?Ee()?f.green("accepted"):"accepted":t.state==="rejected"?Ee()?f.red(`rejected \xB7 ${t.reason}`):`rejected \xB7 ${t.reason}`:Ee()?f.yellow("unreachable"):"unreachable"}async function oh(t={},e=fetch){let n=await It(),{file:r}=Ps();if(n.length===0){y("not signed in. Run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),L(f.dim(`no sign-ins stored in ${r}.`));return}let s=await pt(),o=await Promise.all(n.map(async i=>({baseUrl:i.baseUrl,active:!!s&&i.baseUrl===s.baseUrl,updatedAt:i.updatedAt,check:t.probe===!1?{state:"accepted"}:await Dk(i.baseUrl,i.token,e)})));if(t.probe===!1)for(let i of o)y(`${i.active?"* ":" "}${i.baseUrl} (updated ${i.updatedAt})`);else if(Ee())y(ht(o.map(i=>[i.active?f.green("*"):" ",f.bold(i.baseUrl),sh(i.check),f.dim(i.updatedAt)]),{head:["","instance","token","updated"]}));else for(let i of o)y(`${i.active?"* ":" "}${i.baseUrl} ${sh(i.check)} (updated ${i.updatedAt})`);L(f.dim(`tokens read from ${r}`));for(let i of o)i.check.state==="rejected"?(L(f.red(`${i.baseUrl}: ${jk(i.check.reason)}.`)),L(f.dim(" then re-run `turbobase project init` \u2014 .mcp.json holds its own copy of the token, and until it is rewritten the authoring MCP tools stay absent from your session."))):i.check.state==="unreachable"&&L(f.yellow(`${i.baseUrl}: could not reach the instance (${i.check.detail}).`));s||L("no active default \u2014 run `turbobase auth use <base-url>` or pass --base-url.")}async function iP(t){let e=await It();e.length===0&&k("no stored sign-ins \u2014 run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),ze()||k("this command needs an explicit <base-url> in a non-interactive shell.");try{return await Be(t,e.map(n=>({value:n.baseUrl,label:n.baseUrl,description:`updated ${n.updatedAt}`})))}catch{k("cancelled.")}}async function aP(t,e){let n;try{n=await fetch(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(s){return{ok:!1,kind:"unreachable",detail:s instanceof Error?s.message:String(s)}}let r=(n.headers.get("content-type")??"").includes("application/json");return n.status===200||n.status===403?{ok:!0}:n.status===401?{ok:!1,kind:"bad-token",detail:`HTTP ${n.status}`}:r?{ok:!0}:{ok:!1,kind:"wrong-host",detail:`HTTP ${n.status}`}}function lP(t){L(""),L("Sharing is ON. Two things reach the Turbobase product team from this instance:"),L(" \xB7 anonymized pattern cards from your proposals, solutions and INSTANCE-LEARNINGS.md \u2014"),L(" a pattern label, a record class, a fix shape, an outcome. No scripts, values or ids."),L(" \xB7 redacted prose from your projects\u2019 TURBOBASE-FEEDBACK.md \u2014 the findings you write"),L(" about OUR platform, with instance name, user names and ids masked before they leave."),L(`Turn it off: ${t}/admin/settings \u2192 Telemetry \u2192 "Share learnings and platform feedback".`),L("")}async function cP(t,e,n){let r=await cu({baseUrl:t,token:e}),s=(await It()).length-1;if(y(`signed in to ${r.baseUrl} \u2014 now the active instance`+(s>0?` (${s} other${s===1?"":"s"} stored; commands default here).`:".")),lP(r.baseUrl),!n)return;let o=await aP(r.baseUrl,e);o.ok||(o.kind==="wrong-host"?(L(`warning: ${r.baseUrl} did not respond to the Turbobase API (/v1) \u2014 got ${o.detail}.`),L(" In local dev the Turbobase API is on :4100, not the app dev-server port (e.g. :5173)."),L(" The token is stored, but commands will fail against this base-url until it points at the API.")):o.kind==="bad-token"?L(`warning: ${r.baseUrl} rejected the token (401) \u2014 the PAT may be stale, revoked, or for a different instance.`):L(`warning: could not reach ${r.baseUrl} to verify the token (${o.detail}). Stored anyway.`))}async function dP(t){let e=await ta(await wr(t),Mt(t)),n=fa(e);if(!n){let r=/\bdefineConduit\s*[<(]/.test(e);k(r?`could not parse id/on/from.source/from.recordType from ${t} \u2014 is it a defineConduit({...}) file?`:`could not parse id/recordType/event from ${t} \u2014 is it a defineHook({...}) file?`)}return{...n,sourceCode:e}}async function En(t,e,n,r){try{return await oe.access(t),"skipped"}catch{}return await oe.mkdir(Mt(t),{recursive:!0}),await oe.writeFile(t,e,{mode:r??(n?493:420)}),r!==void 0&&await oe.chmod(t,r),"wrote"}async function oy(t,e){if(ay(t)!==".gitignore")return En(t,e.content,e.executable,e.mode);let n=await oe.readFile(t,"utf8").catch(()=>null);if(n===null)return En(t,e.content,e.executable,e.mode);let r=Zu(n);return r===null?"skipped":(await oe.writeFile(t,r,"utf8"),"merged")}function Ad(t){if(t!==void 0){if(t==="junit"||t==="json")return t;k(`unknown --reporter '${t}' (expected 'junit' or 'json').`)}}function Ri(t){process.exit(t)}function uP(t){return{name:"turbobase ext test",cases:t.map(n=>{if(n.pass)return{name:n.name,status:"passed"};let r=n.error?"error":n.rejection?.code??"mismatch",s=n.error?`error: ${n.error}`:n.observed!==n.expected?`expected ${n.expected}, observed ${n.observed}`+(n.rejection?` (rejected: ${n.rejection.code??"rejected"}${n.rejection.message?` \u2014 ${n.rejection.message}`:""})`:""):`rejected: ${n.rejection?.code??"rejected"}${n.rejection?.message?` \u2014 ${n.rejection.message}`:""}`;return{name:n.name,status:"failed",detail:s,type:r}})}}function pP(t,e){let n=e.warnings.length===0?[{name:`${t} (${e.kind})`,status:"passed"}]:e.warnings.map(r=>({name:`${t}: ${r.rule}`,status:"failed",type:r.rule,detail:`${r.message} \u2192 fix: ${r.fix}`}));return{name:`turbobase ext lint ${t}`,cases:n}}function hP(t){let e=[];if(t.error)return e.push({name:`replay ${t.fixtureName}`,status:"failed",type:"error",detail:t.error}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e};for(let n of t.guards)e.push(n.status==="failed"?{name:`guard: ${n.name}`,status:"failed",type:n.name,detail:n.detail}:{name:`guard: ${n.name}`,status:"passed",detail:n.status==="skipped-offline"?`skipped-offline: ${n.detail}`:void 0});return t.whenPassed&&t.applyBranch&&e.push({name:`apply-branch: ${t.applyBranch}`,status:"passed",detail:`${t.masterAction??""} (${t.wouldWriteBindings.length} binding(s) would be written)`.trim()}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e}}function iy(t){return`${(Math.ceil(t/1048576*10)/10).toFixed(1).replace(/\.0$/,"")} MiB`}function jd({includeInternal:t=!0}={}){let e=new oP;e.name("turbobase").description("Build apps, author extensions, and drive your Turbobase instance.").version("1.19.0").option("--no-color","Disable ANSI colour + animations (also honoured via NO_COLOR / non-TTY)."),e.addHelpText("beforeAll",d=>d.command.parent?"":`${la()}
|
|
3669
|
+
`,{mode:384})}async function Ak(t){let e=await Ia();e.push(t),await Qp(e)}async function eh(t){let e=await Ia(),n=e.findIndex(s=>s.name===t);if(n===-1)return null;let[r]=e.splice(n,1);return await Qp(e),r??null}async function to(){return Ia()}function Ca(t,e=Date.now()){let n=[],r=[];for(let s of t)yk(s.expiresAt,e)?r.push(s):n.push(s);return{active:n,expired:r}}async function th(t,e){Aa(t.target());let n=t.dataCopyUnavailable?.();if(n)throw new Rr(n);let r=wk(e.sample),s=e.now??Date.now(),o=(e.nameGen??(u=>Tk(u)))(e.fromTenant),i=Ek(o);await t.createDatabase(i),await t.replayMigrations(i);let a=await t.readSourceTables(e.fromTenant);for(let u of a){let p=vk(u.rows,r),g=_k(u.table,p,u.classification);g.length>0&&await t.copyRows(i,u.table,g)}let l={name:o,fromTenant:e.fromTenant,database:i,createdAt:new Date(s).toISOString(),expiresAt:bk(e.ttl,s),sampleFraction:r,url:Pk(o,e.baseUrl)};return await Ak(l),l}async function nh(t,e){Aa(t.target());let r=(await to()).find(s=>s.name===e);return r?(await t.dropDatabase(r.database),await eh(e),r):null}async function Oa(t,e=Date.now()){Aa(t.target());let n=await to(),{expired:r}=Ca(n,e),s=[];for(let o of r){try{await t.dropDatabase(o.database)}catch{continue}await eh(o.name),s.push(o)}return s}var Er={pat:{prefix:"tb_pat_",defaultScopes:["extensions:deploy"],allowedScopes:["extensions:deploy","catalog:read","mcp:authoring","analyzer:run","releases:write","solutions:write","skills:publish","docs:publish","mcp:data","mcp:write"],defaultTtlDays:90,mintable:!0,label:"Personal access token"},catalog:{prefix:"tb_cat_",defaultScopes:["catalog:read"],allowedScopes:["catalog:read"],defaultTtlDays:null,mintable:!0,label:"AI / catalog token"}},SC=Object.keys(Er).filter(t=>Er[t].mintable);var xC=Er.pat.prefix,Ik=Object.entries(Er).map(([t,e])=>[e.prefix,t]),Ck=/^[A-Za-z0-9_-]{20,}$/;function Ok(t){if(typeof t!="string")return null;for(let[e,n]of Ik)if(t.startsWith(e)&&Ck.test(t.slice(e.length)))return n;return null}function rh(t){return Ok(t)==="pat"}mr();var Nk=8e3,Lk={revoked:"the instance REVOKED this token \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",expired:"this token has EXPIRED \u2014 mint a new PAT (Settings \u203A Access tokens) and run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`",unknown:"this instance has never seen this token \u2014 it was deleted, or it belongs to a DIFFERENT instance; check the base-url before minting a new PAT",suspended:"the user this token belongs to is SUSPENDED \u2014 an instance administrator has to restore the account; a new token will not help",malformed:"the stored credential is not shaped like a Turbobase PAT (tb_pat_\u2026) \u2014 sign in again",missing:"no token reached the instance \u2014 sign in again",transient:"the instance could not verify the token right now (a storage error, not a decision about the token) \u2014 retry"};function jk(t){return Lk[t]??`the instance rejected this token (${t}) \u2014 run \`turbobase auth login\` to store a fresh PAT`}async function Dk(t,e,n=fetch){let r;try{r=await n(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(Nk)})}catch(o){return{state:"unreachable",detail:o instanceof Error?o.message:String(o)}}if(r.status===200||r.status===403)return{state:"accepted"};if(r.status===401){let o=await r.json().catch(()=>null);return{state:"rejected",reason:typeof o?.reason=="string"&&o.reason?o.reason:"unknown"}}return(r.headers.get("content-type")??"").includes("application/json")?{state:"accepted"}:{state:"unreachable",detail:`HTTP ${r.status} \u2014 this host does not serve the /v1 API`}}function sh(t){return t.state==="accepted"?Ee()?f.green("accepted"):"accepted":t.state==="rejected"?Ee()?f.red(`rejected \xB7 ${t.reason}`):`rejected \xB7 ${t.reason}`:Ee()?f.yellow("unreachable"):"unreachable"}async function oh(t={},e=fetch){let n=await It(),{file:r}=Ps();if(n.length===0){y("not signed in. Run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),L(f.dim(`no sign-ins stored in ${r}.`));return}let s=await pt(),o=await Promise.all(n.map(async i=>({baseUrl:i.baseUrl,active:!!s&&i.baseUrl===s.baseUrl,updatedAt:i.updatedAt,check:t.probe===!1?{state:"accepted"}:await Dk(i.baseUrl,i.token,e)})));if(t.probe===!1)for(let i of o)y(`${i.active?"* ":" "}${i.baseUrl} (updated ${i.updatedAt})`);else if(Ee())y(ht(o.map(i=>[i.active?f.green("*"):" ",f.bold(i.baseUrl),sh(i.check),f.dim(i.updatedAt)]),{head:["","instance","token","updated"]}));else for(let i of o)y(`${i.active?"* ":" "}${i.baseUrl} ${sh(i.check)} (updated ${i.updatedAt})`);L(f.dim(`tokens read from ${r}`));for(let i of o)i.check.state==="rejected"?(L(f.red(`${i.baseUrl}: ${jk(i.check.reason)}.`)),L(f.dim(" then re-run `turbobase project init` \u2014 .mcp.json holds its own copy of the token, and until it is rewritten the authoring MCP tools stay absent from your session."))):i.check.state==="unreachable"&&L(f.yellow(`${i.baseUrl}: could not reach the instance (${i.check.detail}).`));s||L("no active default \u2014 run `turbobase auth use <base-url>` or pass --base-url.")}async function iP(t){let e=await It();e.length===0&&k("no stored sign-ins \u2014 run `turbobase auth login --base-url <instance> --token tb_pat_\u2026`."),ze()||k("this command needs an explicit <base-url> in a non-interactive shell.");try{return await Be(t,e.map(n=>({value:n.baseUrl,label:n.baseUrl,description:`updated ${n.updatedAt}`})))}catch{k("cancelled.")}}async function aP(t,e){let n;try{n=await fetch(`${t}/v1/catalog/records`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Accept:"application/json"},signal:AbortSignal.timeout(8e3)})}catch(s){return{ok:!1,kind:"unreachable",detail:s instanceof Error?s.message:String(s)}}let r=(n.headers.get("content-type")??"").includes("application/json");return n.status===200||n.status===403?{ok:!0}:n.status===401?{ok:!1,kind:"bad-token",detail:`HTTP ${n.status}`}:r?{ok:!0}:{ok:!1,kind:"wrong-host",detail:`HTTP ${n.status}`}}function lP(t){L(""),L("Sharing is ON. Two things reach the Turbobase product team from this instance:"),L(" \xB7 anonymized pattern cards from your proposals, solutions and INSTANCE-LEARNINGS.md \u2014"),L(" a pattern label, a record class, a fix shape, an outcome. No scripts, values or ids."),L(" \xB7 redacted prose from your projects\u2019 TURBOBASE-FEEDBACK.md \u2014 the findings you write"),L(" about OUR platform, with instance name, user names and ids masked before they leave."),L(`Turn it off: ${t}/admin/settings \u2192 Telemetry \u2192 "Share learnings and platform feedback".`),L("")}async function cP(t,e,n){let r=await cu({baseUrl:t,token:e}),s=(await It()).length-1;if(y(`signed in to ${r.baseUrl} \u2014 now the active instance`+(s>0?` (${s} other${s===1?"":"s"} stored; commands default here).`:".")),lP(r.baseUrl),!n)return;let o=await aP(r.baseUrl,e);o.ok||(o.kind==="wrong-host"?(L(`warning: ${r.baseUrl} did not respond to the Turbobase API (/v1) \u2014 got ${o.detail}.`),L(" In local dev the Turbobase API is on :4100, not the app dev-server port (e.g. :5173)."),L(" The token is stored, but commands will fail against this base-url until it points at the API.")):o.kind==="bad-token"?L(`warning: ${r.baseUrl} rejected the token (401) \u2014 the PAT may be stale, revoked, or for a different instance.`):L(`warning: could not reach ${r.baseUrl} to verify the token (${o.detail}). Stored anyway.`))}async function dP(t){let e=await ta(await wr(t),Mt(t)),n=fa(e);if(!n){let r=/\bdefineConduit\s*[<(]/.test(e);k(r?`could not parse id/on/from.source/from.recordType from ${t} \u2014 is it a defineConduit({...}) file?`:`could not parse id/recordType/event from ${t} \u2014 is it a defineHook({...}) file?`)}return{...n,sourceCode:e}}async function En(t,e,n,r){try{return await oe.access(t),"skipped"}catch{}return await oe.mkdir(Mt(t),{recursive:!0}),await oe.writeFile(t,e,{mode:r??(n?493:420)}),r!==void 0&&await oe.chmod(t,r),"wrote"}async function oy(t,e){if(ay(t)!==".gitignore")return En(t,e.content,e.executable,e.mode);let n=await oe.readFile(t,"utf8").catch(()=>null);if(n===null)return En(t,e.content,e.executable,e.mode);let r=Zu(n);return r===null?"skipped":(await oe.writeFile(t,r,"utf8"),"merged")}function Ad(t){if(t!==void 0){if(t==="junit"||t==="json")return t;k(`unknown --reporter '${t}' (expected 'junit' or 'json').`)}}function Ri(t){process.exit(t)}function uP(t){return{name:"turbobase ext test",cases:t.map(n=>{if(n.pass)return{name:n.name,status:"passed"};let r=n.error?"error":n.rejection?.code??"mismatch",s=n.error?`error: ${n.error}`:n.observed!==n.expected?`expected ${n.expected}, observed ${n.observed}`+(n.rejection?` (rejected: ${n.rejection.code??"rejected"}${n.rejection.message?` \u2014 ${n.rejection.message}`:""})`:""):`rejected: ${n.rejection?.code??"rejected"}${n.rejection?.message?` \u2014 ${n.rejection.message}`:""}`;return{name:n.name,status:"failed",detail:s,type:r}})}}function pP(t,e){let n=e.warnings.length===0?[{name:`${t} (${e.kind})`,status:"passed"}]:e.warnings.map(r=>({name:`${t}: ${r.rule}`,status:"failed",type:r.rule,detail:`${r.message} \u2192 fix: ${r.fix}`}));return{name:`turbobase ext lint ${t}`,cases:n}}function hP(t){let e=[];if(t.error)return e.push({name:`replay ${t.fixtureName}`,status:"failed",type:"error",detail:t.error}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e};for(let n of t.guards)e.push(n.status==="failed"?{name:`guard: ${n.name}`,status:"failed",type:n.name,detail:n.detail}:{name:`guard: ${n.name}`,status:"passed",detail:n.status==="skipped-offline"?`skipped-offline: ${n.detail}`:void 0});return t.whenPassed&&t.applyBranch&&e.push({name:`apply-branch: ${t.applyBranch}`,status:"passed",detail:`${t.masterAction??""} (${t.wouldWriteBindings.length} binding(s) would be written)`.trim()}),{name:`turbobase ext replay ${t.fixtureName}`,cases:e}}function iy(t){return`${(Math.ceil(t/1048576*10)/10).toFixed(1).replace(/\.0$/,"")} MiB`}function jd({includeInternal:t=!0}={}){let e=new oP;e.name("turbobase").description("Build apps, author extensions, and drive your Turbobase instance.").version("1.20.0").option("--no-color","Disable ANSI colour + animations (also honoured via NO_COLOR / non-TTY)."),e.addHelpText("beforeAll",d=>d.command.parent?"":`${la()}
|
|
3667
3670
|
`),e.hook("preAction",(d,h)=>{dp(e.opts(),h.opts())});let n=e.command("auth").description("Sign in to an instance and manage stored credentials."),r=e.command("project").description("Set up the local project and the files an agent session reads."),s=e.command("ext").description("Author, test, ship, and observe extensions \u2014 hooks and conduits."),o=e.command("kb").description("Write into the instance's knowledge base."),i=e.command("skills").description("Write standing rules into the instance's agent skills.");n.command("login").description("Sign in to an instance by pasting a personal access token (PAT), stored in ~/.turbobase/credentials.").requiredOption("--base-url <url>","Instance base URL, e.g. https://acme.turbobase.app").option("--token <tb_pat_\u2026>","The PAT to store. Mint one in your app under Settings \u203A Access tokens.").option("--no-verify","Skip the post-login connectivity/token probe.").action(async d=>{let h=tt(d.baseUrl);d.token||k(`auth login needs --token. Mint a PAT in your Turbobase app (Settings \u203A Access tokens), then:
|
|
3668
3671
|
${_r} auth login --base-url ${h} --token tb_pat_\u2026`),rh(d.token)||k("--token does not look like a Turbobase PAT (tb_pat_\u2026)."),await cP(h,d.token,d.verify)}),n.command("status").description("Show every stored sign-in, where its token was read from, and whether the instance still accepts it.").option("--no-probe","List the stored sign-ins without asking each instance about its token.").action(async d=>oh({probe:d.probe})),n.command("use [base-url]").description("Make an already-stored instance the active default (omit the arg to pick interactively).").action(async d=>{let h=d??await iP("Pick the active instance:"),w=await As(h);if(!w){let $=await It();k(`no stored sign-in for ${tt(h)}.`+($.length?` Stored: ${$.map(v=>v.baseUrl).join(", ")}.`:"")+` Run \`turbobase auth login --base-url ${tt(h)} --token tb_pat_\u2026\`.`)}y(`active instance \u2192 ${w.baseUrl}.`)}),n.command("logout").description("Remove a stored sign-in (defaults to the active instance).").option("--base-url <url>","Which instance to remove (defaults to the active/single one).").option("--all","Remove every stored sign-in.").action(async d=>{if(d.all){let $=await It();for(let v of $)await Ji(v.baseUrl);y(`removed ${$.length} stored sign-in${$.length===1?"":"s"}.`);return}let h=await Ji(d.baseUrl);h||k(d.baseUrl?`no stored sign-in for ${tt(d.baseUrl)}.`:"nothing to sign out of (or ambiguous \u2014 pass --base-url / --all).");let w=await pt();y(`signed out of ${h}.`+(w?` Active instance \u2192 ${w.baseUrl}.`:""))}),r.command("types").description("Generate types.ts from the signed-in instance's catalog.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("-o, --out <file>","Output file","types.ts").option("--records-only","Emit only record-shape interfaces (skip the OpenAPI half).").action(async d=>{let{baseUrl:h,token:w}=await G(d.baseUrl),$;try{$=await pn({baseUrl:h,token:w,recordsOnly:d.recordsOnly})}catch(m){let _=m instanceof Error?m.message:String(m);if(!d.recordsOnly&&/openapi\.json failed \(401/.test(_)){L("types-gen: /v1/catalog/openapi.json needs a browser session \u2014 emitting record shapes only. The record shapes are the half apps generate against; for the OpenAPI half, run it from a signed-in browser session.");try{$=await pn({baseUrl:h,token:w,recordsOnly:!0})}catch(E){k(`types generation failed: ${E instanceof Error?E.message:String(E)}`)}}else k(`types generation failed: ${_}`)}let v=se(process.cwd(),d.out);await oe.writeFile(v,$,"utf8"),y(`wrote ${v} (${$.split(`
|
|
3669
3672
|
`).length} lines).`)}),hp(r),r.command("grounding").description("Write the instance's grounding brief (source primer + record anatomy + KB retrieval) to a file for agent sessions.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--records <list>","Comma-separated record types to focus, e.g. purchaseOrder,itemReceipt.").option("--query <text>","Retrieval question for the knowledge base (e.g. what the app is about).").option("-o, --out <file>","Output file","INSTANCE.md").action(async d=>{let{baseUrl:h,token:w}=await G(d.baseUrl),$=new URLSearchParams;d.records&&$.set("records",d.records),d.query&&$.set("query",d.query);let v=$.toString(),m=await fetch(`${h}/v1/catalog/grounding${v?`?${v}`:""}`,{headers:{Authorization:`Bearer ${w}`,Accept:"application/json"}});m.ok||k(`grounding fetch failed: GET /v1/catalog/grounding \u2192 ${m.status}`);let E=((await m.json()).markdown??"").trim(),A=se(process.cwd(),d.out),C=d.records?` records=${d.records}`:"",O=`<!-- GENERATED by \`turbobase project grounding\` against ${h}${C} \u2014 do not edit; re-run to refresh. -->
|
|
@@ -3693,7 +3696,7 @@ samples init: ${E} written, ${A} skipped.`)});let St=e.command("guardrails").des
|
|
|
3693
3696
|
`+f.dim("create one with `turbobase guardrails create <name> --source <s> --record <r>`"));y(ht(v.map(vs),{head:Pi})),y(f.dim(" first match wins; lower PRIO is evaluated first."))}),St.command("create <name>").description("Create a rule gating PG\u2192source writes that match it.").option("--source <system>","Adapter id to scope to, or '*' for every source.","*").option("--record <type>","Record type to scope to, or '*' for every record.","*").option("--op <glob>","Raw op glob, when gating something other than a record write.").option("--target <glob>","Row address glob, e.g. 'salesOrder.12345'.").option("--actor <glob>","Only match this caller, e.g. 'agent:*' to gate AI writes but not human ones.").option("--decision <d>","allow | allow_with_audit | require_confirm | deny.","deny").option("--priority <n>","Lower is evaluated first (default 100).",d=>Number(d)).option("--when <expr>","Row predicate, e.g. 'total gt 10000'. Omit to match every row.").option("--reason <text>","Why this rule exists \u2014 shown to a blocked writer and in `list`.").option("--disabled","Create the rule parked, so it takes effect only when activated.").option("--confirm-freeze-all","Required for an unconditional deny across '*'/'*'.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$}),m;try{m=await v.guardrailCreate({name:d,source:h.source,record:h.record,decision:h.decision,...h.op?{op:h.op}:{},...h.target?{target:h.target}:{},...h.actor?{actor:h.actor}:{},...Number.isFinite(h.priority)?{priority:Number(h.priority)}:{},...h.when?{when:h.when}:{},...h.reason?{reason:h.reason}:{},...h.disabled?{enabled:!1}:{},...h.confirmFreezeAll?{confirmFreezeAll:!0}:{}})}catch(_){J(_,"extensions:deploy","create a guardrail"),k(`create guardrail failed: ${_ instanceof Error?_.message:String(_)}`)}y(`${f.green("\u2713")} guardrail ${f.bold(m.name??m.id)} created${m.status==="active"?"":f.dim(` (${m.status} \u2014 activate it to take effect)`)}`),y(f.dim(` ${m.decision} ${m.source}/${m.record??m.op}${m.actor?` actor=${m.actor}`:""}${m.when?` where ${m.when}`:""} @prio ${m.priority}`)),y(f.dim(` verify with: turbobase guardrails test --source ${m.source==="*"?"<source>":m.source} --record <record>`))}),St.command("edit <name>").description("Change a rule \u2014 its decision, priority, predicate or reason.").option("--decision <d>","allow | allow_with_audit | require_confirm | deny.").option("--priority <n>","Lower is evaluated first.",d=>Number(d)).option("--when <expr>","New row predicate. Pass '' to match every row.").option("--reason <text>","Why this rule exists.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{h.decision===void 0&&h.priority===void 0&&h.when===void 0&&h.reason===void 0&&k("edit: nothing to change \u2014 pass --decision, --priority, --when or --reason.");let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$}),m;try{m=await v.guardrailUpdate(d,{...h.decision!==void 0?{decision:h.decision}:{},...Number.isFinite(h.priority)?{priority:Number(h.priority)}:{},...h.when!==void 0?{when:h.when}:{},...h.reason!==void 0?{reason:h.reason}:{}})}catch(_){J(_,"extensions:deploy","edit a guardrail"),k(`edit guardrail failed: ${_ instanceof Error?_.message:String(_)}`)}y(`${f.green("\u2713")} guardrail ${f.bold(m.name??m.id)} updated`),y(f.dim(` ${m.decision} ${m.source}/${m.record??m.op}${m.when?` where ${m.when}`:""} @prio ${m.priority}`))});for(let[d,h,w]of[["activate","active","activated"],["deactivate","inactive","deactivated"]])St.command(`${d} <name>`).description(h==="active"?"Arm a parked or proposed rule.":"Park a rule without deleting it \u2014 the reversible move mid-rollout.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async($,v)=>{let{baseUrl:m,token:_}=await G(v.baseUrl),E=new H({baseUrl:m,token:_});try{await E.guardrailUpdate($,{status:h})}catch(A){J(A,"extensions:deploy",`${d} a guardrail`),k(`${d} guardrail failed: ${A instanceof Error?A.message:String(A)}`)}y(`${f.green("\u2713")} guardrail ${f.bold($)} ${w}`),h==="inactive"&&y(f.dim(" writes it was gating now fall through to the other rules."))});St.command("delete <name>").description("Remove a rule. Prefer `deactivate` if you may want it back.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$});try{await v.guardrailDelete(d)}catch(m){J(m,"extensions:deploy","delete a guardrail"),k(`delete guardrail failed: ${m instanceof Error?m.message:String(m)}`)}y(`${f.green("\u2713")} guardrail ${f.bold(d)} deleted`)}),St.command("posture [mode]").description("Show or set the GLOBAL default. 'allow' = deny-list (unmatched writes allowed, carve with deny rules). 'deny' = allow-list (unmatched writes denied, open with allow rules).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$}),m=A=>A==="deny"?"deny-by-default (allow-list)":"allow-by-default (deny-list)";if(d===void 0){let A;try{A=await v.guardrailPostureGet()}catch(C){J(C,"extensions:deploy","read the guardrail posture"),k(`read posture failed: ${C instanceof Error?C.message:String(C)}`)}y(`guardrail posture: ${f.bold(m(A.mode))}`),y(f.dim(A.mode==="deny"?" Unmatched writes are DENIED. Open records with `guardrails create <name> --decision allow`.":" Unmatched writes are allowed-with-audit. Freeze records with `guardrails create <name> --decision deny`."));return}let _=d.trim().toLowerCase();_!=="allow"&&_!=="deny"&&k("posture must be 'allow' or 'deny'.");let E;try{E=await v.guardrailPostureSet(_)}catch(A){J(A,"extensions:deploy","set the guardrail posture"),k(`set posture failed: ${A instanceof Error?A.message:String(A)}`)}y(`${f.green("\u2713")} guardrail posture set to ${f.bold(m(E.mode))}`),E.mode==="deny"&&y(f.dim(" Every record with no active ALLOW rule is now frozen for write-back. Verify with `guardrails test --source <s> --record <r>`."))}),St.command("test").description("What happens to this write? Runs the real evaluator; writes nothing.").requiredOption("--source <system>","Adapter id the write targets.").requiredOption("--record <type>","Record type the write targets.").option("--actor <actor>","Caller to simulate, e.g. 'agent:ai' or 'user:<id>'.").option("--external-id <id>","Source-side row id, for target-scoped rules.").option("--fields <json>","A candidate row as JSON, so `when` predicates can be decided.").option("--op <op>","Write op: 'delete' tests <record>.delete; omitted tests <record>.write.").option("--phase <phase>","boundary | cdc | worker | adapter. Defaults to worker (the last gate).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--json","Emit raw JSON.").action(async d=>{let h;if(d.fields)try{h=JSON.parse(d.fields)}catch(E){k(`--fields must be valid JSON: ${E instanceof Error?E.message:String(E)}`)}let{baseUrl:w,token:$}=await G(d.baseUrl),v=new H({baseUrl:w,token:$}),m;try{m=await v.guardrailTest({source:d.source,record:d.record,...d.actor?{actor:d.actor}:{},...d.externalId?{externalId:d.externalId}:{},...h?{fields:h}:{},...d.op?{op:d.op}:{},...d.phase?{phase:d.phase}:{}})}catch(E){J(E,"extensions:deploy","test guardrails"),k(`guardrails test failed: ${E instanceof Error?E.message:String(E)}`)}if(d.json)return y(JSON.stringify(m,null,2));let _=`${d.source}/${m.op??d.record}`;m.degraded?(y(`${f.red("\u2717")} ${_} \u2014 guardrail policy is UNREADABLE; writes fail closed`),y(f.dim(` ${m.reason}`))):m.allowed?y(`${f.green("\u2713")} ${_} \u2014 ${m.decision}`+(m.blockedBy?f.dim(` (rule ${m.blockedBy})`):f.dim(" (no rule matched)"))):(y(`${f.red("\u2717")} ${_} \u2014 ${m.decision} by ${f.bold(m.blockedBy??"?")} at the ${m.phase} gate`),m.message&&y(f.dim(` ${m.message}`))),m.decision==="require_confirm"&&y(f.yellow(" this write is HELD for operator approval, not refused.")),m.allowed||(process.exitCode=1)});let pr=e.command("tables").description("Author custom tables on your instance (create, evolve, inspect)."),ks=(d,h={})=>{let w=`${f.bold(d.table)} ${f.dim(d.displayName)}`;y(d.exists===!1?`${w} ${f.dim("(new)")}`:w);for(let $ of d.fields){let v=[$.required?"required":null].filter(Boolean).join(", "),m=h.showClaimants&&$.claimedBy?.length?` ${f.dim(`\u2190 ${$.claimedBy.join(", ")}`)}`:"";y(` ${$.column.padEnd(28)} ${$.type}${v?` (${v})`:""}${m}`)}h.showClaimants&&d.claimants.length>1&&y(f.dim(` claimed by ${d.claimants.join(", ")}`))};function Ss(d){if(d instanceof Q&&d.status===409){let h=d.body;h?.error==="table_conflict"&&h.message&&(L(h.message),process.exit(1))}k(`tables: ${d instanceof Error?d.message:String(d)}`)}let Dd=async d=>{let h=Qe(se(process.cwd(),d),"public","turbobase.json"),w=await oe.readFile(h,"utf8").catch(()=>null);if(w===null)return null;let $;try{$=JSON.parse(w)}catch(m){k(`${h} is not valid JSON: ${m instanceof Error?m.message:String(m)}`)}let v=$.tables;return v===void 0?{tables:[],manifestPath:h}:(Array.isArray(v)||k(`${h}: "tables" must be an array.`),{tables:v,manifestPath:h})};pr.command("list").description("List the custom tables on your instance and who claims each one.").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--json","Emit raw JSON instead of a table.").action(async d=>{let{baseUrl:h,token:w}=await G(d.baseUrl),$=new H({baseUrl:h,token:w}),v;try{v=await $.tablesList()}catch(m){J(m,"extensions:deploy","list tables"),k(`list tables failed: ${m instanceof Error?m.message:String(m)}`)}if(d.json)return y(JSON.stringify(v,null,2));if(v.length===0)return y("no custom tables yet \u2014 create one with `turbobase tables create <slug>`.");y(ht(v.map(m=>[m.table,m.displayName,String(m.fields.length),m.status,m.claimedBy.join(", ")||"\u2014"]),{head:["TABLE","NAME","FIELDS","STATUS","CLAIMED BY"]}))}),pr.command("plan").description("Preview what this project's declared tables would do. Writes nothing; exits 1 on a conflict.").argument("[dir]","Project directory holding public/turbobase.json (default ./).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--as <claimant>","Claim as `cli` or `app:<slug>` (default: the app slug in .turbobase, else cli).").action(async(d,h)=>{let w=await Dd(d??".");if(w||k(`no public/turbobase.json under ${se(process.cwd(),d??".")}.`),w.tables.length===0)return y(`${w.manifestPath} declares no tables \u2014 nothing to plan.`);let{baseUrl:$,token:v}=await G(h.baseUrl),m=new H({baseUrl:$,token:v}),_;try{_=await Z("planning tables",()=>m.tablesPlan({claimedBy:h.as,tables:w.tables}))}catch(E){J(E,"extensions:deploy","plan tables"),Ss(E)}y(`claiming as ${f.bold(_.claimedBy)}`);for(let E of _.tables)ks(E,{showClaimants:!0});y(""),y(f.dim("nothing was applied \u2014 run `turbobase tables apply` (or deploy the app) to make it so."))}),pr.command("apply").description("Apply this project's declared tables to the instance.").argument("[dir]","Project directory holding public/turbobase.json (default ./).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--as <claimant>","Claim as `cli` or `app:<slug>` (default: cli).").action(async(d,h)=>{let w=await Dd(d??".");if(w||k(`no public/turbobase.json under ${se(process.cwd(),d??".")}.`),w.tables.length===0)return y(`${w.manifestPath} declares no tables \u2014 nothing to apply.`);let{baseUrl:$,token:v}=await G(h.baseUrl),m=new H({baseUrl:$,token:v}),_;try{_=await Z("applying tables",()=>m.tablesApply({claimedBy:h.as,tables:w.tables}))}catch(E){J(E,"extensions:deploy","apply tables"),Ss(E)}for(let E of _.tables)ks(E,{showClaimants:!0});y(`applied ${_.tables.length} table${_.tables.length===1?"":"s"} as ${_.claimedBy}.`)}),pr.command("create").description('Create a single table without a manifest (the CLI twin of "New custom table").').argument("<slug>","Table slug; the physical table is cr_<slug>.").requiredOption("-f, --field <name:type>","Field as name:type[:required] \u2014 text|number|date|bool|select. Repeatable.",(d,h)=>[...h??[],d],[]).option("--name <displayName>","Human label for the table (defaults to the slug).").option("--restrict-to-owner","Non-admins see only rows they created.").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{let w=h.field.map(E=>{let[A,C,O]=E.split(":");return(!A||!C)&&k(`--field "${E}" must be name:type[:required] (e.g. title:text:required).`),O!==void 0&&O!=="required"&&k(`--field "${E}": the third part may only be "required".`),{name:A,type:C,...O==="required"?{required:!0}:{}}}),{baseUrl:$,token:v}=await G(h.baseUrl),m=new H({baseUrl:$,token:v}),_;try{_=await Z(`creating cr_${d}`,()=>m.tablesApply({tables:[{slug:d,displayName:h.name??d,fields:w,...h.restrictToOwner?{rowLevelOwner:!0}:{}}]}))}catch(E){J(E,"extensions:deploy","create a table"),Ss(E)}for(let E of _.tables)ks(E);y(""),y(f.dim("grant access under Settings \u203A Users, or in the Records page permissions matrix."))}),pr.command("drop").description("Drop a table and everything in it. Irreversible.").argument("<slug>","Table slug (without the cr_ prefix).").requiredOption("--confirm <slug>","Type the EXACT slug to confirm (fail-closed).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{h.confirm!==d&&k(`drop refused: --confirm "${h.confirm}" does not match "${d}".`);let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$}),m;try{m=await Z(`dropping cr_${d}`,()=>v.tablesDrop(d,h.confirm))}catch(_){J(_,"extensions:deploy","drop a table"),k(`drop failed: ${_ instanceof Error?_.message:String(_)}`)}if(!m.removed)return y(`no table named "${d}" on this instance \u2014 nothing dropped.`);y(`dropped ${m.table} and every row in it.`)});let Ai=e.command("sandbox").description("Ephemeral local authoring sandboxes.");Ai.command("create").description("Stand up a fresh local sandbox seeded with a sampled+redacted slice of an instance.").requiredOption("--from <instance>","Source instance to clone the data slice from.").option("--ttl <duration>","Time-to-live before reaping (e.g. 72h, 30m, 7d).","72h").option("--sample <pct>","Percent of each table to copy (e.g. 2%).","2%").option("--base-url <url>","Local base URL the sandbox is reachable at.").action(async d=>{process.env.TURBOBASE_SANDBOX="1";let h=Cd(),w;try{w=await th(h,{fromTenant:d.from,ttl:d.ttl,sample:d.sample,baseUrl:d.baseUrl})}catch($){$ instanceof Rr&&k($.message),k(`sandbox create failed: ${$ instanceof Error?$.message:String($)}`)}y(`sandbox ${w.name} ready.`),y(` source: ${w.fromTenant} (sampled ${Math.round(w.sampleFraction*100)}%, redacted)`),y(` url: ${w.url}`),y(` expires: ${w.expiresAt}`)}),Ai.command("destroy").argument("<name>","The sandbox name to tear down.").description("Drop a sandbox database and remove it from the registry.").action(async d=>{let h=Cd();await Oa(h).catch(()=>[]);let w;try{w=await nh(h,d)}catch($){k(`sandbox destroy failed: ${$ instanceof Error?$.message:String($)}`)}w||k(`no sandbox named '${d}'.`),y(`destroyed sandbox ${w.name} (dropped ${w.database}).`)}),Ai.command("list").description("List active sandboxes with TTL/expiry; reaps any past their TTL.").action(async()=>{let d=Cd(),h=await Oa(d).catch(()=>[]),w=await to(),{active:$}=Ca(w);if($.length===0)y("no active sandboxes.");else{for(let v of $)y(` ${v.name} from=${v.fromTenant} expires=${v.expiresAt} ${v.url}`);y(`
|
|
3694
3697
|
${$.length} active sandbox(es).`)}h.length>0&&y(`(reaped ${h.length} expired sandbox(es).)`)}),s.command("export").description("Pull the live instance into turbobase/bundle.json (adopt an instance into a repo).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--out <dir>","Directory to write the bundle into.",Ks).action(async d=>{let{baseUrl:h,token:w}=await G(d.baseUrl),$=new H({baseUrl:h,token:w}),v;try{v=await Z("exporting instance config",()=>$.configExport())}catch(E){E instanceof Q&&(E.status===401||E.status===403)&&k("ext export forbidden \u2014 the stored PAT lacks extensions:deploy. Re-run `turbobase auth login`."),k(`ext export failed: ${E instanceof Error?E.message:String(E)}`)}let m=typeof v.serialized=="string"?v.serialized:`${JSON.stringify(v.manifest??v,null,2)}
|
|
3695
3698
|
`,_=se(process.cwd(),d.out,kr);await oe.mkdir(Mt(_),{recursive:!0}),await oe.writeFile(_,m,"utf8"),y(`wrote ${d.out}/${kr} (${m.split(`
|
|
3696
|
-
`).length} lines).`)});let Ud=s.command("extras").description("Manage the optional native packages `ext test` and `ext replay` need."),ly=[{name:"esbuild",needs:"compiling an extension (`test`, `replay`)"},{name:"isolated-vm",needs:"executing an extension in the sandbox (`test`, `replay`)"}],Md=()=>process.env.TURBOBASE_HOME?.trim()||Qe(sP(),".turbobase"),cy=()=>"1.
|
|
3699
|
+
`).length} lines).`)});let Ud=s.command("extras").description("Manage the optional native packages `ext test` and `ext replay` need."),ly=[{name:"esbuild",needs:"compiling an extension (`test`, `replay`)"},{name:"isolated-vm",needs:"executing an extension in the sandbox (`test`, `replay`)"}],Md=()=>process.env.TURBOBASE_HOME?.trim()||Qe(sP(),".turbobase"),cy=()=>"1.20.0",_s=async()=>Promise.all(ly.map(async d=>{try{return await import(d.name),{...d,present:!0}}catch{return{...d,present:!1}}}));Ud.command("status").description("Report which optional native packages are installed.").action(async()=>{let d=await _s();for(let h of d)y(`${h.present?Se.success("installed"):Se.warn("missing")} ${f.bold(h.name)} \u2014 ${h.needs}`);d.some(h=>!h.present)&&y(`
|
|
3697
3700
|
run \`${_r} ext extras install\` to fetch them into ${Md()}.`)}),Ud.command("install").description("Install the optional native packages into $TURBOBASE_HOME (needs npm).").action(async()=>{let d=await _s();if(d.every(A=>A.present)){y(Se.success("extras already installed \u2014 nothing to do."));return}let h=Md();await oe.mkdir(h,{recursive:!0});let w=d.filter(A=>!A.present).map(A=>A.name),$=Ta(process.platform,process.arch),v=async(A,C)=>{let{code:O,stderr:U}=await ws("npm",["install","--prefix",h,"--no-audit","--no-fund",...A]);O!==0&&k(`extras install failed while installing ${C} (npm exited ${O}).
|
|
3698
3701
|
${U.trim()}
|
|
3699
3702
|
These are native packages \u2014 they need npm and a working toolchain. Everything except \`test\` and \`replay\` works without them.`)},m=w.filter(A=>A!=="isolated-vm");if(m.length>0){let A=m.map(C=>`${C}@${$a[C]??"latest"}`);y(`installing ${A.join(", ")} \u2192 ${h}/node_modules \u2026`),await v(A,m.join(", "))}if(w.includes("isolated-vm")){let A=`isolated-vm@${$a["isolated-vm"]}`;if(y(`installing ${A} \u2192 ${h}/node_modules \u2026`),await v(["--ignore-scripts",A],"isolated-vm"),Wp.includes($)){let O=`${xa}@${cy()}`;y(`fetching ${O} (no upstream binary for ${$}) \u2026`);let{code:U}=await ws("npm",["install","--prefix",h,"--no-audit","--no-fund","--ignore-scripts",O]);U!==0&&y(Se.warn(`could not fetch ${O} \u2014 falling back to a source build.`))}let C=await Jp({home:h});C.length>0&&y(` ${Se.success("prebuilt")} ${C.join(", ")} \u2192 isolated-vm/prebuilds/${$}`)}let _=await _s(),E=_.filter(A=>!A.present).map(A=>A.name);if(E.includes("isolated-vm")){y(Se.warn(`no prebuilt isolated-vm for ${$} / Node ${process.versions.node} (${Ra()}) \u2014 building from source. This needs Python and a C++ toolchain, and takes a few minutes.`));let{code:A}=await ws("npm",["rebuild","--prefix",h,"isolated-vm"]);A===0&&(_=await _s(),E=_.filter(C=>!C.present).map(C=>C.name))}E.length>0&&k(`npm succeeded but ${E.join(", ")} still will not load \u2014 no prebuilt binary for ${$} / Node ${process.versions.node} (${Ra()}), and the source build did not produce one either. Everything except \`test\` and \`replay\` works without them.`),y(Se.success("extras installed \u2014 `turbobase ext test` and `turbobase ext replay` are ready."))});let Pn=e.command("release").description("Ship a release to your instance: deploy | status | rollback | list.");return Pn.command("deploy").description("Enqueue a server-side release deploy. UPLOADS the SDF project src/ from the checkout (the producer swap) when present; else a solution-only live-fetch deploy. An approved target requires --approved-by.").requiredOption("--target <mode>","Deploy posture: auto (apply now) | approved (needs a recorded approval).").option("--solution <id>","The solution id the release delivers (omit for an upload-only deploy).").option("--project <dir>","SDF project dir whose src/ is uploaded (default: cwd).").option("--git-repo <repo>","Git provenance LINK: source repo (default $GITHUB_REPOSITORY or `git remote get-url origin`).").option("--git-ref <ref>","Git provenance LINK: ref/branch/tag (default $GITHUB_REF).").option("--ref <committish>","Git provenance: the ref/branch/tag/sha the upload was built from; resolved to a commit sha via `git rev-parse` (default $GITHUB_SHA or HEAD).").option("--pr-url <url>","Git provenance LINK: the PR this deploy came from (default $PR_URL).").option("--approved-by <email>","Record the approval (REQUIRED for --target approved).").option("--base-url <url>","Instance base URL (defaults to the active instance).").option("--follow","Poll the release deploy to completion (exit non-zero on failure).").option("--interval-ms <ms>","Poll interval for --follow (default 2000).").action(async d=>{let h=d.target==="approved"?"approved":d.target==="auto"?"auto":null;h||k(`--target must be 'auto' or 'approved' (got '${d.target}').`);let w=await wP(se(process.cwd(),d.project??".")),$=Object.keys(w).length;!d.solution&&$===0&&k("release deploy needs --solution <id> (live-fetch) or an SDF project (a src/ dir under --project, default cwd) to upload.");let m=(d.ref?await Od(["rev-parse",d.ref])??d.ref:null)??process.env.GITHUB_SHA??await Od(["rev-parse","HEAD"]),_=d.gitRepo??process.env.GITHUB_REPOSITORY??await Od(["remote","get-url","origin"]),E=d.gitRef??process.env.GITHUB_REF??null,A=d.prUrl??process.env.PR_URL??null,{baseUrl:C,token:O}=await G(d.baseUrl),U=new H({baseUrl:C,token:O}),I;try{I=await U.releaseDeploy({solutionId:d.solution??null,target:h,approvedBy:d.approvedBy??null,files:$>0?w:null,gitRepo:_,gitRef:E,gitSha:m,prUrl:A})}catch(F){J(F,"releases:write","release deploy"),F instanceof Q&&F.status===404&&k("solution_not_found \u2014 no solution with that id."),k(`release deploy failed: ${F instanceof Error?F.message:String(F)}`)}y(`release ${I.releaseId} enqueued \u2192 taskId=${I.taskId} (target=${h}`+($>0?`, uploaded ${$} bundle file(s)`:", live-fetch")+")."),d.follow&&await ga(()=>U.releaseStatus(I.releaseId),`release ${I.releaseId}`,d.intervalMs)}),Pn.command("pull").argument("<id>","The release id").description("Write the SDF project a FAILED release built into <dir>: owned/ (yours, editable) and context/ (the rest of the bundle, read-only). Edit owned/, then `release push`.").requiredOption("--dir <path>","Directory to write the project into (created if absent).").option("--base-url <url>","Instance base URL (defaults to the active instance).").action(async(d,h)=>{let{baseUrl:w,token:$}=await G(h.baseUrl),v=new H({baseUrl:w,token:$}),m;try{m=await v.releaseFiles(d)}catch(A){A instanceof Q&&A.status===404&&k(`release ${d} not found.`),A instanceof Q&&A.status===409&&k(`no built project was retained for release ${d}. Files are kept for a FAILED attempt only \u2014 a shipped bundle is recoverable from the account.`),J(A,"releases:write","pull a release"),k(`release pull failed: ${A instanceof Error?A.message:String(A)}`)}let _=se(process.cwd(),h.dir),E=0;for(let[A,C]of[["owned",m.owned],["context",m.context]])for(let[O,U]of Object.entries(C)){let I=Qe(_,A,O);await oe.mkdir(Mt(I),{recursive:!0}),await oe.writeFile(I,U,"utf8"),E++}await oe.writeFile(Qe(_,".turbobase-release.json"),JSON.stringify({releaseId:m.releaseId,version:m.version,contentDigest:m.contentDigest},null,2),"utf8"),y(`pulled release ${m.releaseId} (${m.status}) \u2192 ${_}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@turbobase/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.20.0",
|
|
4
4
|
"description": "Author, test, and deploy Turbobase extensions (hooks + conduits) against a tenant over HTTP + a personal access token.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|